[{"data":1,"prerenderedAt":173026},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-12-04-qiang-hua-xue-xi\u002Fch6-jia-zhi-wang-luo":3,"wiki-doc-nav":28},{"id":4,"title":5,"body":6,"description":16,"extension":21,"meta":22,"navigation":23,"path":24,"seo":25,"stem":26,"__hash__":27},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":8,"toc":17},"minimark",[9,13],[10,11,5],"h1",{"id":12},"_6价值网络",[14,15,16],"p",{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":18,"searchDepth":19,"depth":19,"links":20},"",2,[],"md",{},true,"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":5,"description":16},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",[29,5146,6254,7674,10663,12014,13503,14592,23355,23368,23967,23993,24117,24358,24423,24434,24447,24494,24618,24787,24986,25166,25371,25507,25602,25639,25652,25962,26703,27411,27432,28452,30083,30234,30247,30259,30560,50372,50387,50404,50437,53309,76657,92802,92823,92936,93057,93827,94490,94851,94889,94995,95095,95138,95164,95225,96879,96980,97005,97496,97996,99076,99359,100101,100603,100615,102631,104295,105798,107496,109413,111332,113354,116824,117256,117719,118468,121412,121760,121782,122138,125445,125457,125860,125883,126030,126197,126402,126703,127260,127917,129848,131446,132095,133589,135020,136255,137949,139701,142111,142227,143162,143373,144258,145493,145721,145734,146889,149301,151669,154990,157467,159111,160888,162901,165953,168133,170660,172854],{"id":30,"title":31,"body":32,"description":18,"extension":21,"meta":5141,"navigation":23,"path":5142,"seo":5143,"stem":5144,"__hash__":5145},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":33,"toc":5113},[34,37,42,45,49,62,66,71,74,77,80,83,86,121,125,128,131,134,137,190,194,213,215,229,232,240,243,1106,1113,1130,1134,1225,1229,1235,1324,1328,1366,1370,1434,1438,1442,1449,1460,1464,1469,1473,1478,1482,1487,1491,1495,1500,1770,1775,1913,1918,2175,2178,2186,2190,2195,2298,2301,2607,2616,2717,2720,2723,2726,2729,2989,2994,3134,3137,3316,3319,3447,3450,3602,3606,3611,3614,3625,3633,3636,3743,3747,3751,3756,3806,3811,3816,3840,3845,3898,3901,3906,4083,4088,4373,4378,4775,4779,4784,4841,4846,4854,4857,4997,5000,5109],[10,35,31],{"id":36},"_1基础入门",[38,39,41],"h2",{"id":40},"_11注释","1.1注释",[14,43,44],{},"\u002F\u002F或者\u002F* *\u002F",[38,46,48],{"id":47},"_12命名","1.2命名",[50,51,52,56,59],"ol",{},[53,54,55],"li",{},"字母数字下划线",[53,57,58],{},"开头必须是字母或_",[53,60,61],{},"不能使用关键词",[38,63,65],{"id":64},"_13数据类型","1.3数据类型",[67,68,70],"h3",{"id":69},"_131整形","1.3.1整形",[14,72,73],{},"short 短整形 2",[14,75,76],{},"int 整形 4",[14,78,79],{},"long 长整形 win4 linux32位4 linux64位8",[14,81,82],{},"long long 长长整形 8",[14,84,85],{},"利用sizeof可以求数据类型占用的内存空间大小",[87,88,92],"pre",{"className":89,"code":90,"language":91,"meta":18,"style":18},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[93,94,95,114],"code",{"__ignoreMap":18},[96,97,100,104,108,111],"span",{"class":98,"line":99},"line",1,[96,101,103],{"class":102},"szBVR","sizeof",[96,105,107],{"class":106},"sVt8B","(",[96,109,110],{"class":102},"int",[96,112,113],{"class":106},")\n",[96,115,116,118],{"class":98,"line":19},[96,117,103],{"class":102},[96,119,120],{"class":106},"(num)\n",[67,122,124],{"id":123},"_132浮点型","1.3.2浮点型",[14,126,127],{},"float 单精度 4节 7位有效数字",[14,129,130],{},"double 双精度 8节 15-16有效数字",[14,132,133],{},"默认情况下，输出一个小数，会显示6位有效数字",[14,135,136],{},"注意点：",[87,138,140],{"className":89,"code":139,"language":91,"meta":18,"style":18},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[93,141,142,167],{"__ignoreMap":18},[96,143,144,147,150,153,157,160,163],{"class":98,"line":99},[96,145,146],{"class":102},"float",[96,148,149],{"class":106}," f1",[96,151,152],{"class":102},"=",[96,154,156],{"class":155},"sj4cs","3.14",[96,158,159],{"class":102},"f",[96,161,162],{"class":106},";",[96,164,166],{"class":165},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[96,168,169,171,174,176,179,182,185,187],{"class":98,"line":19},[96,170,146],{"class":102},[96,172,173],{"class":106}," f2",[96,175,152],{"class":102},[96,177,178],{"class":155},"3",[96,180,181],{"class":102},"e",[96,183,184],{"class":155},"2",[96,186,162],{"class":106},[96,188,189],{"class":165}," \u002F\u002F科学记数法\n",[67,191,193],{"id":192},"_133字符型","1.3.3字符型",[87,195,197],{"className":89,"code":196,"language":91,"meta":18,"style":18},"char ch='a'\n",[93,198,199],{"__ignoreMap":18},[96,200,201,204,207,209],{"class":98,"line":99},[96,202,203],{"class":102},"char",[96,205,206],{"class":106}," ch",[96,208,152],{"class":102},[96,210,212],{"class":211},"sZZnC","'a'\n",[14,214,136],{},[50,216,217,220,223,226],{},[53,218,219],{},"在显示字符型变量时，只能单引号，双引号x",[53,221,222],{},"单引号内只能一个字符，不能字符串",[53,224,225],{},"c和c++字符型变量只占用一个字符",[53,227,228],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[14,230,231],{},"ASCII码大致由以下两部分组成：",[50,233,234,237],{},[53,235,236],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[53,238,239],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[14,241,242],{},"ASCII码表格：",[244,245,246,290],"table",{},[247,248,249],"thead",{},[250,251,252,260,265,269,274,278,282,286],"tr",{},[253,254,255,259],"th",{},[256,257,258],"strong",{},"ASCII","值",[253,261,262],{},[256,263,264],{},"控制字符",[253,266,267,259],{},[256,268,258],{},[253,270,271],{},[256,272,273],{},"字符",[253,275,276,259],{},[256,277,258],{},[253,279,280],{},[256,281,273],{},[253,283,284,259],{},[256,285,258],{},[253,287,288],{},[256,289,273],{},[291,292,293,320,346,371,396,422,447,472,498,523,549,575,601,626,652,678,704,728,753,778,803,828,853,878,903,928,953,979,1004,1029,1054,1080],"tbody",{},[250,294,295,299,302,305,308,311,314,317],{},[296,297,298],"td",{},"0",[296,300,301],{},"NUT",[296,303,304],{},"32",[296,306,307],{},"(space)",[296,309,310],{},"64",[296,312,313],{},"@",[296,315,316],{},"96",[296,318,319],{},"、",[250,321,322,325,328,331,334,337,340,343],{},[296,323,324],{},"1",[296,326,327],{},"SOH",[296,329,330],{},"33",[296,332,333],{},"!",[296,335,336],{},"65",[296,338,339],{},"A",[296,341,342],{},"97",[296,344,345],{},"a",[250,347,348,350,353,356,359,362,365,368],{},[296,349,184],{},[296,351,352],{},"STX",[296,354,355],{},"34",[296,357,358],{},"\"",[296,360,361],{},"66",[296,363,364],{},"B",[296,366,367],{},"98",[296,369,370],{},"b",[250,372,373,375,378,381,384,387,390,393],{},[296,374,178],{},[296,376,377],{},"ETX",[296,379,380],{},"35",[296,382,383],{},"#",[296,385,386],{},"67",[296,388,389],{},"C",[296,391,392],{},"99",[296,394,395],{},"c",[250,397,398,401,404,407,410,413,416,419],{},[296,399,400],{},"4",[296,402,403],{},"EOT",[296,405,406],{},"36",[296,408,409],{},"$",[296,411,412],{},"68",[296,414,415],{},"D",[296,417,418],{},"100",[296,420,421],{},"d",[250,423,424,427,430,433,436,439,442,445],{},[296,425,426],{},"5",[296,428,429],{},"ENQ",[296,431,432],{},"37",[296,434,435],{},"%",[296,437,438],{},"69",[296,440,441],{},"E",[296,443,444],{},"101",[296,446,181],{},[250,448,449,452,455,458,461,464,467,470],{},[296,450,451],{},"6",[296,453,454],{},"ACK",[296,456,457],{},"38",[296,459,460],{},"&",[296,462,463],{},"70",[296,465,466],{},"F",[296,468,469],{},"102",[296,471,159],{},[250,473,474,477,480,483,486,489,492,495],{},[296,475,476],{},"7",[296,478,479],{},"BEL",[296,481,482],{},"39",[296,484,485],{},",",[296,487,488],{},"71",[296,490,491],{},"G",[296,493,494],{},"103",[296,496,497],{},"g",[250,499,500,503,506,509,511,514,517,520],{},[296,501,502],{},"8",[296,504,505],{},"BS",[296,507,508],{},"40",[296,510,107],{},[296,512,513],{},"72",[296,515,516],{},"H",[296,518,519],{},"104",[296,521,522],{},"h",[250,524,525,528,531,534,537,540,543,546],{},[296,526,527],{},"9",[296,529,530],{},"HT",[296,532,533],{},"41",[296,535,536],{},")",[296,538,539],{},"73",[296,541,542],{},"I",[296,544,545],{},"105",[296,547,548],{},"i",[250,550,551,554,557,560,563,566,569,572],{},[296,552,553],{},"10",[296,555,556],{},"LF",[296,558,559],{},"42",[296,561,562],{},"*",[296,564,565],{},"74",[296,567,568],{},"J",[296,570,571],{},"106",[296,573,574],{},"j",[250,576,577,580,583,586,589,592,595,598],{},[296,578,579],{},"11",[296,581,582],{},"VT",[296,584,585],{},"43",[296,587,588],{},"+",[296,590,591],{},"75",[296,593,594],{},"K",[296,596,597],{},"107",[296,599,600],{},"k",[250,602,603,606,609,612,614,617,620,623],{},[296,604,605],{},"12",[296,607,608],{},"FF",[296,610,611],{},"44",[296,613,485],{},[296,615,616],{},"76",[296,618,619],{},"L",[296,621,622],{},"108",[296,624,625],{},"l",[250,627,628,631,634,637,640,643,646,649],{},[296,629,630],{},"13",[296,632,633],{},"CR",[296,635,636],{},"45",[296,638,639],{},"-",[296,641,642],{},"77",[296,644,645],{},"M",[296,647,648],{},"109",[296,650,651],{},"m",[250,653,654,657,660,663,666,669,672,675],{},[296,655,656],{},"14",[296,658,659],{},"SO",[296,661,662],{},"46",[296,664,665],{},".",[296,667,668],{},"78",[296,670,671],{},"N",[296,673,674],{},"110",[296,676,677],{},"n",[250,679,680,683,686,689,692,695,698,701],{},[296,681,682],{},"15",[296,684,685],{},"SI",[296,687,688],{},"47",[296,690,691],{},"\u002F",[296,693,694],{},"79",[296,696,697],{},"O",[296,699,700],{},"111",[296,702,703],{},"o",[250,705,706,709,712,715,717,720,723,726],{},[296,707,708],{},"16",[296,710,711],{},"DLE",[296,713,714],{},"48",[296,716,298],{},[296,718,719],{},"80",[296,721,722],{},"P",[296,724,725],{},"112",[296,727,14],{},[250,729,730,733,736,739,741,744,747,750],{},[296,731,732],{},"17",[296,734,735],{},"DCI",[296,737,738],{},"49",[296,740,324],{},[296,742,743],{},"81",[296,745,746],{},"Q",[296,748,749],{},"113",[296,751,752],{},"q",[250,754,755,758,761,764,766,769,772,775],{},[296,756,757],{},"18",[296,759,760],{},"DC2",[296,762,763],{},"50",[296,765,184],{},[296,767,768],{},"82",[296,770,771],{},"R",[296,773,774],{},"114",[296,776,777],{},"r",[250,779,780,783,786,789,791,794,797,800],{},[296,781,782],{},"19",[296,784,785],{},"DC3",[296,787,788],{},"51",[296,790,178],{},[296,792,793],{},"83",[296,795,796],{},"S",[296,798,799],{},"115",[296,801,802],{},"s",[250,804,805,808,811,814,816,819,822,825],{},[296,806,807],{},"20",[296,809,810],{},"DC4",[296,812,813],{},"52",[296,815,400],{},[296,817,818],{},"84",[296,820,821],{},"T",[296,823,824],{},"116",[296,826,827],{},"t",[250,829,830,833,836,839,841,844,847,850],{},[296,831,832],{},"21",[296,834,835],{},"NAK",[296,837,838],{},"53",[296,840,426],{},[296,842,843],{},"85",[296,845,846],{},"U",[296,848,849],{},"117",[296,851,852],{},"u",[250,854,855,858,861,864,866,869,872,875],{},[296,856,857],{},"22",[296,859,860],{},"SYN",[296,862,863],{},"54",[296,865,451],{},[296,867,868],{},"86",[296,870,871],{},"V",[296,873,874],{},"118",[296,876,877],{},"v",[250,879,880,883,886,889,891,894,897,900],{},[296,881,882],{},"23",[296,884,885],{},"TB",[296,887,888],{},"55",[296,890,476],{},[296,892,893],{},"87",[296,895,896],{},"W",[296,898,899],{},"119",[296,901,902],{},"w",[250,904,905,908,911,914,916,919,922,925],{},[296,906,907],{},"24",[296,909,910],{},"CAN",[296,912,913],{},"56",[296,915,502],{},[296,917,918],{},"88",[296,920,921],{},"X",[296,923,924],{},"120",[296,926,927],{},"x",[250,929,930,933,936,939,941,944,947,950],{},[296,931,932],{},"25",[296,934,935],{},"EM",[296,937,938],{},"57",[296,940,527],{},[296,942,943],{},"89",[296,945,946],{},"Y",[296,948,949],{},"121",[296,951,952],{},"y",[250,954,955,958,961,964,967,970,973,976],{},[296,956,957],{},"26",[296,959,960],{},"SUB",[296,962,963],{},"58",[296,965,966],{},":",[296,968,969],{},"90",[296,971,972],{},"Z",[296,974,975],{},"122",[296,977,978],{},"z",[250,980,981,984,987,990,992,995,998,1001],{},[296,982,983],{},"27",[296,985,986],{},"ESC",[296,988,989],{},"59",[296,991,162],{},[296,993,994],{},"91",[296,996,997],{},"[",[296,999,1000],{},"123",[296,1002,1003],{},"{",[250,1005,1006,1009,1012,1015,1018,1021,1023,1026],{},[296,1007,1008],{},"28",[296,1010,1011],{},"FS",[296,1013,1014],{},"60",[296,1016,1017],{},"\u003C",[296,1019,1020],{},"92",[296,1022,691],{},[296,1024,1025],{},"124",[296,1027,1028],{},"|",[250,1030,1031,1034,1037,1040,1042,1045,1048,1051],{},[296,1032,1033],{},"29",[296,1035,1036],{},"GS",[296,1038,1039],{},"61",[296,1041,152],{},[296,1043,1044],{},"93",[296,1046,1047],{},"]",[296,1049,1050],{},"125",[296,1052,1053],{},"}",[250,1055,1056,1059,1062,1065,1068,1071,1074,1077],{},[296,1057,1058],{},"30",[296,1060,1061],{},"RS",[296,1063,1064],{},"62",[296,1066,1067],{},">",[296,1069,1070],{},"94",[296,1072,1073],{},"^",[296,1075,1076],{},"126",[296,1078,1079],{},"`",[250,1081,1082,1085,1088,1091,1094,1097,1100,1103],{},[296,1083,1084],{},"31",[296,1086,1087],{},"US",[296,1089,1090],{},"63",[296,1092,1093],{},"?",[296,1095,1096],{},"95",[296,1098,1099],{},"_",[296,1101,1102],{},"127",[296,1104,1105],{},"DEL",[14,1107,1108,1109,1112],{},"ASCII 码大致由以下",[256,1110,1111],{},"两部分组","成：",[1114,1115,1116,1123],"ul",{},[53,1117,1118,1119,1122],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[256,1120,1121],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[53,1124,1125,1126,1129],{},"ASCII 打印字符：数字 ",[256,1127,1128],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[67,1131,1133],{"id":1132},"_134转义字符","1.3.4转义字符",[87,1135,1137],{"className":89,"code":1136,"language":91,"meta":18,"style":18},"\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",[93,1138,1139,1144,1160,1175,1181,1195,1201],{"__ignoreMap":18},[96,1140,1141],{"class":98,"line":99},[96,1142,1143],{"class":165},"\u002F\u002F换行符\n",[96,1145,1146,1149,1152,1155,1157],{"class":98,"line":19},[96,1147,1148],{"class":106},"cout ",[96,1150,1151],{"class":102},"\u003C\u003C",[96,1153,1154],{"class":211},"\"hello world\u002Fn\"",[96,1156,162],{"class":106},[96,1158,1159],{"class":165}," \u002F\u002F就等同于如下：\n",[96,1161,1163,1165,1167,1170,1172],{"class":98,"line":1162},3,[96,1164,1148],{"class":106},[96,1166,1151],{"class":102},[96,1168,1169],{"class":211},"\"hello world\"",[96,1171,1151],{"class":102},[96,1173,1174],{"class":106},"endl;\n",[96,1176,1178],{"class":98,"line":1177},4,[96,1179,1180],{"class":165},"\u002F\u002F反斜杠\n",[96,1182,1184,1186,1188,1191,1193],{"class":98,"line":1183},5,[96,1185,1148],{"class":106},[96,1187,1151],{"class":102},[96,1189,1190],{"class":211},"\"\u002F\u002F\"",[96,1192,1151],{"class":102},[96,1194,1174],{"class":106},[96,1196,1198],{"class":98,"line":1197},6,[96,1199,1200],{"class":165},"\u002F\u002F水平制表符\n",[96,1202,1204,1206,1208,1211,1214,1217,1219,1222],{"class":98,"line":1203},7,[96,1205,1148],{"class":106},[96,1207,1151],{"class":102},[96,1209,1210],{"class":211},"\"aaaa",[96,1212,1213],{"class":155},"\\t",[96,1215,1216],{"class":211},"helloworld\"",[96,1218,1151],{"class":102},[96,1220,1221],{"class":106},"endl;",[96,1223,1224],{"class":165}," \u002F\u002F输出窗口时有对齐效果\n",[67,1226,1228],{"id":1227},"_135字符串型","1.3.5字符串型",[14,1230,1231,1232,1234],{},"char 变量名",[96,1233],{},"=\"字符串值\"",[87,1236,1238],{"className":89,"code":1237,"language":91,"meta":18,"style":18},"\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",[93,1239,1240,1245,1250,1255,1260,1274,1287,1292,1298,1310],{"__ignoreMap":18},[96,1241,1242],{"class":98,"line":99},[96,1243,1244],{"class":165},"\u002F\u002Fc风格字符串\n",[96,1246,1247],{"class":98,"line":19},[96,1248,1249],{"class":165},"\u002F\u002F注意事项：\n",[96,1251,1252],{"class":98,"line":1162},[96,1253,1254],{"class":165},"\u002F\u002F1.char字符串名[]\n",[96,1256,1257],{"class":98,"line":1177},[96,1258,1259],{"class":165},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[96,1261,1262,1264,1267,1269,1271],{"class":98,"line":1183},[96,1263,203],{"class":102},[96,1265,1266],{"class":106}," str[]",[96,1268,152],{"class":102},[96,1270,1169],{"class":211},[96,1272,1273],{"class":106},";\n",[96,1275,1276,1278,1280,1283,1285],{"class":98,"line":1197},[96,1277,1148],{"class":106},[96,1279,1151],{"class":102},[96,1281,1282],{"class":106},"str",[96,1284,1151],{"class":102},[96,1286,1174],{"class":106},[96,1288,1289],{"class":98,"line":1203},[96,1290,1291],{"class":165},"\u002F\u002Fc++风格字符串\n",[96,1293,1295],{"class":98,"line":1294},8,[96,1296,1297],{"class":165},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[96,1299,1301,1304,1306,1308],{"class":98,"line":1300},9,[96,1302,1303],{"class":106},"string str2",[96,1305,152],{"class":102},[96,1307,1169],{"class":211},[96,1309,1273],{"class":106},[96,1311,1313,1315,1317,1320,1322],{"class":98,"line":1312},10,[96,1314,1148],{"class":106},[96,1316,1151],{"class":102},[96,1318,1319],{"class":106},"str2",[96,1321,1151],{"class":102},[96,1323,1174],{"class":106},[67,1325,1327],{"id":1326},"_136布尔类型bool","1.3.6布尔类型bool",[87,1329,1331],{"className":89,"code":1330,"language":91,"meta":18,"style":18},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[93,1332,1333,1348],{"__ignoreMap":18},[96,1334,1335,1338,1341,1343,1346],{"class":98,"line":99},[96,1336,1337],{"class":102},"bool",[96,1339,1340],{"class":106}," flag",[96,1342,152],{"class":102},[96,1344,1345],{"class":155},"true",[96,1347,1273],{"class":106},[96,1349,1350,1353,1356,1359,1361,1363],{"class":98,"line":19},[96,1351,1352],{"class":106},"cout",[96,1354,1355],{"class":102},"\u003C\u003Csizeof",[96,1357,1358],{"class":106},"(flag)",[96,1360,1151],{"class":102},[96,1362,1221],{"class":106},[96,1364,1365],{"class":165}," \u002F\u002F查看布尔占内存空间\n",[38,1367,1369],{"id":1368},"_14键盘输入cin","1.4键盘输入cin",[87,1371,1373],{"className":89,"code":1372,"language":91,"meta":18,"style":18},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[93,1374,1375,1388,1405,1416],{"__ignoreMap":18},[96,1376,1377,1379,1382,1384,1386],{"class":98,"line":99},[96,1378,110],{"class":102},[96,1380,1381],{"class":106}," a",[96,1383,152],{"class":102},[96,1385,298],{"class":155},[96,1387,1273],{"class":106},[96,1389,1390,1392,1394,1397,1399,1401,1403],{"class":98,"line":19},[96,1391,1352],{"class":106},[96,1393,1151],{"class":102},[96,1395,1396],{"class":211},"\"请给整型变量a赋值\"",[96,1398,1151],{"class":102},[96,1400,345],{"class":106},[96,1402,1151],{"class":102},[96,1404,1174],{"class":106},[96,1406,1407,1410,1413],{"class":98,"line":1162},[96,1408,1409],{"class":106},"cin ",[96,1411,1412],{"class":102},">>",[96,1414,1415],{"class":106}," a;\n",[96,1417,1418,1420,1422,1425,1428,1430,1432],{"class":98,"line":1177},[96,1419,1148],{"class":106},[96,1421,1151],{"class":102},[96,1423,1424],{"class":211}," \"整型变量a=\"",[96,1426,1427],{"class":102}," \u003C\u003C",[96,1429,345],{"class":106},[96,1431,1151],{"class":102},[96,1433,1174],{"class":106},[38,1435,1437],{"id":1436},"_15运算符","1.5运算符",[67,1439,1441],{"id":1440},"_151算术运算符","1.5.1算术运算符",[14,1443,1444,1448],{},[1445,1446],"img",{"alt":18,"src":1447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[50,1450,1451,1454,1457],{},[53,1452,1453],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[53,1455,1456],{},"两个小数不可以做取模运算",[53,1458,1459],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[67,1461,1463],{"id":1462},"_152赋值运算符","1.5.2赋值运算符",[14,1465,1466],{},[1445,1467],{"alt":18,"src":1468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[67,1470,1472],{"id":1471},"_153比较运算符","1.5.3比较运算符",[14,1474,1475],{},[1445,1476],{"alt":18,"src":1477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[67,1479,1481],{"id":1480},"_154逻辑运算符","1.5.4逻辑运算符",[14,1483,1484],{},[1445,1485],{"alt":18,"src":1486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[38,1488,1490],{"id":1489},"_16程序流程结构","1.6程序流程结构",[67,1492,1494],{"id":1493},"_161选择结构","1.6.1选择结构",[50,1496,1497],{},[53,1498,1499],{},"if语句\n单行、多行、多条件if语句",[87,1501,1503],{"className":89,"code":1502,"language":91,"meta":18,"style":18},"\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",[93,1504,1505,1510,1525,1530,1544,1549,1554,1563,1576,1580,1593,1598,1604,1609,1623,1628,1634,1655,1660,1674,1679,1708,1713,1730,1735,1740,1745,1759,1764],{"__ignoreMap":18},[96,1506,1507],{"class":98,"line":99},[96,1508,1509],{"class":165},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[96,1511,1512,1515,1518,1520,1523],{"class":98,"line":19},[96,1513,1514],{"class":102},"if",[96,1516,1517],{"class":106},"(score",[96,1519,1067],{"class":102},[96,1521,1522],{"class":155},"600",[96,1524,113],{"class":106},[96,1526,1527],{"class":98,"line":1162},[96,1528,1529],{"class":106},"{\n",[96,1531,1532,1535,1537,1540,1542],{"class":98,"line":1177},[96,1533,1534],{"class":106},"    cout",[96,1536,1151],{"class":102},[96,1538,1539],{"class":211},"'这是单行if语句'",[96,1541,1151],{"class":102},[96,1543,1174],{"class":106},[96,1545,1546],{"class":98,"line":1183},[96,1547,1548],{"class":106},"}\n",[96,1550,1551],{"class":98,"line":1197},[96,1552,1553],{"class":165},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[96,1555,1556,1558,1560],{"class":98,"line":1203},[96,1557,1409],{"class":106},[96,1559,1412],{"class":102},[96,1561,1562],{"class":106}," score\n",[96,1564,1565,1567,1569,1572,1574],{"class":98,"line":1294},[96,1566,1514],{"class":102},[96,1568,1517],{"class":106},[96,1570,1571],{"class":102},"\u003C=",[96,1573,1522],{"class":155},[96,1575,113],{"class":106},[96,1577,1578],{"class":98,"line":1300},[96,1579,1529],{"class":106},[96,1581,1582,1584,1586,1589,1591],{"class":98,"line":1312},[96,1583,1534],{"class":106},[96,1585,1412],{"class":102},[96,1587,1588],{"class":211},"\"小于等于600\"",[96,1590,1151],{"class":102},[96,1592,1174],{"class":106},[96,1594,1596],{"class":98,"line":1595},11,[96,1597,1548],{"class":106},[96,1599,1601],{"class":98,"line":1600},12,[96,1602,1603],{"class":102},"else\n",[96,1605,1607],{"class":98,"line":1606},13,[96,1608,1529],{"class":106},[96,1610,1612,1614,1616,1619,1621],{"class":98,"line":1611},14,[96,1613,1534],{"class":106},[96,1615,1412],{"class":102},[96,1617,1618],{"class":211},"\"大于600\"",[96,1620,1412],{"class":102},[96,1622,1174],{"class":106},[96,1624,1626],{"class":98,"line":1625},15,[96,1627,1548],{"class":106},[96,1629,1631],{"class":98,"line":1630},16,[96,1632,1633],{"class":165},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[96,1635,1637,1639,1642,1644,1646,1649,1651,1653],{"class":98,"line":1636},17,[96,1638,1514],{"class":102},[96,1640,1641],{"class":106}," (",[96,1643,298],{"class":155},[96,1645,1017],{"class":102},[96,1647,1648],{"class":106},"num",[96,1650,1017],{"class":102},[96,1652,418],{"class":155},[96,1654,113],{"class":106},[96,1656,1658],{"class":98,"line":1657},18,[96,1659,1529],{"class":106},[96,1661,1663,1665,1667,1670,1672],{"class":98,"line":1662},19,[96,1664,1534],{"class":106},[96,1666,1151],{"class":102},[96,1668,1669],{"class":211},"\"小于100\"",[96,1671,1151],{"class":102},[96,1673,1174],{"class":106},[96,1675,1677],{"class":98,"line":1676},20,[96,1678,1548],{"class":106},[96,1680,1682,1685,1688,1691,1694,1696,1699,1701,1703,1706],{"class":98,"line":1681},21,[96,1683,1684],{"class":102},"else",[96,1686,1687],{"class":102}," if",[96,1689,1690],{"class":106}," (nmu",[96,1692,1693],{"class":102},">=",[96,1695,418],{"class":155},[96,1697,1698],{"class":102},"&&",[96,1700,1648],{"class":106},[96,1702,1017],{"class":102},[96,1704,1705],{"class":155},"200",[96,1707,113],{"class":106},[96,1709,1711],{"class":98,"line":1710},22,[96,1712,1529],{"class":106},[96,1714,1716,1718,1720,1723,1725,1727],{"class":98,"line":1715},23,[96,1717,1534],{"class":106},[96,1719,1151],{"class":102},[96,1721,1722],{"class":211},"\"不小于100且小于200\"",[96,1724,1151],{"class":102},[96,1726,1221],{"class":106},[96,1728,1729],{"class":165}," \u002F\u002F可以无限else if,python中是elif：\n",[96,1731,1733],{"class":98,"line":1732},24,[96,1734,1548],{"class":106},[96,1736,1738],{"class":98,"line":1737},25,[96,1739,1603],{"class":102},[96,1741,1743],{"class":98,"line":1742},26,[96,1744,1529],{"class":106},[96,1746,1748,1750,1752,1755,1757],{"class":98,"line":1747},27,[96,1749,1534],{"class":106},[96,1751,1151],{"class":102},[96,1753,1754],{"class":211},"\"不小于200\"",[96,1756,1151],{"class":102},[96,1758,1174],{"class":106},[96,1760,1762],{"class":98,"line":1761},28,[96,1763,1548],{"class":106},[96,1765,1767],{"class":98,"line":1766},29,[96,1768,1769],{"class":165},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[50,1771,1772],{"start":19},[53,1773,1774],{},"三目运算符",[87,1776,1778],{"className":89,"code":1777,"language":91,"meta":18,"style":18},"\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",[93,1779,1780,1785,1790,1816,1838,1855,1860,1883,1898],{"__ignoreMap":18},[96,1781,1782],{"class":98,"line":99},[96,1783,1784],{"class":165},"\u002F\u002F创建三个变量a,b,c\n",[96,1786,1787],{"class":98,"line":19},[96,1788,1789],{"class":165},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[96,1791,1792,1794,1796,1798,1800,1803,1805,1807,1810,1812,1814],{"class":98,"line":1162},[96,1793,110],{"class":102},[96,1795,1381],{"class":106},[96,1797,152],{"class":102},[96,1799,807],{"class":155},[96,1801,1802],{"class":106},",b",[96,1804,152],{"class":102},[96,1806,553],{"class":155},[96,1808,1809],{"class":106},",c",[96,1811,152],{"class":102},[96,1813,298],{"class":155},[96,1815,1273],{"class":106},[96,1817,1818,1820,1822,1825,1827,1829,1831,1833,1835],{"class":98,"line":1177},[96,1819,395],{"class":106},[96,1821,152],{"class":102},[96,1823,1824],{"class":106},"(a",[96,1826,1067],{"class":102},[96,1828,370],{"class":106},[96,1830,1093],{"class":102},[96,1832,345],{"class":106},[96,1834,966],{"class":102},[96,1836,1837],{"class":106},"b)\n",[96,1839,1840,1842,1844,1847,1849,1851,1853],{"class":98,"line":1183},[96,1841,1352],{"class":106},[96,1843,1151],{"class":102},[96,1845,1846],{"class":211},"\"c=\"",[96,1848,1151],{"class":102},[96,1850,395],{"class":106},[96,1852,1151],{"class":102},[96,1854,1174],{"class":106},[96,1856,1857],{"class":98,"line":1197},[96,1858,1859],{"class":165},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[96,1861,1862,1864,1866,1868,1870,1872,1874,1877,1879,1881],{"class":98,"line":1203},[96,1863,1824],{"class":106},[96,1865,1067],{"class":102},[96,1867,370],{"class":106},[96,1869,1093],{"class":102},[96,1871,345],{"class":106},[96,1873,966],{"class":102},[96,1875,1876],{"class":106},"b)",[96,1878,152],{"class":102},[96,1880,418],{"class":155},[96,1882,1273],{"class":106},[96,1884,1885,1887,1889,1891,1893,1895],{"class":98,"line":1294},[96,1886,1352],{"class":106},[96,1888,1151],{"class":102},[96,1890,345],{"class":106},[96,1892,1151],{"class":102},[96,1894,1221],{"class":106},[96,1896,1897],{"class":165}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[96,1899,1900,1902,1904,1906,1908,1910],{"class":98,"line":1300},[96,1901,1352],{"class":106},[96,1903,1151],{"class":102},[96,1905,370],{"class":106},[96,1907,1151],{"class":102},[96,1909,1221],{"class":106},[96,1911,1912],{"class":165}," \u002F\u002F10   a>b,b还是原值\n",[50,1914,1915],{"start":1162},[53,1916,1917],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[87,1919,1921],{"className":89,"code":1920,"language":91,"meta":18,"style":18},"\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",[93,1922,1923,1928,1936,1950,1960,1964,1978,1991,2001,2009,2014,2039,2060,2082,2103,2125,2146,2166,2171],{"__ignoreMap":18},[96,1924,1925],{"class":98,"line":99},[96,1926,1927],{"class":165},"\u002F\u002F案例-电影打分\n",[96,1929,1930,1933],{"class":98,"line":19},[96,1931,1932],{"class":102},"#include",[96,1934,1935],{"class":211},"\u003Ciostream>\n",[96,1937,1938,1941,1944,1948],{"class":98,"line":1162},[96,1939,1940],{"class":102},"using",[96,1942,1943],{"class":102}," namespace",[96,1945,1947],{"class":1946},"sScJk"," std",[96,1949,1273],{"class":106},[96,1951,1952,1954,1957],{"class":98,"line":1177},[96,1953,110],{"class":102},[96,1955,1956],{"class":1946}," main",[96,1958,1959],{"class":106},"()\n",[96,1961,1962],{"class":98,"line":1183},[96,1963,1529],{"class":106},[96,1965,1966,1969,1972,1974,1976],{"class":98,"line":1197},[96,1967,1968],{"class":102},"    int",[96,1970,1971],{"class":106}," score",[96,1973,152],{"class":102},[96,1975,298],{"class":155},[96,1977,1273],{"class":106},[96,1979,1980,1982,1984,1987,1989],{"class":98,"line":1203},[96,1981,1534],{"class":106},[96,1983,1151],{"class":102},[96,1985,1986],{"class":211},"\"电影打分：\"",[96,1988,1151],{"class":102},[96,1990,1174],{"class":106},[96,1992,1993,1996,1998],{"class":98,"line":1294},[96,1994,1995],{"class":106},"    cin",[96,1997,1412],{"class":102},[96,1999,2000],{"class":106},"score;\n",[96,2002,2003,2006],{"class":98,"line":1300},[96,2004,2005],{"class":102},"    switch",[96,2007,2008],{"class":106},"(score)\n",[96,2010,2011],{"class":98,"line":1312},[96,2012,2013],{"class":106},"    {\n",[96,2015,2016,2019,2022,2025,2027,2030,2032,2034,2037],{"class":98,"line":1595},[96,2017,2018],{"class":102},"        case",[96,2020,2021],{"class":155}," 10",[96,2023,2024],{"class":106},":cout",[96,2026,1151],{"class":102},[96,2028,2029],{"class":211},"\"经典\"",[96,2031,1151],{"class":102},[96,2033,1221],{"class":106},[96,2035,2036],{"class":102},"break",[96,2038,1273],{"class":106},[96,2040,2041,2043,2046,2048,2050,2052,2054,2056,2058],{"class":98,"line":1600},[96,2042,2018],{"class":102},[96,2044,2045],{"class":155}," 9",[96,2047,2024],{"class":106},[96,2049,1151],{"class":102},[96,2051,2029],{"class":211},[96,2053,1151],{"class":102},[96,2055,1221],{"class":106},[96,2057,2036],{"class":102},[96,2059,1273],{"class":106},[96,2061,2062,2064,2067,2069,2071,2074,2076,2078,2080],{"class":98,"line":1606},[96,2063,2018],{"class":102},[96,2065,2066],{"class":155}," 8",[96,2068,2024],{"class":106},[96,2070,1151],{"class":102},[96,2072,2073],{"class":211},"\"非常好\"",[96,2075,1151],{"class":102},[96,2077,1221],{"class":106},[96,2079,2036],{"class":102},[96,2081,1273],{"class":106},[96,2083,2084,2086,2089,2091,2093,2095,2097,2099,2101],{"class":98,"line":1611},[96,2085,2018],{"class":102},[96,2087,2088],{"class":155}," 7",[96,2090,2024],{"class":106},[96,2092,1151],{"class":102},[96,2094,2073],{"class":211},[96,2096,1151],{"class":102},[96,2098,1221],{"class":106},[96,2100,2036],{"class":102},[96,2102,1273],{"class":106},[96,2104,2105,2107,2110,2112,2114,2117,2119,2121,2123],{"class":98,"line":1625},[96,2106,2018],{"class":102},[96,2108,2109],{"class":155}," 6",[96,2111,2024],{"class":106},[96,2113,1151],{"class":102},[96,2115,2116],{"class":211},"\"一般\"",[96,2118,1151],{"class":102},[96,2120,1221],{"class":106},[96,2122,2036],{"class":102},[96,2124,1273],{"class":106},[96,2126,2127,2129,2132,2134,2136,2138,2140,2142,2144],{"class":98,"line":1630},[96,2128,2018],{"class":102},[96,2130,2131],{"class":155}," 5",[96,2133,2024],{"class":106},[96,2135,1151],{"class":102},[96,2137,2116],{"class":211},[96,2139,1151],{"class":102},[96,2141,1221],{"class":106},[96,2143,2036],{"class":102},[96,2145,1273],{"class":106},[96,2147,2148,2151,2153,2155,2158,2160,2162,2164],{"class":98,"line":1636},[96,2149,2150],{"class":102},"        default",[96,2152,2024],{"class":106},[96,2154,1151],{"class":102},[96,2156,2157],{"class":211},"\"烂片\"",[96,2159,1151],{"class":102},[96,2161,1221],{"class":106},[96,2163,2036],{"class":102},[96,2165,1273],{"class":106},[96,2167,2168],{"class":98,"line":1657},[96,2169,2170],{"class":106},"    }\n",[96,2172,2173],{"class":98,"line":1662},[96,2174,1548],{"class":106},[14,2176,2177],{},"if和switch区别：",[1114,2179,2180,2183],{},[53,2181,2182],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[53,2184,2185],{},"switch优点：结构清晰，执行效率高",[67,2187,2189],{"id":2188},"_162循环结构","1.6.2循环结构",[50,2191,2192],{},[53,2193,2194],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[87,2196,2198],{"className":89,"code":2197,"language":91,"meta":18,"style":18},"\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",[93,2199,2200,2205,2213,2217,2230,2244,2248,2268,2278,2282,2294],{"__ignoreMap":18},[96,2201,2202],{"class":98,"line":99},[96,2203,2204],{"class":165},"\u002F\u002F打印0-9数字\n",[96,2206,2207,2209,2211],{"class":98,"line":19},[96,2208,110],{"class":102},[96,2210,1956],{"class":1946},[96,2212,1959],{"class":106},[96,2214,2215],{"class":98,"line":1162},[96,2216,1529],{"class":106},[96,2218,2219,2221,2224,2226,2228],{"class":98,"line":1177},[96,2220,1968],{"class":102},[96,2222,2223],{"class":106}," num",[96,2225,152],{"class":102},[96,2227,298],{"class":155},[96,2229,1273],{"class":106},[96,2231,2232,2235,2238,2240,2242],{"class":98,"line":1183},[96,2233,2234],{"class":102},"    while",[96,2236,2237],{"class":106},"(num",[96,2239,1017],{"class":102},[96,2241,553],{"class":155},[96,2243,113],{"class":106},[96,2245,2246],{"class":98,"line":1197},[96,2247,2013],{"class":106},[96,2249,2250,2253,2256,2258,2260,2262,2265],{"class":98,"line":1203},[96,2251,2252],{"class":1946},"       std",[96,2254,2255],{"class":106},"::cout",[96,2257,1151],{"class":102},[96,2259,1648],{"class":106},[96,2261,1151],{"class":102},[96,2263,2264],{"class":1946},"std",[96,2266,2267],{"class":106},"::endl;\n",[96,2269,2270,2273,2276],{"class":98,"line":1294},[96,2271,2272],{"class":106},"        num",[96,2274,2275],{"class":102},"++",[96,2277,1273],{"class":106},[96,2279,2280],{"class":98,"line":1300},[96,2281,2170],{"class":106},[96,2283,2284,2287,2289,2292],{"class":98,"line":1312},[96,2285,2286],{"class":1946},"    system",[96,2288,107],{"class":106},[96,2290,2291],{"class":211},"\"pause\"",[96,2293,113],{"class":106},[96,2295,2296],{"class":98,"line":1595},[96,2297,1548],{"class":106},[14,2299,2300],{},"注意：写好循环条件，避免死循环情况",[87,2302,2304],{"className":89,"code":2303,"language":91,"meta":18,"style":18},"\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",[93,2305,2306,2311,2318,2325,2335,2343,2347,2352,2379,2384,2389,2397,2424,2429,2434,2447,2457,2461,2471,2476,2489,2494,2508,2513,2528,2532,2545,2549,2554,2558,2572,2580,2585,2591,2597,2602],{"__ignoreMap":18},[96,2307,2308],{"class":98,"line":99},[96,2309,2310],{"class":165},"\u002F\u002F循环结构-猜数字\n",[96,2312,2313,2315],{"class":98,"line":19},[96,2314,1932],{"class":102},[96,2316,2317],{"class":211}," \u003Ciostream>\n",[96,2319,2320,2322],{"class":98,"line":1162},[96,2321,1932],{"class":102},[96,2323,2324],{"class":211}," \u003Cctime>\n",[96,2326,2327,2329,2331,2333],{"class":98,"line":1177},[96,2328,1940],{"class":102},[96,2330,1943],{"class":102},[96,2332,1947],{"class":1946},[96,2334,1273],{"class":106},[96,2336,2337,2339,2341],{"class":98,"line":1183},[96,2338,110],{"class":102},[96,2340,1956],{"class":1946},[96,2342,1959],{"class":106},[96,2344,2345],{"class":98,"line":1197},[96,2346,1529],{"class":106},[96,2348,2349],{"class":98,"line":1203},[96,2350,2351],{"class":165},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[96,2353,2354,2357,2360,2363,2366,2368,2371,2373,2376],{"class":98,"line":1294},[96,2355,2356],{"class":1946},"    srand",[96,2358,2359],{"class":106},"((",[96,2361,2362],{"class":102},"unsigned",[96,2364,2365],{"class":102}," int",[96,2367,536],{"class":106},[96,2369,2370],{"class":1946},"time",[96,2372,107],{"class":106},[96,2374,2375],{"class":155},"NULL",[96,2377,2378],{"class":106},"));\n",[96,2380,2381],{"class":98,"line":1300},[96,2382,2383],{"emptyLinePlaceholder":23},"\n",[96,2385,2386],{"class":98,"line":1312},[96,2387,2388],{"class":165},"    \u002F\u002F1.系统生成随机数\n",[96,2390,2391,2394],{"class":98,"line":1595},[96,2392,2393],{"class":165},"    \u002F\u002Frand()%100",[96,2395,2396],{"class":165}," \u002F\u002F生成0-99的随机数\n",[96,2398,2399,2401,2403,2405,2408,2411,2413,2415,2417,2419,2421],{"class":98,"line":1600},[96,2400,1968],{"class":102},[96,2402,2223],{"class":106},[96,2404,152],{"class":102},[96,2406,2407],{"class":1946},"rand",[96,2409,2410],{"class":106},"()",[96,2412,435],{"class":102},[96,2414,418],{"class":155},[96,2416,588],{"class":102},[96,2418,324],{"class":155},[96,2420,162],{"class":106},[96,2422,2423],{"class":165}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[96,2425,2426],{"class":98,"line":1606},[96,2427,2428],{"class":165},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[96,2430,2431],{"class":98,"line":1611},[96,2432,2433],{"class":165},"    \u002F\u002F2.玩家猜测\n",[96,2435,2436,2438,2441,2443,2445],{"class":98,"line":1625},[96,2437,1968],{"class":102},[96,2439,2440],{"class":106}," val",[96,2442,152],{"class":102},[96,2444,298],{"class":155},[96,2446,1273],{"class":106},[96,2448,2449,2451,2453,2455],{"class":98,"line":1630},[96,2450,2234],{"class":102},[96,2452,1641],{"class":106},[96,2454,324],{"class":155},[96,2456,113],{"class":106},[96,2458,2459],{"class":98,"line":1636},[96,2460,2013],{"class":106},[96,2462,2463,2466,2468],{"class":98,"line":1657},[96,2464,2465],{"class":106},"        cin",[96,2467,1412],{"class":102},[96,2469,2470],{"class":106},"val;\n",[96,2472,2473],{"class":98,"line":1662},[96,2474,2475],{"class":165},"        \u002F\u002F3.判断玩家猜测\n",[96,2477,2478,2481,2484,2486],{"class":98,"line":1676},[96,2479,2480],{"class":102},"        if",[96,2482,2483],{"class":106},"(val",[96,2485,1017],{"class":102},[96,2487,2488],{"class":106},"num) \n",[96,2490,2491],{"class":98,"line":1681},[96,2492,2493],{"class":106},"        {\n",[96,2495,2496,2499,2501,2504,2506],{"class":98,"line":1710},[96,2497,2498],{"class":106},"            cout",[96,2500,1151],{"class":102},[96,2502,2503],{"class":211},"\"猜小了！\"",[96,2505,1151],{"class":102},[96,2507,1174],{"class":106},[96,2509,2510],{"class":98,"line":1715},[96,2511,2512],{"class":106},"        }\n",[96,2514,2515,2518,2520,2523,2525],{"class":98,"line":1732},[96,2516,2517],{"class":102},"        else",[96,2519,1687],{"class":102},[96,2521,2522],{"class":106}," (val",[96,2524,1067],{"class":102},[96,2526,2527],{"class":106},"num)\n",[96,2529,2530],{"class":98,"line":1737},[96,2531,2493],{"class":106},[96,2533,2534,2536,2538,2541,2543],{"class":98,"line":1742},[96,2535,2498],{"class":106},[96,2537,1151],{"class":102},[96,2539,2540],{"class":211},"\"猜大了！\"",[96,2542,1151],{"class":102},[96,2544,1174],{"class":106},[96,2546,2547],{"class":98,"line":1747},[96,2548,2512],{"class":106},[96,2550,2551],{"class":98,"line":1761},[96,2552,2553],{"class":102},"        else\n",[96,2555,2556],{"class":98,"line":1766},[96,2557,2493],{"class":106},[96,2559,2561,2563,2565,2568,2570],{"class":98,"line":2560},30,[96,2562,2498],{"class":106},[96,2564,1151],{"class":102},[96,2566,2567],{"class":211},"\"猜对了！\"",[96,2569,1151],{"class":102},[96,2571,1174],{"class":106},[96,2573,2575,2578],{"class":98,"line":2574},31,[96,2576,2577],{"class":102},"            break",[96,2579,1273],{"class":106},[96,2581,2583],{"class":98,"line":2582},32,[96,2584,2512],{"class":106},[96,2586,2588],{"class":98,"line":2587},33,[96,2589,2590],{"class":165},"        \u002F\u002F猜对 退出游戏\n",[96,2592,2594],{"class":98,"line":2593},34,[96,2595,2596],{"class":165},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[96,2598,2600],{"class":98,"line":2599},35,[96,2601,2170],{"class":106},[96,2603,2605],{"class":98,"line":2604},36,[96,2606,1548],{"class":106},[50,2608,2609],{"start":19},[53,2610,2611,2612,2615],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[256,2613,2614],{},"do...while会先执行一次循环语句","，在判断循环语句",[87,2617,2619],{"className":89,"code":2618,"language":91,"meta":18,"style":18},"\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",[93,2620,2621,2626,2634,2638,2650,2658,2662,2679,2686,2690,2703,2713],{"__ignoreMap":18},[96,2622,2623],{"class":98,"line":99},[96,2624,2625],{"class":165},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[96,2627,2628,2630,2632],{"class":98,"line":19},[96,2629,110],{"class":102},[96,2631,1956],{"class":1946},[96,2633,1959],{"class":106},[96,2635,2636],{"class":98,"line":1162},[96,2637,1529],{"class":106},[96,2639,2640,2642,2644,2646,2648],{"class":98,"line":1177},[96,2641,1968],{"class":102},[96,2643,2223],{"class":106},[96,2645,152],{"class":102},[96,2647,298],{"class":155},[96,2649,1273],{"class":106},[96,2651,2652,2655],{"class":98,"line":1183},[96,2653,2654],{"class":102},"    do",[96,2656,2657],{"class":106}," \n",[96,2659,2660],{"class":98,"line":1197},[96,2661,2013],{"class":106},[96,2663,2664,2667,2669,2671,2673,2675,2677],{"class":98,"line":1203},[96,2665,2666],{"class":1946},"        std",[96,2668,2255],{"class":106},[96,2670,1151],{"class":102},[96,2672,1648],{"class":106},[96,2674,1151],{"class":102},[96,2676,2264],{"class":1946},[96,2678,2267],{"class":106},[96,2680,2681,2683],{"class":98,"line":1294},[96,2682,2272],{"class":106},[96,2684,2685],{"class":102},"++\n",[96,2687,2688],{"class":98,"line":1300},[96,2689,2170],{"class":106},[96,2691,2692,2694,2696,2698,2700],{"class":98,"line":1312},[96,2693,2234],{"class":102},[96,2695,2237],{"class":106},[96,2697,1017],{"class":102},[96,2699,553],{"class":155},[96,2701,2702],{"class":106},");\n",[96,2704,2705,2707,2709,2711],{"class":98,"line":1595},[96,2706,2286],{"class":1946},[96,2708,107],{"class":106},[96,2710,2291],{"class":211},[96,2712,2702],{"class":106},[96,2714,2715],{"class":98,"line":1600},[96,2716,1548],{"class":106},[14,2718,2719],{},"案例-水仙花数",[14,2721,2722],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[14,2724,2725],{},"例如：1^3+5^3+3^3=153",[14,2727,2728],{},"请用do...while语句，求出所有3位数的水仙花数",[87,2730,2732],{"className":89,"code":2731,"language":91,"meta":18,"style":18},"#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",[93,2733,2734,2740,2750,2758,2762,2767,2779,2785,2789,2794,2810,2826,2842,2857,2876,2891,2939,2943,2955,2959,2967,2971,2985],{"__ignoreMap":18},[96,2735,2736,2738],{"class":98,"line":99},[96,2737,1932],{"class":102},[96,2739,2317],{"class":211},[96,2741,2742,2744,2746,2748],{"class":98,"line":19},[96,2743,1940],{"class":102},[96,2745,1943],{"class":102},[96,2747,1947],{"class":1946},[96,2749,1273],{"class":106},[96,2751,2752,2754,2756],{"class":98,"line":1162},[96,2753,110],{"class":102},[96,2755,1956],{"class":1946},[96,2757,1959],{"class":106},[96,2759,2760],{"class":98,"line":1177},[96,2761,1529],{"class":106},[96,2763,2764],{"class":98,"line":1183},[96,2765,2766],{"class":165},"    \u002F\u002F1.先打印所有三位数字\n",[96,2768,2769,2771,2773,2775,2777],{"class":98,"line":1197},[96,2770,1968],{"class":102},[96,2772,2223],{"class":106},[96,2774,152],{"class":102},[96,2776,418],{"class":155},[96,2778,1273],{"class":106},[96,2780,2781,2783],{"class":98,"line":1203},[96,2782,2654],{"class":102},[96,2784,2657],{"class":106},[96,2786,2787],{"class":98,"line":1294},[96,2788,2013],{"class":106},[96,2790,2791],{"class":98,"line":1300},[96,2792,2793],{"class":165},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[96,2795,2796,2799,2801,2803,2805,2807],{"class":98,"line":1312},[96,2797,2798],{"class":102},"        int",[96,2800,1381],{"class":106},[96,2802,152],{"class":102},[96,2804,298],{"class":155},[96,2806,162],{"class":106},[96,2808,2809],{"class":165}," \u002F\u002F个位\n",[96,2811,2812,2814,2817,2819,2821,2823],{"class":98,"line":1595},[96,2813,2798],{"class":102},[96,2815,2816],{"class":106}," b",[96,2818,152],{"class":102},[96,2820,298],{"class":155},[96,2822,162],{"class":106},[96,2824,2825],{"class":165}," \u002F\u002F十位\n",[96,2827,2828,2830,2833,2835,2837,2839],{"class":98,"line":1600},[96,2829,2798],{"class":102},[96,2831,2832],{"class":106}," c",[96,2834,152],{"class":102},[96,2836,298],{"class":155},[96,2838,162],{"class":106},[96,2840,2841],{"class":165}," \u002F\u002F百位\n",[96,2843,2844,2847,2849,2851,2853,2855],{"class":98,"line":1606},[96,2845,2846],{"class":106},"        a",[96,2848,152],{"class":102},[96,2850,1648],{"class":106},[96,2852,435],{"class":102},[96,2854,553],{"class":155},[96,2856,1273],{"class":106},[96,2858,2859,2862,2864,2866,2868,2870,2872,2874],{"class":98,"line":1611},[96,2860,2861],{"class":106},"        b",[96,2863,152],{"class":102},[96,2865,1648],{"class":106},[96,2867,691],{"class":102},[96,2869,553],{"class":155},[96,2871,435],{"class":102},[96,2873,553],{"class":155},[96,2875,1273],{"class":106},[96,2877,2878,2881,2883,2885,2887,2889],{"class":98,"line":1625},[96,2879,2880],{"class":106},"        c",[96,2882,152],{"class":102},[96,2884,1648],{"class":106},[96,2886,691],{"class":102},[96,2888,418],{"class":155},[96,2890,1273],{"class":106},[96,2892,2893,2895,2897,2899,2901,2903,2905,2907,2909,2911,2913,2915,2917,2919,2921,2923,2925,2927,2930,2933,2936],{"class":98,"line":1630},[96,2894,2480],{"class":102},[96,2896,1824],{"class":106},[96,2898,562],{"class":102},[96,2900,345],{"class":106},[96,2902,562],{"class":102},[96,2904,345],{"class":106},[96,2906,588],{"class":102},[96,2908,370],{"class":106},[96,2910,562],{"class":102},[96,2912,370],{"class":106},[96,2914,562],{"class":102},[96,2916,370],{"class":106},[96,2918,588],{"class":102},[96,2920,395],{"class":106},[96,2922,562],{"class":102},[96,2924,395],{"class":106},[96,2926,562],{"class":102},[96,2928,2929],{"class":106},"c ",[96,2931,2932],{"class":102},"==",[96,2934,2935],{"class":106}," num)",[96,2937,2938],{"class":165}," \u002F\u002F如果是水仙花数，才打印\n",[96,2940,2941],{"class":98,"line":1636},[96,2942,2493],{"class":106},[96,2944,2945,2947,2949,2951,2953],{"class":98,"line":1657},[96,2946,2498],{"class":106},[96,2948,1151],{"class":102},[96,2950,1648],{"class":106},[96,2952,1151],{"class":102},[96,2954,1174],{"class":106},[96,2956,2957],{"class":98,"line":1662},[96,2958,2512],{"class":106},[96,2960,2961,2963,2965],{"class":98,"line":1676},[96,2962,2272],{"class":106},[96,2964,2275],{"class":102},[96,2966,1273],{"class":106},[96,2968,2969],{"class":98,"line":1681},[96,2970,2170],{"class":106},[96,2972,2973,2975,2978,2980,2983],{"class":98,"line":1710},[96,2974,2234],{"class":102},[96,2976,2977],{"class":106}," (num ",[96,2979,1017],{"class":102},[96,2981,2982],{"class":155}," 1000",[96,2984,2702],{"class":106},[96,2986,2987],{"class":98,"line":1715},[96,2988,1548],{"class":106},[50,2990,2991],{"start":1162},[53,2992,2993],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[87,2995,2997],{"className":89,"code":2996,"language":91,"meta":18,"style":18},"\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",[93,2998,2999,3004,3033,3037,3049,3053,3058,3069,3076,3080,3094,3098,3105,3109,3121,3130],{"__ignoreMap":18},[96,3000,3001],{"class":98,"line":99},[96,3002,3003],{"class":165},"\u002F\u002F从数字0-9打印\n",[96,3005,3006,3009,3011,3013,3016,3018,3020,3023,3025,3027,3029,3031],{"class":98,"line":19},[96,3007,3008],{"class":102},"for",[96,3010,107],{"class":106},[96,3012,110],{"class":102},[96,3014,3015],{"class":106}," i",[96,3017,152],{"class":102},[96,3019,298],{"class":155},[96,3021,3022],{"class":106},";i",[96,3024,1017],{"class":102},[96,3026,553],{"class":155},[96,3028,3022],{"class":106},[96,3030,2275],{"class":102},[96,3032,113],{"class":106},[96,3034,3035],{"class":98,"line":1162},[96,3036,1529],{"class":106},[96,3038,3039,3041,3043,3045,3047],{"class":98,"line":1177},[96,3040,1534],{"class":106},[96,3042,1151],{"class":102},[96,3044,548],{"class":106},[96,3046,1151],{"class":102},[96,3048,1174],{"class":106},[96,3050,3051],{"class":98,"line":1183},[96,3052,1548],{"class":106},[96,3054,3055],{"class":98,"line":1197},[96,3056,3057],{"class":165},"\u002F\u002F上式可以进行拆分\n",[96,3059,3060,3062,3064,3066],{"class":98,"line":1203},[96,3061,110],{"class":102},[96,3063,3015],{"class":106},[96,3065,152],{"class":102},[96,3067,3068],{"class":155},"0\n",[96,3070,3071,3073],{"class":98,"line":1294},[96,3072,3008],{"class":102},[96,3074,3075],{"class":106},"(;;;)\n",[96,3077,3078],{"class":98,"line":1300},[96,3079,1529],{"class":106},[96,3081,3082,3085,3088,3090,3092],{"class":98,"line":1312},[96,3083,3084],{"class":102},"    if",[96,3086,3087],{"class":106},"(i",[96,3089,1693],{"class":102},[96,3091,553],{"class":155},[96,3093,113],{"class":106},[96,3095,3096],{"class":98,"line":1595},[96,3097,2013],{"class":106},[96,3099,3100,3103],{"class":98,"line":1600},[96,3101,3102],{"class":102},"        break",[96,3104,1273],{"class":106},[96,3106,3107],{"class":98,"line":1606},[96,3108,2170],{"class":106},[96,3110,3111,3113,3115,3117,3119],{"class":98,"line":1611},[96,3112,1534],{"class":106},[96,3114,1151],{"class":102},[96,3116,548],{"class":106},[96,3118,1151],{"class":102},[96,3120,1174],{"class":106},[96,3122,3123,3126,3128],{"class":98,"line":1625},[96,3124,3125],{"class":106},"    i",[96,3127,2275],{"class":102},[96,3129,1273],{"class":106},[96,3131,3132],{"class":98,"line":1630},[96,3133,1548],{"class":106},[14,3135,3136],{},"小练习",[87,3138,3140],{"className":89,"code":3139,"language":91,"meta":18,"style":18},"#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",[93,3141,3142,3148,3158,3166,3170,3175,3180,3208,3212,3217,3222,3263,3267,3280,3284,3288,3292,3304,3308,3312],{"__ignoreMap":18},[96,3143,3144,3146],{"class":98,"line":99},[96,3145,1932],{"class":102},[96,3147,1935],{"class":211},[96,3149,3150,3152,3154,3156],{"class":98,"line":19},[96,3151,1940],{"class":102},[96,3153,1943],{"class":102},[96,3155,1947],{"class":1946},[96,3157,1273],{"class":106},[96,3159,3160,3162,3164],{"class":98,"line":1162},[96,3161,110],{"class":102},[96,3163,1956],{"class":1946},[96,3165,1959],{"class":106},[96,3167,3168],{"class":98,"line":1177},[96,3169,1529],{"class":106},[96,3171,3172],{"class":98,"line":1183},[96,3173,3174],{"class":165},"    \u002F\u002F敲桌子案例\n",[96,3176,3177],{"class":98,"line":1197},[96,3178,3179],{"class":165},"    \u002F\u002F1.先输出1-100的数字\n",[96,3181,3182,3185,3187,3189,3191,3193,3195,3198,3200,3202,3204,3206],{"class":98,"line":1203},[96,3183,3184],{"class":102},"    for",[96,3186,107],{"class":106},[96,3188,110],{"class":102},[96,3190,3015],{"class":106},[96,3192,152],{"class":102},[96,3194,324],{"class":155},[96,3196,3197],{"class":106},"; i",[96,3199,1571],{"class":102},[96,3201,418],{"class":155},[96,3203,3197],{"class":106},[96,3205,2275],{"class":102},[96,3207,113],{"class":106},[96,3209,3210],{"class":98,"line":1294},[96,3211,2013],{"class":106},[96,3213,3214],{"class":98,"line":1300},[96,3215,3216],{"class":165},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[96,3218,3219],{"class":98,"line":1312},[96,3220,3221],{"class":165},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[96,3223,3224,3226,3228,3230,3232,3234,3236,3239,3241,3243,3245,3247,3249,3251,3253,3255,3257,3259,3261],{"class":98,"line":1595},[96,3225,2480],{"class":102},[96,3227,3087],{"class":106},[96,3229,435],{"class":102},[96,3231,476],{"class":155},[96,3233,2932],{"class":102},[96,3235,298],{"class":155},[96,3237,3238],{"class":102}," ||",[96,3240,3015],{"class":106},[96,3242,435],{"class":102},[96,3244,553],{"class":155},[96,3246,2932],{"class":102},[96,3248,476],{"class":155},[96,3250,3238],{"class":102},[96,3252,3015],{"class":106},[96,3254,691],{"class":102},[96,3256,553],{"class":155},[96,3258,2932],{"class":102},[96,3260,476],{"class":155},[96,3262,113],{"class":106},[96,3264,3265],{"class":98,"line":1600},[96,3266,2493],{"class":106},[96,3268,3269,3271,3273,3276,3278],{"class":98,"line":1606},[96,3270,2498],{"class":106},[96,3272,1151],{"class":102},[96,3274,3275],{"class":211},"\"敲桌子\"",[96,3277,1151],{"class":102},[96,3279,1174],{"class":106},[96,3281,3282],{"class":98,"line":1611},[96,3283,2512],{"class":106},[96,3285,3286],{"class":98,"line":1625},[96,3287,2553],{"class":102},[96,3289,3290],{"class":98,"line":1630},[96,3291,2493],{"class":106},[96,3293,3294,3296,3298,3300,3302],{"class":98,"line":1636},[96,3295,2498],{"class":106},[96,3297,1151],{"class":102},[96,3299,548],{"class":106},[96,3301,1151],{"class":102},[96,3303,1174],{"class":106},[96,3305,3306],{"class":98,"line":1657},[96,3307,2512],{"class":106},[96,3309,3310],{"class":98,"line":1662},[96,3311,2170],{"class":106},[96,3313,3314],{"class":98,"line":1676},[96,3315,1548],{"class":106},[14,3317,3318],{},"嵌套实现星图",[87,3320,3322],{"className":89,"code":3321,"language":91,"meta":18,"style":18},"#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",[93,3323,3324,3330,3340,3348,3352,3378,3382,3411,3415,3426,3430,3439,3443],{"__ignoreMap":18},[96,3325,3326,3328],{"class":98,"line":99},[96,3327,1932],{"class":102},[96,3329,1935],{"class":211},[96,3331,3332,3334,3336,3338],{"class":98,"line":19},[96,3333,1940],{"class":102},[96,3335,1943],{"class":102},[96,3337,1947],{"class":1946},[96,3339,1273],{"class":106},[96,3341,3342,3344,3346],{"class":98,"line":1162},[96,3343,110],{"class":102},[96,3345,1956],{"class":1946},[96,3347,1959],{"class":106},[96,3349,3350],{"class":98,"line":1177},[96,3351,1529],{"class":106},[96,3353,3354,3356,3358,3360,3362,3364,3366,3368,3370,3372,3374,3376],{"class":98,"line":1183},[96,3355,3184],{"class":102},[96,3357,1641],{"class":106},[96,3359,110],{"class":102},[96,3361,3015],{"class":106},[96,3363,152],{"class":102},[96,3365,298],{"class":155},[96,3367,3022],{"class":106},[96,3369,1017],{"class":102},[96,3371,553],{"class":155},[96,3373,3022],{"class":106},[96,3375,2275],{"class":102},[96,3377,113],{"class":106},[96,3379,3380],{"class":98,"line":1197},[96,3381,2013],{"class":106},[96,3383,3384,3387,3389,3391,3394,3396,3398,3401,3403,3405,3407,3409],{"class":98,"line":1203},[96,3385,3386],{"class":102},"        for",[96,3388,1641],{"class":106},[96,3390,110],{"class":102},[96,3392,3393],{"class":106}," j",[96,3395,152],{"class":102},[96,3397,298],{"class":155},[96,3399,3400],{"class":106},";j",[96,3402,1017],{"class":102},[96,3404,553],{"class":155},[96,3406,3400],{"class":106},[96,3408,2275],{"class":102},[96,3410,113],{"class":106},[96,3412,3413],{"class":98,"line":1294},[96,3414,2493],{"class":106},[96,3416,3417,3419,3421,3424],{"class":98,"line":1300},[96,3418,2498],{"class":106},[96,3420,1151],{"class":102},[96,3422,3423],{"class":211},"\"*\"",[96,3425,1273],{"class":106},[96,3427,3428],{"class":98,"line":1312},[96,3429,2512],{"class":106},[96,3431,3432,3435,3437],{"class":98,"line":1595},[96,3433,3434],{"class":106},"        cout",[96,3436,1151],{"class":102},[96,3438,1174],{"class":106},[96,3440,3441],{"class":98,"line":1600},[96,3442,2170],{"class":106},[96,3444,3445],{"class":98,"line":1606},[96,3446,1548],{"class":106},[14,3448,3449],{},"乘法口诀表",[87,3451,3453],{"className":89,"code":3452,"language":91,"meta":18,"style":18},"#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",[93,3454,3455,3461,3471,3479,3483,3509,3513,3538,3542,3582,3586,3594,3598],{"__ignoreMap":18},[96,3456,3457,3459],{"class":98,"line":99},[96,3458,1932],{"class":102},[96,3460,2317],{"class":211},[96,3462,3463,3465,3467,3469],{"class":98,"line":19},[96,3464,1940],{"class":102},[96,3466,1943],{"class":102},[96,3468,1947],{"class":1946},[96,3470,1273],{"class":106},[96,3472,3473,3475,3477],{"class":98,"line":1162},[96,3474,110],{"class":102},[96,3476,1956],{"class":1946},[96,3478,1959],{"class":106},[96,3480,3481],{"class":98,"line":1177},[96,3482,1529],{"class":106},[96,3484,3485,3487,3489,3491,3493,3495,3497,3499,3501,3503,3505,3507],{"class":98,"line":1183},[96,3486,3184],{"class":102},[96,3488,107],{"class":106},[96,3490,110],{"class":102},[96,3492,3015],{"class":106},[96,3494,152],{"class":102},[96,3496,324],{"class":155},[96,3498,3022],{"class":106},[96,3500,1017],{"class":102},[96,3502,553],{"class":155},[96,3504,3022],{"class":106},[96,3506,2275],{"class":102},[96,3508,113],{"class":106},[96,3510,3511],{"class":98,"line":1197},[96,3512,2013],{"class":106},[96,3514,3515,3517,3519,3521,3523,3525,3527,3529,3531,3534,3536],{"class":98,"line":1203},[96,3516,3386],{"class":102},[96,3518,107],{"class":106},[96,3520,110],{"class":102},[96,3522,3393],{"class":106},[96,3524,152],{"class":102},[96,3526,324],{"class":155},[96,3528,3400],{"class":106},[96,3530,1571],{"class":102},[96,3532,3533],{"class":106},"i;j",[96,3535,2275],{"class":102},[96,3537,113],{"class":106},[96,3539,3540],{"class":98,"line":1294},[96,3541,2493],{"class":106},[96,3543,3544,3546,3548,3550,3552,3554,3556,3558,3560,3563,3565,3567,3569,3571,3573,3576,3578,3580],{"class":98,"line":1300},[96,3545,2498],{"class":106},[96,3547,1151],{"class":102},[96,3549,574],{"class":106},[96,3551,1151],{"class":102},[96,3553,3423],{"class":211},[96,3555,1151],{"class":102},[96,3557,548],{"class":106},[96,3559,1151],{"class":102},[96,3561,3562],{"class":211},"\"=\"",[96,3564,1151],{"class":102},[96,3566,548],{"class":106},[96,3568,562],{"class":102},[96,3570,574],{"class":106},[96,3572,1151],{"class":102},[96,3574,3575],{"class":211},"'",[96,3577,1213],{"class":155},[96,3579,3575],{"class":211},[96,3581,1273],{"class":106},[96,3583,3584],{"class":98,"line":1312},[96,3585,2512],{"class":106},[96,3587,3588,3590,3592],{"class":98,"line":1595},[96,3589,3434],{"class":106},[96,3591,1151],{"class":102},[96,3593,1174],{"class":106},[96,3595,3596],{"class":98,"line":1600},[96,3597,2170],{"class":106},[96,3599,3600],{"class":98,"line":1606},[96,3601,1548],{"class":106},[67,3603,3605],{"id":3604},"_163跳出语句","1.6.3跳出语句",[50,3607,3608],{},[53,3609,3610],{},"break语句\n作用：用于跳出选择结构或者循环结构",[14,3612,3613],{},"break使用时机：",[1114,3615,3616,3619,3622],{},[53,3617,3618],{},"出现在switch条件语句中，作用是终止case并跳出switch",[53,3620,3621],{},"出现在循环结构中，作用是跳出当前的循环结构",[53,3623,3624],{},"出现在嵌套循环中，跳出最近的内层循环语句",[50,3626,3627,3630],{"start":19},[53,3628,3629],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[53,3631,3632],{},"goto语句\n语法：goto 标记;",[14,3634,3635],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[87,3637,3639],{"className":89,"code":3638,"language":91,"meta":18,"style":18},"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",[93,3640,3641,3649,3653,3666,3676,3689,3702,3715,3723,3739],{"__ignoreMap":18},[96,3642,3643,3645,3647],{"class":98,"line":99},[96,3644,110],{"class":102},[96,3646,1956],{"class":1946},[96,3648,1959],{"class":106},[96,3650,3651],{"class":98,"line":19},[96,3652,1529],{"class":106},[96,3654,3655,3657,3659,3662,3664],{"class":98,"line":1162},[96,3656,1534],{"class":106},[96,3658,1151],{"class":102},[96,3660,3661],{"class":211},"\"1\"",[96,3663,1151],{"class":102},[96,3665,1174],{"class":106},[96,3667,3668,3671,3674],{"class":98,"line":1177},[96,3669,3670],{"class":102},"    goto",[96,3672,3673],{"class":1946}," FLAG",[96,3675,1273],{"class":106},[96,3677,3678,3680,3682,3685,3687],{"class":98,"line":1183},[96,3679,1534],{"class":106},[96,3681,1151],{"class":102},[96,3683,3684],{"class":211},"\"2\"",[96,3686,1151],{"class":102},[96,3688,1174],{"class":106},[96,3690,3691,3693,3695,3698,3700],{"class":98,"line":1197},[96,3692,1534],{"class":106},[96,3694,1151],{"class":102},[96,3696,3697],{"class":211},"\"3\"",[96,3699,1151],{"class":102},[96,3701,1174],{"class":106},[96,3703,3704,3706,3708,3711,3713],{"class":98,"line":1203},[96,3705,1534],{"class":106},[96,3707,1151],{"class":102},[96,3709,3710],{"class":211},"\"4\"",[96,3712,1151],{"class":102},[96,3714,1174],{"class":106},[96,3716,3717,3720],{"class":98,"line":1294},[96,3718,3719],{"class":1946},"    FLAG",[96,3721,3722],{"class":106},":\n",[96,3724,3725,3727,3729,3732,3734,3736],{"class":98,"line":1300},[96,3726,1534],{"class":106},[96,3728,1151],{"class":102},[96,3730,3731],{"class":211},"\"5\"",[96,3733,1151],{"class":102},[96,3735,1221],{"class":106},[96,3737,3738],{"class":165},"\u002F\u002F跳过了2,3,4,直接到5\n",[96,3740,3741],{"class":98,"line":1312},[96,3742,1548],{"class":106},[38,3744,3746],{"id":3745},"_17数组","1.7数组",[67,3748,3750],{"id":3749},"_171一维数组","1.7.1一维数组",[50,3752,3753],{},[53,3754,3755],{},"一维数组定义方式",[244,3757,3758,3768],{},[247,3759,3760],{},[250,3761,3762,3765],{},[253,3763,3764],{},"方式",[253,3766,3767],{},"注意事项",[291,3769,3770,3784,3794],{},[250,3771,3772,3778],{},[296,3773,3774,3775,162],{},"数据类型 数组名",[96,3776,3777],{},"数组长度",[296,3779,3780,3781,3783],{},"这种方式是先定义再arr",[96,3782,548],{},"赋值",[250,3785,3786,3791],{},[296,3787,3774,3788,3790],{},[96,3789,3777],{},"={值1,值2....};",[296,3792,3793],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[250,3795,3796,3800],{},[296,3797,3774,3798,3790],{},[96,3799],{},[296,3801,3802,3803,3805],{},"int arr",[96,3804],{},";这是不正确的，按照这样的方式定义必须有初始长度",[50,3807,3808],{"start":19},[53,3809,3810],{},"一维数组数组名\n用途：",[1114,3812,3813],{},[53,3814,3815],{},"1.可以统计整个数组在内存中的长度：",[87,3817,3819],{"className":89,"code":3818,"language":91,"meta":18,"style":18},"sizeof(arr);\nsizeof(arr[0]);\n",[93,3820,3821,3828],{"__ignoreMap":18},[96,3822,3823,3825],{"class":98,"line":99},[96,3824,103],{"class":102},[96,3826,3827],{"class":106},"(arr);\n",[96,3829,3830,3832,3835,3837],{"class":98,"line":19},[96,3831,103],{"class":102},[96,3833,3834],{"class":106},"(arr[",[96,3836,298],{"class":155},[96,3838,3839],{"class":106},"]);\n",[1114,3841,3842],{},[53,3843,3844],{},"2.可以获取数组在内存中的首地址:",[87,3846,3848],{"className":89,"code":3847,"language":91,"meta":18,"style":18},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[93,3849,3850,3855,3868,3873],{"__ignoreMap":18},[96,3851,3852],{"class":98,"line":99},[96,3853,3854],{"class":165},"\u002F\u002F查看16进制的首地址\n",[96,3856,3857,3859,3861,3864,3866],{"class":98,"line":19},[96,3858,1352],{"class":106},[96,3860,1151],{"class":102},[96,3862,3863],{"class":106},"arr",[96,3865,1151],{"class":102},[96,3867,1174],{"class":106},[96,3869,3870],{"class":98,"line":1162},[96,3871,3872],{"class":165},"\u002F\u002F看10进制数\n",[96,3874,3875,3877,3879,3881,3883,3885,3887,3890,3892,3894,3896],{"class":98,"line":1177},[96,3876,1352],{"class":106},[96,3878,1151],{"class":102},[96,3880,107],{"class":106},[96,3882,110],{"class":102},[96,3884,536],{"class":106},[96,3886,460],{"class":102},[96,3888,3889],{"class":106},"arr[",[96,3891,298],{"class":155},[96,3893,1047],{"class":106},[96,3895,1151],{"class":102},[96,3897,1174],{"class":106},[14,3899,3900],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1114,3902,3903],{},[53,3904,3905],{},"1️⃣五只小猪称体重",[87,3907,3909],{"className":89,"code":3908,"language":91,"meta":18,"style":18},"#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",[93,3910,3911,3917,3927,3935,3939,3979,3992,4018,4022,4034,4038,4048,4052,4056,4069,4079],{"__ignoreMap":18},[96,3912,3913,3915],{"class":98,"line":99},[96,3914,1932],{"class":102},[96,3916,1935],{"class":211},[96,3918,3919,3921,3923,3925],{"class":98,"line":19},[96,3920,1940],{"class":102},[96,3922,1943],{"class":102},[96,3924,1947],{"class":1946},[96,3926,1273],{"class":106},[96,3928,3929,3931,3933],{"class":98,"line":1162},[96,3930,110],{"class":102},[96,3932,1956],{"class":1946},[96,3934,1959],{"class":106},[96,3936,3937],{"class":98,"line":1177},[96,3938,1529],{"class":106},[96,3940,3941,3943,3946,3948,3950,3952,3954,3957,3959,3962,3964,3966,3968,3971,3973,3976],{"class":98,"line":1183},[96,3942,1968],{"class":102},[96,3944,3945],{"class":106}," arr[",[96,3947,426],{"class":155},[96,3949,1047],{"class":106},[96,3951,152],{"class":102},[96,3953,1003],{"class":106},[96,3955,3956],{"class":155},"300",[96,3958,485],{"class":106},[96,3960,3961],{"class":155},"350",[96,3963,485],{"class":106},[96,3965,1705],{"class":155},[96,3967,485],{"class":106},[96,3969,3970],{"class":155},"400",[96,3972,485],{"class":106},[96,3974,3975],{"class":155},"250",[96,3977,3978],{"class":106},"};\n",[96,3980,3981,3983,3986,3988,3990],{"class":98,"line":1197},[96,3982,1968],{"class":102},[96,3984,3985],{"class":106}," tmp",[96,3987,152],{"class":102},[96,3989,298],{"class":155},[96,3991,1273],{"class":106},[96,3993,3994,3996,3998,4000,4002,4004,4006,4008,4010,4012,4014,4016],{"class":98,"line":1203},[96,3995,3184],{"class":102},[96,3997,1641],{"class":106},[96,3999,110],{"class":102},[96,4001,3015],{"class":106},[96,4003,152],{"class":102},[96,4005,298],{"class":155},[96,4007,3022],{"class":106},[96,4009,1017],{"class":102},[96,4011,426],{"class":155},[96,4013,3022],{"class":106},[96,4015,2275],{"class":102},[96,4017,113],{"class":106},[96,4019,4020],{"class":98,"line":1294},[96,4021,2013],{"class":106},[96,4023,4024,4026,4029,4031],{"class":98,"line":1300},[96,4025,2480],{"class":102},[96,4027,4028],{"class":106},"(tmp",[96,4030,1017],{"class":102},[96,4032,4033],{"class":106},"arr[i])\n",[96,4035,4036],{"class":98,"line":1312},[96,4037,2493],{"class":106},[96,4039,4040,4043,4045],{"class":98,"line":1595},[96,4041,4042],{"class":106},"            tmp",[96,4044,152],{"class":102},[96,4046,4047],{"class":106},"arr[i];\n",[96,4049,4050],{"class":98,"line":1600},[96,4051,2512],{"class":106},[96,4053,4054],{"class":98,"line":1606},[96,4055,2170],{"class":106},[96,4057,4058,4060,4062,4065,4067],{"class":98,"line":1611},[96,4059,1534],{"class":106},[96,4061,1151],{"class":102},[96,4063,4064],{"class":106},"tmp",[96,4066,1151],{"class":102},[96,4068,1174],{"class":106},[96,4070,4071,4074,4077],{"class":98,"line":1625},[96,4072,4073],{"class":102},"    return",[96,4075,4076],{"class":155}," 0",[96,4078,1273],{"class":106},[96,4080,4081],{"class":98,"line":1630},[96,4082,1548],{"class":106},[1114,4084,4085],{},[53,4086,4087],{},"2️⃣数组元素逆置",[87,4089,4091],{"className":89,"code":4090,"language":91,"meta":18,"style":18},"\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",[93,4092,4093,4098,4104,4114,4122,4126,4161,4177,4209,4222,4227,4232,4244,4254,4264,4269,4278,4288,4293,4298,4325,4329,4345,4349,4360,4369],{"__ignoreMap":18},[96,4094,4095],{"class":98,"line":99},[96,4096,4097],{"class":165},"\u002F\u002F元素逆置\n",[96,4099,4100,4102],{"class":98,"line":19},[96,4101,1932],{"class":102},[96,4103,1935],{"class":211},[96,4105,4106,4108,4110,4112],{"class":98,"line":1162},[96,4107,1940],{"class":102},[96,4109,1943],{"class":102},[96,4111,1947],{"class":1946},[96,4113,1273],{"class":106},[96,4115,4116,4118,4120],{"class":98,"line":1177},[96,4117,110],{"class":102},[96,4119,1956],{"class":1946},[96,4121,1959],{"class":106},[96,4123,4124],{"class":98,"line":1183},[96,4125,1529],{"class":106},[96,4127,4128,4131,4133,4135,4137,4139,4141,4143,4145,4147,4149,4151,4153,4155,4157,4159],{"class":98,"line":1197},[96,4129,4130],{"class":102},"   int",[96,4132,3945],{"class":106},[96,4134,426],{"class":155},[96,4136,1047],{"class":106},[96,4138,152],{"class":102},[96,4140,1003],{"class":106},[96,4142,324],{"class":155},[96,4144,485],{"class":106},[96,4146,184],{"class":155},[96,4148,485],{"class":106},[96,4150,178],{"class":155},[96,4152,485],{"class":106},[96,4154,400],{"class":155},[96,4156,485],{"class":106},[96,4158,426],{"class":155},[96,4160,3978],{"class":106},[96,4162,4163,4165,4168,4170,4172,4174],{"class":98,"line":1203},[96,4164,4130],{"class":102},[96,4166,4167],{"class":106}," start",[96,4169,152],{"class":102},[96,4171,298],{"class":155},[96,4173,162],{"class":106},[96,4175,4176],{"class":165},"\u002F\u002F起始下标\n",[96,4178,4179,4181,4184,4187,4190,4193,4195,4197,4200,4202,4204,4206],{"class":98,"line":1294},[96,4180,4130],{"class":102},[96,4182,4183],{"class":106}," end",[96,4185,4186],{"class":102},"=sizeof",[96,4188,4189],{"class":106},"(arr)",[96,4191,4192],{"class":102},"\u002Fsizeof",[96,4194,3834],{"class":106},[96,4196,298],{"class":155},[96,4198,4199],{"class":106},"])",[96,4201,639],{"class":102},[96,4203,324],{"class":155},[96,4205,162],{"class":106},[96,4207,4208],{"class":165},"\u002F\u002F结束下标\n",[96,4210,4211,4214,4217,4219],{"class":98,"line":1300},[96,4212,4213],{"class":102},"   while",[96,4215,4216],{"class":106}," (start",[96,4218,1017],{"class":102},[96,4220,4221],{"class":106},"end)\n",[96,4223,4224],{"class":98,"line":1312},[96,4225,4226],{"class":106},"   {\n",[96,4228,4229],{"class":98,"line":1595},[96,4230,4231],{"class":165},"    \u002F\u002F实现元素互换代码\n",[96,4233,4234,4236,4239,4241],{"class":98,"line":1600},[96,4235,1968],{"class":102},[96,4237,4238],{"class":106}," temp",[96,4240,152],{"class":102},[96,4242,4243],{"class":106},"arr[start];\n",[96,4245,4246,4249,4251],{"class":98,"line":1606},[96,4247,4248],{"class":106},"    arr[start]",[96,4250,152],{"class":102},[96,4252,4253],{"class":106},"arr[end];\n",[96,4255,4256,4259,4261],{"class":98,"line":1611},[96,4257,4258],{"class":106},"    arr[end]",[96,4260,152],{"class":102},[96,4262,4263],{"class":106},"temp;\n",[96,4265,4266],{"class":98,"line":1625},[96,4267,4268],{"class":165},"    \u002F\u002F下标更新\n",[96,4270,4271,4274,4276],{"class":98,"line":1630},[96,4272,4273],{"class":106},"    start",[96,4275,2275],{"class":102},[96,4277,1273],{"class":106},[96,4279,4280,4283,4286],{"class":98,"line":1636},[96,4281,4282],{"class":106},"    end",[96,4284,4285],{"class":102},"--",[96,4287,1273],{"class":106},[96,4289,4290],{"class":98,"line":1657},[96,4291,4292],{"class":106},"   }\n",[96,4294,4295],{"class":98,"line":1662},[96,4296,4297],{"class":165},"   \u002F\u002F输出逆置后的数组\n",[96,4299,4300,4303,4305,4307,4309,4311,4313,4315,4317,4319,4321,4323],{"class":98,"line":1676},[96,4301,4302],{"class":102},"   for",[96,4304,1641],{"class":106},[96,4306,110],{"class":102},[96,4308,3015],{"class":106},[96,4310,152],{"class":102},[96,4312,298],{"class":155},[96,4314,3022],{"class":106},[96,4316,1017],{"class":102},[96,4318,426],{"class":155},[96,4320,3022],{"class":106},[96,4322,2275],{"class":102},[96,4324,113],{"class":106},[96,4326,4327],{"class":98,"line":1681},[96,4328,4226],{"class":106},[96,4330,4331,4333,4335,4338,4340,4343],{"class":98,"line":1710},[96,4332,1534],{"class":106},[96,4334,1151],{"class":102},[96,4336,4337],{"class":106},"arr[i]",[96,4339,1151],{"class":102},[96,4341,4342],{"class":211},"\" \"",[96,4344,1273],{"class":106},[96,4346,4347],{"class":98,"line":1715},[96,4348,4292],{"class":106},[96,4350,4351,4354,4356,4358],{"class":98,"line":1732},[96,4352,4353],{"class":1946},"   system",[96,4355,107],{"class":106},[96,4357,2291],{"class":211},[96,4359,2702],{"class":106},[96,4361,4362,4365,4367],{"class":98,"line":1737},[96,4363,4364],{"class":102},"   return",[96,4366,4076],{"class":155},[96,4368,1273],{"class":106},[96,4370,4371],{"class":98,"line":1742},[96,4372,1548],{"class":106},[1114,4374,4375],{},[53,4376,4377],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[87,4379,4381],{"className":89,"code":4380,"language":91,"meta":18,"style":18},"\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",[93,4382,4383,4388,4394,4404,4412,4416,4468,4481,4507,4511,4525,4529,4534,4539,4569,4573,4578,4612,4616,4621,4641,4646,4658,4674,4689,4694,4698,4702,4715,4741,4745,4759,4763,4771],{"__ignoreMap":18},[96,4384,4385],{"class":98,"line":99},[96,4386,4387],{"class":165},"\u002F\u002F冒泡排序,升序\n",[96,4389,4390,4392],{"class":98,"line":19},[96,4391,1932],{"class":102},[96,4393,1935],{"class":211},[96,4395,4396,4398,4400,4402],{"class":98,"line":1162},[96,4397,1940],{"class":102},[96,4399,1943],{"class":102},[96,4401,1947],{"class":1946},[96,4403,1273],{"class":106},[96,4405,4406,4408,4410],{"class":98,"line":1177},[96,4407,110],{"class":102},[96,4409,1956],{"class":1946},[96,4411,1959],{"class":106},[96,4413,4414],{"class":98,"line":1183},[96,4415,1529],{"class":106},[96,4417,4418,4420,4422,4424,4427,4429,4432,4434,4436,4438,4440,4442,4444,4446,4448,4450,4452,4454,4456,4458,4460,4462,4464,4466],{"class":98,"line":1197},[96,4419,1968],{"class":102},[96,4421,3945],{"class":106},[96,4423,527],{"class":155},[96,4425,4426],{"class":106},"] ",[96,4428,152],{"class":102},[96,4430,4431],{"class":106}," {",[96,4433,400],{"class":155},[96,4435,485],{"class":106},[96,4437,184],{"class":155},[96,4439,485],{"class":106},[96,4441,502],{"class":155},[96,4443,485],{"class":106},[96,4445,298],{"class":155},[96,4447,485],{"class":106},[96,4449,426],{"class":155},[96,4451,485],{"class":106},[96,4453,476],{"class":155},[96,4455,485],{"class":106},[96,4457,324],{"class":155},[96,4459,485],{"class":106},[96,4461,178],{"class":155},[96,4463,485],{"class":106},[96,4465,527],{"class":155},[96,4467,3978],{"class":106},[96,4469,4470,4472,4474,4477,4479],{"class":98,"line":1203},[96,4471,1534],{"class":106},[96,4473,1151],{"class":102},[96,4475,4476],{"class":211},"\"排序前：\"",[96,4478,1151],{"class":102},[96,4480,1174],{"class":106},[96,4482,4483,4485,4487,4489,4491,4493,4495,4497,4499,4501,4503,4505],{"class":98,"line":1294},[96,4484,3184],{"class":102},[96,4486,1641],{"class":106},[96,4488,110],{"class":102},[96,4490,3015],{"class":106},[96,4492,152],{"class":102},[96,4494,298],{"class":155},[96,4496,3022],{"class":106},[96,4498,1017],{"class":102},[96,4500,527],{"class":155},[96,4502,3022],{"class":106},[96,4504,2275],{"class":102},[96,4506,113],{"class":106},[96,4508,4509],{"class":98,"line":1300},[96,4510,2013],{"class":106},[96,4512,4513,4515,4517,4519,4521,4523],{"class":98,"line":1312},[96,4514,3434],{"class":106},[96,4516,1151],{"class":102},[96,4518,4337],{"class":106},[96,4520,1151],{"class":102},[96,4522,4342],{"class":211},[96,4524,1273],{"class":106},[96,4526,4527],{"class":98,"line":1595},[96,4528,2170],{"class":106},[96,4530,4531],{"class":98,"line":1600},[96,4532,4533],{"class":165},"    \u002F\u002F开始冒泡排序\n",[96,4535,4536],{"class":98,"line":1606},[96,4537,4538],{"class":165},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[96,4540,4541,4543,4545,4547,4549,4551,4553,4555,4557,4559,4561,4563,4565,4567],{"class":98,"line":1611},[96,4542,3184],{"class":102},[96,4544,1641],{"class":106},[96,4546,110],{"class":102},[96,4548,3015],{"class":106},[96,4550,152],{"class":102},[96,4552,298],{"class":155},[96,4554,3022],{"class":106},[96,4556,1017],{"class":102},[96,4558,527],{"class":155},[96,4560,639],{"class":102},[96,4562,324],{"class":155},[96,4564,3022],{"class":106},[96,4566,2275],{"class":102},[96,4568,113],{"class":106},[96,4570,4571],{"class":98,"line":1625},[96,4572,2013],{"class":106},[96,4574,4575],{"class":98,"line":1630},[96,4576,4577],{"class":165},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[96,4579,4580,4582,4584,4586,4588,4590,4592,4594,4596,4598,4600,4602,4604,4606,4608,4610],{"class":98,"line":1636},[96,4581,3386],{"class":102},[96,4583,1641],{"class":106},[96,4585,110],{"class":102},[96,4587,3393],{"class":106},[96,4589,152],{"class":102},[96,4591,298],{"class":155},[96,4593,3400],{"class":106},[96,4595,1017],{"class":102},[96,4597,527],{"class":155},[96,4599,639],{"class":102},[96,4601,548],{"class":106},[96,4603,639],{"class":102},[96,4605,324],{"class":155},[96,4607,3400],{"class":106},[96,4609,2275],{"class":102},[96,4611,113],{"class":106},[96,4613,4614],{"class":98,"line":1657},[96,4615,2493],{"class":106},[96,4617,4618],{"class":98,"line":1662},[96,4619,4620],{"class":165},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[96,4622,4623,4626,4629,4631,4634,4636,4638],{"class":98,"line":1676},[96,4624,4625],{"class":102},"            if",[96,4627,4628],{"class":106},"(arr[j]",[96,4630,1067],{"class":102},[96,4632,4633],{"class":106},"arr[j",[96,4635,588],{"class":102},[96,4637,324],{"class":155},[96,4639,4640],{"class":106},"])\n",[96,4642,4643],{"class":98,"line":1681},[96,4644,4645],{"class":106},"            {\n",[96,4647,4648,4651,4653,4655],{"class":98,"line":1710},[96,4649,4650],{"class":102},"                int",[96,4652,4238],{"class":106},[96,4654,152],{"class":102},[96,4656,4657],{"class":106},"arr[j];\n",[96,4659,4660,4663,4665,4667,4669,4671],{"class":98,"line":1715},[96,4661,4662],{"class":106},"                arr[j]",[96,4664,152],{"class":102},[96,4666,4633],{"class":106},[96,4668,588],{"class":102},[96,4670,324],{"class":155},[96,4672,4673],{"class":106},"];\n",[96,4675,4676,4679,4681,4683,4685,4687],{"class":98,"line":1732},[96,4677,4678],{"class":106},"                arr[j",[96,4680,588],{"class":102},[96,4682,324],{"class":155},[96,4684,1047],{"class":106},[96,4686,152],{"class":102},[96,4688,4263],{"class":106},[96,4690,4691],{"class":98,"line":1737},[96,4692,4693],{"class":106},"            }\n",[96,4695,4696],{"class":98,"line":1742},[96,4697,2512],{"class":106},[96,4699,4700],{"class":98,"line":1747},[96,4701,2170],{"class":106},[96,4703,4704,4706,4708,4711,4713],{"class":98,"line":1761},[96,4705,1534],{"class":106},[96,4707,1151],{"class":102},[96,4709,4710],{"class":211},"\"排序后：\"",[96,4712,1151],{"class":102},[96,4714,1174],{"class":106},[96,4716,4717,4719,4721,4723,4725,4727,4729,4731,4733,4735,4737,4739],{"class":98,"line":1766},[96,4718,3184],{"class":102},[96,4720,1641],{"class":106},[96,4722,110],{"class":102},[96,4724,3015],{"class":106},[96,4726,152],{"class":102},[96,4728,298],{"class":155},[96,4730,3022],{"class":106},[96,4732,1017],{"class":102},[96,4734,527],{"class":155},[96,4736,3022],{"class":106},[96,4738,2275],{"class":102},[96,4740,113],{"class":106},[96,4742,4743],{"class":98,"line":2560},[96,4744,2013],{"class":106},[96,4746,4747,4749,4751,4753,4755,4757],{"class":98,"line":2574},[96,4748,3434],{"class":106},[96,4750,1151],{"class":102},[96,4752,4337],{"class":106},[96,4754,1151],{"class":102},[96,4756,4342],{"class":211},[96,4758,1273],{"class":106},[96,4760,4761],{"class":98,"line":2582},[96,4762,2170],{"class":106},[96,4764,4765,4767,4769],{"class":98,"line":2587},[96,4766,4073],{"class":102},[96,4768,4076],{"class":155},[96,4770,1273],{"class":106},[96,4772,4773],{"class":98,"line":2593},[96,4774,1548],{"class":106},[67,4776,4778],{"id":4777},"_172二维数组","1.7.2二维数组",[50,4780,4781],{},[53,4782,4783],{},"二维数组的四种定义方式",[244,4785,4786,4795],{},[247,4787,4788],{},[250,4789,4790,4793],{},[253,4791,4792],{},"序号",[253,4794,3764],{},[291,4796,4797,4807,4816,4825,4834],{},[250,4798,4799,4801],{},[296,4800,324],{},[296,4802,4803,4804,162],{},"数据类型 数组名[行数]",[96,4805,4806],{},"列数",[250,4808,4809,4811],{},[296,4810,184],{},[296,4812,4803,4813,4815],{},[96,4814,4806],{},"={ {数据1,数据2}，{数据3，数据4}... }",[250,4817,4818,4820],{},[296,4819,178],{},[296,4821,4803,4822,4824],{},[96,4823,4806],{},"={数据1,数据2,数据3...}",[250,4826,4827,4829],{},[296,4828,400],{},[296,4830,4831,4832,4824],{},"数据类型 数组名[]",[96,4833,4806],{},[250,4835,4836,4839],{},[296,4837,4838],{},"注意：不能只省略列数",[296,4840],{},[50,4842,4843],{"start":19},[53,4844,4845],{},"二维数组数组名",[1114,4847,4848,4851],{},[53,4849,4850],{},"1.查看二维数组所占内存空间",[53,4852,4853],{},"2.获取二维数组首地址",[14,4855,4856],{},"已知二维数组，求二维数组的行数与列数",[87,4858,4860],{"className":89,"code":4859,"language":91,"meta":18,"style":18},"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",[93,4861,4862,4870,4874,4892,4896,4914,4930,4935,4960,4993],{"__ignoreMap":18},[96,4863,4864,4866,4868],{"class":98,"line":99},[96,4865,110],{"class":102},[96,4867,1956],{"class":1946},[96,4869,1959],{"class":106},[96,4871,4872],{"class":98,"line":19},[96,4873,1529],{"class":106},[96,4875,4876,4878,4880,4882,4885,4887,4889],{"class":98,"line":1162},[96,4877,1968],{"class":102},[96,4879,3945],{"class":106},[96,4881,184],{"class":155},[96,4883,4884],{"class":106},"][",[96,4886,178],{"class":155},[96,4888,1047],{"class":106},[96,4890,4891],{"class":102},"=\n",[96,4893,4894],{"class":98,"line":1177},[96,4895,2013],{"class":106},[96,4897,4898,4901,4903,4905,4907,4909,4911],{"class":98,"line":1183},[96,4899,4900],{"class":106},"        {",[96,4902,324],{"class":155},[96,4904,485],{"class":106},[96,4906,184],{"class":155},[96,4908,485],{"class":106},[96,4910,178],{"class":155},[96,4912,4913],{"class":106},"},\n",[96,4915,4916,4918,4920,4922,4924,4926,4928],{"class":98,"line":1197},[96,4917,4900],{"class":106},[96,4919,400],{"class":155},[96,4921,485],{"class":106},[96,4923,426],{"class":155},[96,4925,485],{"class":106},[96,4927,451],{"class":155},[96,4929,1548],{"class":106},[96,4931,4932],{"class":98,"line":1203},[96,4933,4934],{"class":106},"    };\n",[96,4936,4937,4939,4941,4944,4946,4948,4950,4952,4954,4956,4958],{"class":98,"line":1294},[96,4938,1534],{"class":106},[96,4940,1151],{"class":102},[96,4942,4943],{"class":211},"\"二维数组的行数\"",[96,4945,1355],{"class":102},[96,4947,4189],{"class":106},[96,4949,4192],{"class":102},[96,4951,3834],{"class":106},[96,4953,298],{"class":155},[96,4955,4199],{"class":106},[96,4957,1151],{"class":102},[96,4959,1174],{"class":106},[96,4961,4962,4964,4966,4969,4971,4973,4975,4977,4979,4981,4983,4985,4987,4989,4991],{"class":98,"line":1300},[96,4963,1534],{"class":106},[96,4965,1151],{"class":102},[96,4967,4968],{"class":211},"\"二维数组的列数\"",[96,4970,1355],{"class":102},[96,4972,3834],{"class":106},[96,4974,298],{"class":155},[96,4976,4199],{"class":106},[96,4978,4192],{"class":102},[96,4980,3834],{"class":106},[96,4982,298],{"class":155},[96,4984,4884],{"class":106},[96,4986,298],{"class":155},[96,4988,4199],{"class":106},[96,4990,1151],{"class":102},[96,4992,1174],{"class":106},[96,4994,4995],{"class":98,"line":1312},[96,4996,1548],{"class":106},[14,4998,4999],{},"查看二维数组首地址",[87,5001,5003],{"className":89,"code":5002,"language":91,"meta":18,"style":18},"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",[93,5004,5005,5022,5048,5073],{"__ignoreMap":18},[96,5006,5007,5009,5011,5014,5016,5018,5020],{"class":98,"line":99},[96,5008,1352],{"class":106},[96,5010,1151],{"class":102},[96,5012,5013],{"class":211},"\"二维数组首地址：\"",[96,5015,1151],{"class":102},[96,5017,3863],{"class":106},[96,5019,1151],{"class":102},[96,5021,1174],{"class":106},[96,5023,5024,5026,5028,5031,5033,5035,5037,5040,5042,5044,5046],{"class":98,"line":19},[96,5025,1352],{"class":106},[96,5027,1151],{"class":102},[96,5029,5030],{"class":211},"\"二维数组第一行的首地址：\"",[96,5032,1151],{"class":102},[96,5034,107],{"class":106},[96,5036,110],{"class":102},[96,5038,5039],{"class":106},")arr[",[96,5041,298],{"class":155},[96,5043,1047],{"class":106},[96,5045,1151],{"class":102},[96,5047,1174],{"class":106},[96,5049,5050,5052,5054,5057,5059,5061,5063,5065,5067,5069,5071],{"class":98,"line":1162},[96,5051,1352],{"class":106},[96,5053,1151],{"class":102},[96,5055,5056],{"class":211},"\"二维数组第二行的首地址：\"",[96,5058,1151],{"class":102},[96,5060,107],{"class":106},[96,5062,110],{"class":102},[96,5064,5039],{"class":106},[96,5066,324],{"class":155},[96,5068,1047],{"class":106},[96,5070,1151],{"class":102},[96,5072,1174],{"class":106},[96,5074,5075,5077,5079,5082,5084,5086,5088,5090,5092,5094,5096,5098,5100,5102,5104,5106],{"class":98,"line":1177},[96,5076,1352],{"class":106},[96,5078,1151],{"class":102},[96,5080,5081],{"class":211},"\"二维数组第一个元素的首地址:\"",[96,5083,1151],{"class":102},[96,5085,107],{"class":106},[96,5087,110],{"class":102},[96,5089,536],{"class":106},[96,5091,460],{"class":102},[96,5093,3889],{"class":106},[96,5095,298],{"class":155},[96,5097,4884],{"class":106},[96,5099,298],{"class":155},[96,5101,1047],{"class":106},[96,5103,1151],{"class":102},[96,5105,1221],{"class":106},[96,5107,5108],{"class":165},"\u002F\u002F对于数，要加取址符\n",[5110,5111,5112],"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":18,"searchDepth":19,"depth":19,"links":5114},[5115,5116,5117,5125,5126,5132,5137],{"id":40,"depth":19,"text":41},{"id":47,"depth":19,"text":48},{"id":64,"depth":19,"text":65,"children":5118},[5119,5120,5121,5122,5123,5124],{"id":69,"depth":1162,"text":70},{"id":123,"depth":1162,"text":124},{"id":192,"depth":1162,"text":193},{"id":1132,"depth":1162,"text":1133},{"id":1227,"depth":1162,"text":1228},{"id":1326,"depth":1162,"text":1327},{"id":1368,"depth":19,"text":1369},{"id":1436,"depth":19,"text":1437,"children":5127},[5128,5129,5130,5131],{"id":1440,"depth":1162,"text":1441},{"id":1462,"depth":1162,"text":1463},{"id":1471,"depth":1162,"text":1472},{"id":1480,"depth":1162,"text":1481},{"id":1489,"depth":19,"text":1490,"children":5133},[5134,5135,5136],{"id":1493,"depth":1162,"text":1494},{"id":2188,"depth":1162,"text":2189},{"id":3604,"depth":1162,"text":3605},{"id":3745,"depth":19,"text":3746,"children":5138},[5139,5140],{"id":3749,"depth":1162,"text":3750},{"id":4777,"depth":1162,"text":4778},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":31,"description":18},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5147,"title":5148,"body":5149,"description":18,"extension":21,"meta":6249,"navigation":23,"path":6250,"seo":6251,"stem":6252,"__hash__":6253},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5150,"toc":6241},[5151,5154,5158,5166,5174,5177,5243,5247,5250,5326,5330,5333,5336,5339,5552,5556,5561,5625,5630,5697,5702,5793,5796,5901,5905,5908,5914,6058,6062,6065,6079,6082,6127,6130,6238],[10,5152,5148],{"id":5153},"_2函数",[38,5155,5157],{"id":5156},"_21函数概述","2.1函数概述",[50,5159,5160,5163],{},[53,5161,5162],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[53,5164,5165],{},"语法：",[87,5167,5172],{"className":5168,"code":5170,"language":5171,"meta":18},[5169],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[93,5173,5170],{"__ignoreMap":18},[14,5175,5176],{},"小案例",[87,5178,5180],{"className":89,"code":5179,"language":91,"meta":18,"style":18},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[93,5181,5182,5187,5211,5215,5232,5239],{"__ignoreMap":18},[96,5183,5184],{"class":98,"line":99},[96,5185,5186],{"class":165},"\u002F\u002Fnum1,num2形参\n",[96,5188,5189,5191,5194,5196,5198,5202,5204,5206,5209],{"class":98,"line":19},[96,5190,110],{"class":102},[96,5192,5193],{"class":1946}," add",[96,5195,107],{"class":106},[96,5197,110],{"class":102},[96,5199,5201],{"class":5200},"s4XuR"," num1",[96,5203,485],{"class":106},[96,5205,110],{"class":102},[96,5207,5208],{"class":5200}," num2",[96,5210,113],{"class":106},[96,5212,5213],{"class":98,"line":1162},[96,5214,1529],{"class":106},[96,5216,5217,5219,5222,5224,5227,5229],{"class":98,"line":1177},[96,5218,1968],{"class":102},[96,5220,5221],{"class":106}," sum",[96,5223,152],{"class":102},[96,5225,5226],{"class":106},"num1",[96,5228,588],{"class":102},[96,5230,5231],{"class":106},"num2;\n",[96,5233,5234,5236],{"class":98,"line":1183},[96,5235,4073],{"class":102},[96,5237,5238],{"class":106}," sum;\n",[96,5240,5241],{"class":98,"line":1197},[96,5242,1548],{"class":106},[38,5244,5246],{"id":5245},"_22函数调用","2.2函数调用",[14,5248,5249],{},"调用刚刚写的求和函数",[87,5251,5253],{"className":89,"code":5252,"language":91,"meta":18,"style":18},"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",[93,5254,5255,5263,5267,5272,5284,5296,5305,5310,5322],{"__ignoreMap":18},[96,5256,5257,5259,5261],{"class":98,"line":99},[96,5258,110],{"class":102},[96,5260,1956],{"class":1946},[96,5262,1959],{"class":106},[96,5264,5265],{"class":98,"line":19},[96,5266,1529],{"class":106},[96,5268,5269],{"class":98,"line":1162},[96,5270,5271],{"class":165},"    \u002F\u002Fa,b实参\n",[96,5273,5274,5276,5278,5280,5282],{"class":98,"line":1177},[96,5275,1968],{"class":102},[96,5277,1381],{"class":106},[96,5279,152],{"class":102},[96,5281,298],{"class":155},[96,5283,1273],{"class":106},[96,5285,5286,5288,5290,5292,5294],{"class":98,"line":1183},[96,5287,1968],{"class":102},[96,5289,2816],{"class":106},[96,5291,152],{"class":102},[96,5293,298],{"class":155},[96,5295,1273],{"class":106},[96,5297,5298,5300,5302],{"class":98,"line":1197},[96,5299,1995],{"class":106},[96,5301,1412],{"class":102},[96,5303,5304],{"class":106},"a,b;\n",[96,5306,5307],{"class":98,"line":1203},[96,5308,5309],{"class":165},"    \u002F\u002F调用函数时，实参值传给了形参\n",[96,5311,5312,5314,5316,5319],{"class":98,"line":1294},[96,5313,1534],{"class":106},[96,5315,1151],{"class":102},[96,5317,5318],{"class":1946},"add",[96,5320,5321],{"class":106},"(a,b);\n",[96,5323,5324],{"class":98,"line":1300},[96,5325,1548],{"class":106},[38,5327,5329],{"id":5328},"_23值传递","2.3值传递",[14,5331,5332],{},"值传递就是函数调用时实参将数值传给形参",[14,5334,5335],{},"值传递时，如果形参发生任何改变，不会影响实参",[14,5337,5338],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[87,5340,5342],{"className":89,"code":5341,"language":91,"meta":18,"style":18},"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",[93,5343,5344,5366,5370,5383,5400,5418,5429,5438,5447,5460,5476,5492,5501,5505,5513,5517,5529,5541,5548],{"__ignoreMap":18},[96,5345,5346,5349,5352,5354,5356,5358,5360,5362,5364],{"class":98,"line":99},[96,5347,5348],{"class":102},"void",[96,5350,5351],{"class":1946}," swap",[96,5353,107],{"class":106},[96,5355,110],{"class":102},[96,5357,5201],{"class":5200},[96,5359,485],{"class":106},[96,5361,110],{"class":102},[96,5363,5208],{"class":5200},[96,5365,113],{"class":106},[96,5367,5368],{"class":98,"line":19},[96,5369,1529],{"class":106},[96,5371,5372,5374,5376,5379,5381],{"class":98,"line":1162},[96,5373,1534],{"class":106},[96,5375,1151],{"class":102},[96,5377,5378],{"class":211},"\"交换前：\"",[96,5380,1151],{"class":102},[96,5382,1174],{"class":106},[96,5384,5385,5387,5389,5392,5394,5396,5398],{"class":98,"line":1177},[96,5386,1534],{"class":106},[96,5388,1151],{"class":102},[96,5390,5391],{"class":211},"\"num1=\"",[96,5393,1151],{"class":102},[96,5395,5226],{"class":106},[96,5397,1151],{"class":102},[96,5399,1174],{"class":106},[96,5401,5402,5404,5406,5409,5411,5414,5416],{"class":98,"line":1183},[96,5403,1534],{"class":106},[96,5405,1151],{"class":102},[96,5407,5408],{"class":211},"\"num2=\"",[96,5410,1151],{"class":102},[96,5412,5413],{"class":106},"num2",[96,5415,1151],{"class":102},[96,5417,1174],{"class":106},[96,5419,5420,5422,5424,5426],{"class":98,"line":1197},[96,5421,1968],{"class":102},[96,5423,4238],{"class":106},[96,5425,152],{"class":102},[96,5427,5428],{"class":106},"num1;\n",[96,5430,5431,5434,5436],{"class":98,"line":1203},[96,5432,5433],{"class":106},"    num1",[96,5435,152],{"class":102},[96,5437,5231],{"class":106},[96,5439,5440,5443,5445],{"class":98,"line":1294},[96,5441,5442],{"class":106},"    num2",[96,5444,152],{"class":102},[96,5446,4263],{"class":106},[96,5448,5449,5451,5453,5456,5458],{"class":98,"line":1300},[96,5450,1534],{"class":106},[96,5452,1151],{"class":102},[96,5454,5455],{"class":211},"\"交换后：\"",[96,5457,1151],{"class":102},[96,5459,1174],{"class":106},[96,5461,5462,5464,5466,5468,5470,5472,5474],{"class":98,"line":1312},[96,5463,1534],{"class":106},[96,5465,1151],{"class":102},[96,5467,5391],{"class":211},[96,5469,1151],{"class":102},[96,5471,5226],{"class":106},[96,5473,1151],{"class":102},[96,5475,1174],{"class":106},[96,5477,5478,5480,5482,5484,5486,5488,5490],{"class":98,"line":1595},[96,5479,1534],{"class":106},[96,5481,1151],{"class":102},[96,5483,5408],{"class":211},[96,5485,1151],{"class":102},[96,5487,5413],{"class":106},[96,5489,1151],{"class":102},[96,5491,1174],{"class":106},[96,5493,5494,5496,5498],{"class":98,"line":1600},[96,5495,4073],{"class":102},[96,5497,162],{"class":106},[96,5499,5500],{"class":165},"\u002F\u002F或者不写\n",[96,5502,5503],{"class":98,"line":1606},[96,5504,1548],{"class":106},[96,5506,5507,5509,5511],{"class":98,"line":1611},[96,5508,110],{"class":102},[96,5510,1956],{"class":1946},[96,5512,1959],{"class":106},[96,5514,5515],{"class":98,"line":1625},[96,5516,1529],{"class":106},[96,5518,5519,5521,5523,5525,5527],{"class":98,"line":1630},[96,5520,1968],{"class":102},[96,5522,1381],{"class":106},[96,5524,152],{"class":102},[96,5526,553],{"class":155},[96,5528,1273],{"class":106},[96,5530,5531,5533,5535,5537,5539],{"class":98,"line":1636},[96,5532,1968],{"class":102},[96,5534,2816],{"class":106},[96,5536,152],{"class":102},[96,5538,807],{"class":155},[96,5540,1273],{"class":106},[96,5542,5543,5546],{"class":98,"line":1657},[96,5544,5545],{"class":1946},"    swap",[96,5547,5321],{"class":106},[96,5549,5550],{"class":98,"line":1662},[96,5551,1548],{"class":106},[38,5553,5555],{"id":5554},"_24函数的常见形式","2.4函数的常见形式",[50,5557,5558],{},[53,5559,5560],{},"无参无返",[87,5562,5564],{"className":89,"code":5563,"language":91,"meta":18,"style":18},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[93,5565,5566,5575,5579,5592,5596,5604,5608,5613,5621],{"__ignoreMap":18},[96,5567,5568,5570,5573],{"class":98,"line":99},[96,5569,5348],{"class":102},[96,5571,5572],{"class":1946}," test01",[96,5574,1959],{"class":106},[96,5576,5577],{"class":98,"line":19},[96,5578,1529],{"class":106},[96,5580,5581,5583,5585,5588,5590],{"class":98,"line":1162},[96,5582,1534],{"class":106},[96,5584,1151],{"class":102},[96,5586,5587],{"class":211},"\"你好\"",[96,5589,1151],{"class":102},[96,5591,1174],{"class":106},[96,5593,5594],{"class":98,"line":1177},[96,5595,1548],{"class":106},[96,5597,5598,5600,5602],{"class":98,"line":1183},[96,5599,110],{"class":102},[96,5601,1956],{"class":1946},[96,5603,1959],{"class":106},[96,5605,5606],{"class":98,"line":1197},[96,5607,1529],{"class":106},[96,5609,5610],{"class":98,"line":1203},[96,5611,5612],{"class":165},"    \u002F\u002F函数调用\n",[96,5614,5615,5618],{"class":98,"line":1294},[96,5616,5617],{"class":1946},"    test01",[96,5619,5620],{"class":106},"();\n",[96,5622,5623],{"class":98,"line":1300},[96,5624,1548],{"class":106},[50,5626,5627],{"start":19},[53,5628,5629],{},"有参无返",[87,5631,5633],{"className":89,"code":5632,"language":91,"meta":18,"style":18},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[93,5634,5635,5650,5654,5666,5670,5678,5682,5693],{"__ignoreMap":18},[96,5636,5637,5639,5642,5644,5646,5648],{"class":98,"line":99},[96,5638,5348],{"class":102},[96,5640,5641],{"class":1946}," test02",[96,5643,107],{"class":106},[96,5645,110],{"class":102},[96,5647,1381],{"class":5200},[96,5649,113],{"class":106},[96,5651,5652],{"class":98,"line":19},[96,5653,1529],{"class":106},[96,5655,5656,5658,5660,5662,5664],{"class":98,"line":1162},[96,5657,1534],{"class":106},[96,5659,1151],{"class":102},[96,5661,5587],{"class":211},[96,5663,1151],{"class":102},[96,5665,1174],{"class":106},[96,5667,5668],{"class":98,"line":1177},[96,5669,1548],{"class":106},[96,5671,5672,5674,5676],{"class":98,"line":1183},[96,5673,110],{"class":102},[96,5675,1956],{"class":1946},[96,5677,1959],{"class":106},[96,5679,5680],{"class":98,"line":1197},[96,5681,1529],{"class":106},[96,5683,5684,5687,5689,5691],{"class":98,"line":1203},[96,5685,5686],{"class":1946},"    test02",[96,5688,107],{"class":106},[96,5690,418],{"class":155},[96,5692,2702],{"class":106},[96,5694,5695],{"class":98,"line":1294},[96,5696,1548],{"class":106},[50,5698,5699],{"start":1162},[53,5700,5701],{},"无参有返",[87,5703,5705],{"className":89,"code":5704,"language":91,"meta":18,"style":18},"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",[93,5706,5707,5716,5720,5732,5741,5745,5753,5757,5770,5789],{"__ignoreMap":18},[96,5708,5709,5711,5714],{"class":98,"line":99},[96,5710,110],{"class":102},[96,5712,5713],{"class":1946}," test03",[96,5715,1959],{"class":106},[96,5717,5718],{"class":98,"line":19},[96,5719,1529],{"class":106},[96,5721,5722,5724,5726,5728,5730],{"class":98,"line":1162},[96,5723,1534],{"class":106},[96,5725,1151],{"class":102},[96,5727,5587],{"class":211},[96,5729,1151],{"class":102},[96,5731,1174],{"class":106},[96,5733,5734,5736,5739],{"class":98,"line":1177},[96,5735,4073],{"class":102},[96,5737,5738],{"class":155}," 100",[96,5740,1273],{"class":106},[96,5742,5743],{"class":98,"line":1183},[96,5744,1548],{"class":106},[96,5746,5747,5749,5751],{"class":98,"line":1197},[96,5748,110],{"class":102},[96,5750,1956],{"class":1946},[96,5752,1959],{"class":106},[96,5754,5755],{"class":98,"line":1203},[96,5756,1529],{"class":106},[96,5758,5759,5761,5763,5765,5768],{"class":98,"line":1294},[96,5760,1968],{"class":102},[96,5762,5201],{"class":106},[96,5764,152],{"class":102},[96,5766,5767],{"class":1946},"test03",[96,5769,5620],{"class":106},[96,5771,5772,5774,5776,5778,5780,5782,5784,5786],{"class":98,"line":1300},[96,5773,1534],{"class":106},[96,5775,1151],{"class":102},[96,5777,5391],{"class":211},[96,5779,1151],{"class":102},[96,5781,5226],{"class":106},[96,5783,1151],{"class":102},[96,5785,1221],{"class":106},[96,5787,5788],{"class":165}," \u002F\u002F100\n",[96,5790,5791],{"class":98,"line":1312},[96,5792,1548],{"class":106},[14,5794,5795],{},"4.有参有返",[87,5797,5799],{"className":89,"code":5798,"language":91,"meta":18,"style":18},"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",[93,5800,5801,5816,5820,5833,5839,5843,5852,5856,5868,5882,5897],{"__ignoreMap":18},[96,5802,5803,5805,5808,5810,5812,5814],{"class":98,"line":99},[96,5804,110],{"class":102},[96,5806,5807],{"class":1946}," test04",[96,5809,107],{"class":106},[96,5811,110],{"class":102},[96,5813,1381],{"class":5200},[96,5815,113],{"class":106},[96,5817,5818],{"class":98,"line":19},[96,5819,1529],{"class":106},[96,5821,5822,5824,5826,5829,5831],{"class":98,"line":1162},[96,5823,1534],{"class":106},[96,5825,1151],{"class":102},[96,5827,5828],{"class":211},"\"hello\"",[96,5830,1151],{"class":102},[96,5832,1174],{"class":106},[96,5834,5835,5837],{"class":98,"line":1177},[96,5836,4073],{"class":102},[96,5838,1415],{"class":106},[96,5840,5841],{"class":98,"line":1183},[96,5842,1548],{"class":106},[96,5844,5845,5847,5850],{"class":98,"line":1197},[96,5846,110],{"class":102},[96,5848,5849],{"class":1946}," mian",[96,5851,1959],{"class":106},[96,5853,5854],{"class":98,"line":1203},[96,5855,1529],{"class":106},[96,5857,5858,5860,5862,5864,5866],{"class":98,"line":1294},[96,5859,1968],{"class":102},[96,5861,2816],{"class":106},[96,5863,152],{"class":102},[96,5865,324],{"class":155},[96,5867,1273],{"class":106},[96,5869,5870,5872,5874,5876,5879],{"class":98,"line":1300},[96,5871,1968],{"class":102},[96,5873,2832],{"class":106},[96,5875,152],{"class":102},[96,5877,5878],{"class":1946},"test04",[96,5880,5881],{"class":106},"(b);\n",[96,5883,5884,5886,5888,5890,5892,5894],{"class":98,"line":1312},[96,5885,1534],{"class":106},[96,5887,1151],{"class":102},[96,5889,395],{"class":106},[96,5891,1151],{"class":102},[96,5893,1221],{"class":106},[96,5895,5896],{"class":165}," \u002F\u002F1\n",[96,5898,5899],{"class":98,"line":1595},[96,5900,1548],{"class":106},[38,5902,5904],{"id":5903},"_25函数的声明","2.5函数的声明",[14,5906,5907],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[14,5909,5910,5911],{},"函数的",[256,5912,5913],{},"声明可以多次，但是函数的定义只能有一次",[87,5915,5917],{"className":89,"code":5916,"language":91,"meta":18,"style":18},"\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",[93,5918,5919,5924,5929,5954,5963,5967,5979,5991,6007,6011,6031,6035,6054],{"__ignoreMap":18},[96,5920,5921],{"class":98,"line":99},[96,5922,5923],{"class":165},"\u002F\u002F函数声明\n",[96,5925,5926],{"class":98,"line":19},[96,5927,5928],{"class":165},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[96,5930,5931,5933,5936,5938,5940,5942,5944,5946,5948,5951],{"class":98,"line":1162},[96,5932,110],{"class":102},[96,5934,5935],{"class":1946}," max",[96,5937,107],{"class":106},[96,5939,110],{"class":102},[96,5941,1381],{"class":5200},[96,5943,485],{"class":106},[96,5945,110],{"class":102},[96,5947,2816],{"class":5200},[96,5949,5950],{"class":106},");",[96,5952,5953],{"class":165},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[96,5955,5956,5958,5960],{"class":98,"line":1177},[96,5957,110],{"class":102},[96,5959,1956],{"class":1946},[96,5961,5962],{"class":106},"() \n",[96,5964,5965],{"class":98,"line":1183},[96,5966,1529],{"class":106},[96,5968,5969,5971,5973,5975,5977],{"class":98,"line":1197},[96,5970,1968],{"class":102},[96,5972,1381],{"class":106},[96,5974,152],{"class":102},[96,5976,553],{"class":155},[96,5978,1273],{"class":106},[96,5980,5981,5983,5985,5987,5989],{"class":98,"line":1203},[96,5982,1968],{"class":102},[96,5984,2816],{"class":106},[96,5986,152],{"class":102},[96,5988,807],{"class":155},[96,5990,1273],{"class":106},[96,5992,5993,5995,5997,6000,6003,6005],{"class":98,"line":1294},[96,5994,1534],{"class":106},[96,5996,1151],{"class":102},[96,5998,5999],{"class":1946},"max",[96,6001,6002],{"class":106},"(a,b)",[96,6004,1151],{"class":102},[96,6006,1174],{"class":106},[96,6008,6009],{"class":98,"line":1300},[96,6010,1548],{"class":106},[96,6012,6013,6015,6017,6019,6021,6023,6025,6027,6029],{"class":98,"line":1312},[96,6014,110],{"class":102},[96,6016,5935],{"class":1946},[96,6018,107],{"class":106},[96,6020,110],{"class":102},[96,6022,1381],{"class":5200},[96,6024,485],{"class":106},[96,6026,110],{"class":102},[96,6028,2816],{"class":5200},[96,6030,113],{"class":106},[96,6032,6033],{"class":98,"line":1595},[96,6034,1529],{"class":106},[96,6036,6037,6039,6041,6043,6045,6047,6049,6051],{"class":98,"line":1600},[96,6038,4073],{"class":102},[96,6040,1381],{"class":106},[96,6042,1067],{"class":102},[96,6044,370],{"class":106},[96,6046,1093],{"class":102},[96,6048,345],{"class":106},[96,6050,966],{"class":102},[96,6052,6053],{"class":106},"b;\n",[96,6055,6056],{"class":98,"line":1606},[96,6057,1548],{"class":106},[38,6059,6061],{"id":6060},"_26函数的分文件编写","2.6函数的分文件编写",[14,6063,6064],{},"4个步骤：",[1114,6066,6067,6070,6073,6076],{},[53,6068,6069],{},"1.创建后缀名为.h的头文件",[53,6071,6072],{},"2.创建后缀名为.cpp的源文件",[53,6074,6075],{},"3.在头文件中写函数的定义",[53,6077,6078],{},"4.在源文件中写函数的定义\n示例：",[14,6080,6081],{},"头文件：swap.h",[87,6083,6085],{"className":89,"code":6084,"language":91,"meta":18,"style":18},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[93,6086,6087,6093,6103,6107],{"__ignoreMap":18},[96,6088,6089,6091],{"class":98,"line":99},[96,6090,1932],{"class":102},[96,6092,1935],{"class":211},[96,6094,6095,6097,6099,6101],{"class":98,"line":19},[96,6096,1940],{"class":102},[96,6098,1943],{"class":102},[96,6100,1947],{"class":1946},[96,6102,1273],{"class":106},[96,6104,6105],{"class":98,"line":1162},[96,6106,5923],{"class":165},[96,6108,6109,6111,6113,6115,6117,6119,6121,6123,6125],{"class":98,"line":1177},[96,6110,5348],{"class":102},[96,6112,5351],{"class":1946},[96,6114,107],{"class":106},[96,6116,110],{"class":102},[96,6118,1381],{"class":5200},[96,6120,485],{"class":106},[96,6122,110],{"class":102},[96,6124,2816],{"class":5200},[96,6126,2702],{"class":106},[14,6128,6129],{},"源文件：swap.cpp",[87,6131,6133],{"className":89,"code":6132,"language":91,"meta":18,"style":18},"#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",[93,6134,6135,6142,6147,6167,6171,6182,6191,6200,6217,6234],{"__ignoreMap":18},[96,6136,6137,6139],{"class":98,"line":99},[96,6138,1932],{"class":102},[96,6140,6141],{"class":211}," \"swap.h\"\n",[96,6143,6144],{"class":98,"line":19},[96,6145,6146],{"class":165},"\u002F\u002F函数的定义\n",[96,6148,6149,6151,6153,6155,6157,6159,6161,6163,6165],{"class":98,"line":1162},[96,6150,5348],{"class":102},[96,6152,5351],{"class":1946},[96,6154,107],{"class":106},[96,6156,110],{"class":102},[96,6158,1381],{"class":5200},[96,6160,485],{"class":106},[96,6162,110],{"class":102},[96,6164,2816],{"class":5200},[96,6166,113],{"class":106},[96,6168,6169],{"class":98,"line":1177},[96,6170,1529],{"class":106},[96,6172,6173,6175,6177,6179],{"class":98,"line":1183},[96,6174,1968],{"class":102},[96,6176,4238],{"class":106},[96,6178,152],{"class":102},[96,6180,6181],{"class":106},"a;\n",[96,6183,6184,6187,6189],{"class":98,"line":1197},[96,6185,6186],{"class":106},"    a",[96,6188,152],{"class":102},[96,6190,6053],{"class":106},[96,6192,6193,6196,6198],{"class":98,"line":1203},[96,6194,6195],{"class":106},"    b",[96,6197,152],{"class":102},[96,6199,4263],{"class":106},[96,6201,6202,6204,6206,6209,6211,6213,6215],{"class":98,"line":1294},[96,6203,1534],{"class":106},[96,6205,1151],{"class":102},[96,6207,6208],{"class":211},"\"a=\"",[96,6210,1151],{"class":102},[96,6212,345],{"class":106},[96,6214,1151],{"class":102},[96,6216,1174],{"class":106},[96,6218,6219,6221,6223,6226,6228,6230,6232],{"class":98,"line":1300},[96,6220,1534],{"class":106},[96,6222,1151],{"class":102},[96,6224,6225],{"class":211},"\"b=\"",[96,6227,1151],{"class":102},[96,6229,370],{"class":106},[96,6231,1151],{"class":102},[96,6233,1174],{"class":106},[96,6235,6236],{"class":98,"line":1312},[96,6237,1548],{"class":106},[5110,6239,6240],{},"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":18,"searchDepth":19,"depth":19,"links":6242},[6243,6244,6245,6246,6247,6248],{"id":5156,"depth":19,"text":5157},{"id":5245,"depth":19,"text":5246},{"id":5328,"depth":19,"text":5329},{"id":5554,"depth":19,"text":5555},{"id":5903,"depth":19,"text":5904},{"id":6060,"depth":19,"text":6061},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5148,"description":18},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6255,"title":6256,"body":6257,"description":6264,"extension":21,"meta":7669,"navigation":23,"path":7670,"seo":7671,"stem":7672,"__hash__":7673},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6258,"toc":7659},[6259,6262,6265,6269,6431,6435,6438,6441,6444,6447,6587,6591,6594,6597,6600,6665,6669,6674,6741,6744,6748,6751,6762,6767,6787,6790,6795,6814,6817,6821,6840,6843,6847,7082,7086,7089,7092,7095,7257,7260,7264,7267,7273,7656],[10,6260,6256],{"id":6261},"_3指针",[14,6263,6264],{},"通过指针保存一个地址，指针就是个地址",[38,6266,6268],{"id":6267},"_31定义指针","3.1定义指针",[87,6270,6272],{"className":89,"code":6271,"language":91,"meta":18,"style":18},"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",[93,6273,6274,6282,6286,6291,6303,6308,6316,6326,6344,6364,6368,6373,6378,6383,6397,6413,6427],{"__ignoreMap":18},[96,6275,6276,6278,6280],{"class":98,"line":99},[96,6277,110],{"class":102},[96,6279,1956],{"class":1946},[96,6281,1959],{"class":106},[96,6283,6284],{"class":98,"line":19},[96,6285,1529],{"class":106},[96,6287,6288],{"class":98,"line":1162},[96,6289,6290],{"class":165},"    \u002F\u002F1.定义指针\n",[96,6292,6293,6295,6297,6299,6301],{"class":98,"line":1177},[96,6294,1968],{"class":102},[96,6296,1381],{"class":106},[96,6298,152],{"class":102},[96,6300,553],{"class":155},[96,6302,1273],{"class":106},[96,6304,6305],{"class":98,"line":1183},[96,6306,6307],{"class":165},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[96,6309,6310,6313],{"class":98,"line":1197},[96,6311,6312],{"class":102},"    int*",[96,6314,6315],{"class":106},"p;\n",[96,6317,6318,6321,6324],{"class":98,"line":1203},[96,6319,6320],{"class":106},"    p",[96,6322,6323],{"class":102},"=&",[96,6325,6181],{"class":106},[96,6327,6328,6330,6332,6335,6338,6340,6342],{"class":98,"line":1294},[96,6329,1534],{"class":106},[96,6331,1151],{"class":102},[96,6333,6334],{"class":211},"\"a的地址为：\"",[96,6336,6337],{"class":102},"\u003C\u003C&",[96,6339,345],{"class":106},[96,6341,1151],{"class":102},[96,6343,1174],{"class":106},[96,6345,6346,6348,6350,6353,6355,6357,6359,6361],{"class":98,"line":1300},[96,6347,1534],{"class":106},[96,6349,1151],{"class":102},[96,6351,6352],{"class":211},"\"指针p为：\"",[96,6354,1151],{"class":102},[96,6356,14],{"class":106},[96,6358,1151],{"class":102},[96,6360,1221],{"class":106},[96,6362,6363],{"class":165},"\u002F\u002F指针p表示的就是a的地址\n",[96,6365,6366],{"class":98,"line":1312},[96,6367,2383],{"emptyLinePlaceholder":23},[96,6369,6370],{"class":98,"line":1595},[96,6371,6372],{"class":165},"    \u002F\u002F2.使用指针\n",[96,6374,6375],{"class":98,"line":1600},[96,6376,6377],{"class":165},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[96,6379,6380],{"class":98,"line":1606},[96,6381,6382],{"class":165},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[96,6384,6385,6388,6390,6392,6395],{"class":98,"line":1611},[96,6386,6387],{"class":102},"    *",[96,6389,14],{"class":106},[96,6391,152],{"class":102},[96,6393,6394],{"class":155},"1000",[96,6396,1273],{"class":106},[96,6398,6399,6401,6404,6406,6408,6410],{"class":98,"line":1625},[96,6400,1534],{"class":106},[96,6402,6403],{"class":102},"\u003C\u003C*",[96,6405,14],{"class":106},[96,6407,1151],{"class":102},[96,6409,1221],{"class":106},[96,6411,6412],{"class":165},"\u002F\u002F1000\n",[96,6414,6415,6417,6419,6421,6423,6425],{"class":98,"line":1630},[96,6416,1534],{"class":106},[96,6418,1151],{"class":102},[96,6420,345],{"class":106},[96,6422,1151],{"class":102},[96,6424,1221],{"class":106},[96,6426,6412],{"class":165},[96,6428,6429],{"class":98,"line":1636},[96,6430,1548],{"class":106},[38,6432,6434],{"id":6433},"_32指针所占的内存空间","3.2指针所占的内存空间",[14,6436,6437],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[14,6439,6440],{},"在32位操作系统下：占用4个字节空间",[14,6442,6443],{},"在64位操作系统下：占用8个字节空间",[14,6445,6446],{},"上方是不管啥数据类型的",[87,6448,6450],{"className":89,"code":6449,"language":91,"meta":18,"style":18},"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",[93,6451,6452,6460,6464,6469,6481,6486,6491,6496,6509,6531,6557,6583],{"__ignoreMap":18},[96,6453,6454,6456,6458],{"class":98,"line":99},[96,6455,110],{"class":102},[96,6457,1956],{"class":1946},[96,6459,1959],{"class":106},[96,6461,6462],{"class":98,"line":19},[96,6463,1529],{"class":106},[96,6465,6466],{"class":98,"line":1162},[96,6467,6468],{"class":165},"    \u002F\u002F指针所占内存空间\n",[96,6470,6471,6473,6475,6477,6479],{"class":98,"line":1177},[96,6472,1968],{"class":102},[96,6474,1381],{"class":106},[96,6476,152],{"class":102},[96,6478,553],{"class":155},[96,6480,1273],{"class":106},[96,6482,6483],{"class":98,"line":1183},[96,6484,6485],{"class":165},"    \u002F\u002Fint *p;\n",[96,6487,6488],{"class":98,"line":1197},[96,6489,6490],{"class":165},"    \u002F\u002Fp=&a;\n",[96,6492,6493],{"class":98,"line":1203},[96,6494,6495],{"class":165},"    \u002F\u002F上述可以写为以下：\n",[96,6497,6498,6500,6503,6505,6507],{"class":98,"line":1294},[96,6499,1968],{"class":102},[96,6501,6502],{"class":102}," *",[96,6504,14],{"class":106},[96,6506,6323],{"class":102},[96,6508,6181],{"class":106},[96,6510,6511,6514,6516,6519,6521,6524,6526,6528],{"class":98,"line":1300},[96,6512,6513],{"class":106},"    cout ",[96,6515,1151],{"class":102},[96,6517,6518],{"class":211},"\"sizeof(int *)\"",[96,6520,1355],{"class":102},[96,6522,6523],{"class":106},"(p)",[96,6525,1151],{"class":102},[96,6527,1221],{"class":106},[96,6529,6530],{"class":165},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[96,6532,6533,6535,6537,6539,6541,6543,6545,6547,6549,6551,6554],{"class":98,"line":1312},[96,6534,6513],{"class":106},[96,6536,1151],{"class":102},[96,6538,6518],{"class":211},[96,6540,1355],{"class":102},[96,6542,107],{"class":106},[96,6544,110],{"class":102},[96,6546,6502],{"class":102},[96,6548,536],{"class":106},[96,6550,1151],{"class":102},[96,6552,6553],{"class":106},"endl",[96,6555,6556],{"class":165},"  \u002F\u002F4字节(32位的话)\n",[96,6558,6559,6561,6563,6566,6568,6570,6572,6574,6576,6578,6580],{"class":98,"line":1595},[96,6560,6513],{"class":106},[96,6562,1151],{"class":102},[96,6564,6565],{"class":211},"\"sizeof(char *)\"",[96,6567,1355],{"class":102},[96,6569,107],{"class":106},[96,6571,203],{"class":102},[96,6573,6502],{"class":102},[96,6575,536],{"class":106},[96,6577,1151],{"class":102},[96,6579,1221],{"class":106},[96,6581,6582],{"class":165}," \u002F\u002F4字节(32位的话)\n",[96,6584,6585],{"class":98,"line":1600},[96,6586,1548],{"class":106},[38,6588,6590],{"id":6589},"_33空指针","3.3空指针",[14,6592,6593],{},"空指针：指针变量指向内存中编号为0的空间",[14,6595,6596],{},"用途：初始化指针变量",[14,6598,6599],{},"注意：空指针指向的内存是不可以访问的",[87,6601,6603],{"className":89,"code":6602,"language":91,"meta":18,"style":18},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[93,6604,6605,6613,6617,6622,6636,6641,6656,6661],{"__ignoreMap":18},[96,6606,6607,6609,6611],{"class":98,"line":99},[96,6608,110],{"class":102},[96,6610,1956],{"class":1946},[96,6612,1959],{"class":106},[96,6614,6615],{"class":98,"line":19},[96,6616,1529],{"class":106},[96,6618,6619],{"class":98,"line":1162},[96,6620,6621],{"class":165},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[96,6623,6624,6626,6628,6630,6632,6634],{"class":98,"line":1177},[96,6625,1968],{"class":102},[96,6627,6502],{"class":102},[96,6629,14],{"class":106},[96,6631,152],{"class":102},[96,6633,2375],{"class":155},[96,6635,1273],{"class":106},[96,6637,6638],{"class":98,"line":1183},[96,6639,6640],{"class":165},"    \u002F\u002F2.空指针不能进行访问\n",[96,6642,6643,6645,6647,6649,6651,6653],{"class":98,"line":1197},[96,6644,6387],{"class":102},[96,6646,14],{"class":106},[96,6648,152],{"class":102},[96,6650,418],{"class":155},[96,6652,162],{"class":106},[96,6654,6655],{"class":165},"\u002F\u002F直接报错，压根不能访问\n",[96,6657,6658],{"class":98,"line":1203},[96,6659,6660],{"class":165},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[96,6662,6663],{"class":98,"line":1294},[96,6664,1548],{"class":106},[38,6666,6668],{"id":6667},"_34野指针","3.4野指针",[14,6670,6671],{},[256,6672,6673],{},"指针变量指向非法的内存空间",[87,6675,6677],{"className":89,"code":6676,"language":91,"meta":18,"style":18},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[93,6678,6679,6687,6691,6720,6725,6737],{"__ignoreMap":18},[96,6680,6681,6683,6685],{"class":98,"line":99},[96,6682,110],{"class":102},[96,6684,1956],{"class":1946},[96,6686,1959],{"class":106},[96,6688,6689],{"class":98,"line":19},[96,6690,1529],{"class":106},[96,6692,6693,6695,6697,6699,6701,6703,6705,6707,6709,6712,6715,6717],{"class":98,"line":1162},[96,6694,1968],{"class":102},[96,6696,6502],{"class":102},[96,6698,14],{"class":106},[96,6700,152],{"class":102},[96,6702,107],{"class":106},[96,6704,110],{"class":102},[96,6706,6502],{"class":102},[96,6708,536],{"class":106},[96,6710,6711],{"class":102},"0x",[96,6713,6714],{"class":155},"1100",[96,6716,162],{"class":106},[96,6718,6719],{"class":165}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[96,6721,6722],{"class":98,"line":1177},[96,6723,6724],{"class":165},"    \u002F\u002F访问野指针报错\n",[96,6726,6727,6729,6731,6733,6735],{"class":98,"line":1183},[96,6728,1534],{"class":106},[96,6730,6403],{"class":102},[96,6732,14],{"class":106},[96,6734,1151],{"class":102},[96,6736,1174],{"class":106},[96,6738,6739],{"class":98,"line":1197},[96,6740,1548],{"class":106},[14,6742,6743],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[38,6745,6747],{"id":6746},"_35const修饰指针","3.5const修饰指针",[14,6749,6750],{},"三种情况：",[1114,6752,6753,6756,6759],{},[53,6754,6755],{},"const修饰指针 常量指针",[53,6757,6758],{},"const修饰常量 指针常量",[53,6760,6761],{},"const即修饰指针，又修饰常量",[50,6763,6764],{},[53,6765,6766],{},"常量指针",[87,6768,6770],{"className":89,"code":6769,"language":91,"meta":18,"style":18},"const int *p=&a;\n",[93,6771,6772],{"__ignoreMap":18},[96,6773,6774,6777,6779,6781,6783,6785],{"class":98,"line":99},[96,6775,6776],{"class":102},"const",[96,6778,2365],{"class":102},[96,6780,6502],{"class":102},[96,6782,14],{"class":106},[96,6784,6323],{"class":102},[96,6786,6181],{"class":106},[14,6788,6789],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[50,6791,6792],{"start":19},[53,6793,6794],{},"指针常量",[87,6796,6798],{"className":89,"code":6797,"language":91,"meta":18,"style":18},"int *const p=&a;\n",[93,6799,6800],{"__ignoreMap":18},[96,6801,6802,6804,6807,6810,6812],{"class":98,"line":99},[96,6803,110],{"class":102},[96,6805,6806],{"class":102}," *const",[96,6808,6809],{"class":106}," p",[96,6811,6323],{"class":102},[96,6813,6181],{"class":106},[14,6815,6816],{},"指针的指向不可以改，指针指向的值可以改",[50,6818,6819],{"start":1162},[53,6820,6761],{},[87,6822,6824],{"className":89,"code":6823,"language":91,"meta":18,"style":18},"const int *const p=&a;\n",[93,6825,6826],{"__ignoreMap":18},[96,6827,6828,6830,6832,6834,6836,6838],{"class":98,"line":99},[96,6829,6776],{"class":102},[96,6831,2365],{"class":102},[96,6833,6806],{"class":102},[96,6835,6809],{"class":106},[96,6837,6323],{"class":102},[96,6839,6181],{"class":106},[14,6841,6842],{},"指针的指向和指针指向的值都不可以改变",[38,6844,6846],{"id":6845},"_36指针和数组","3.6指针和数组",[87,6848,6850],{"className":89,"code":6849,"language":91,"meta":18,"style":18},"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",[93,6851,6852,6860,6864,6869,6923,6944,6960,6976,6987,7004,7009,7023,7049,7053,7065,7074,7078],{"__ignoreMap":18},[96,6853,6854,6856,6858],{"class":98,"line":99},[96,6855,110],{"class":102},[96,6857,1956],{"class":1946},[96,6859,1959],{"class":106},[96,6861,6862],{"class":98,"line":19},[96,6863,1529],{"class":106},[96,6865,6866],{"class":98,"line":1162},[96,6867,6868],{"class":165},"    \u002F\u002F利用指针访问数组中的元素\n",[96,6870,6871,6873,6875,6877,6879,6881,6883,6885,6887,6889,6891,6893,6895,6897,6899,6901,6903,6905,6907,6909,6911,6913,6915,6917,6919,6921],{"class":98,"line":1177},[96,6872,1968],{"class":102},[96,6874,3945],{"class":106},[96,6876,553],{"class":155},[96,6878,1047],{"class":106},[96,6880,152],{"class":102},[96,6882,1003],{"class":106},[96,6884,324],{"class":155},[96,6886,485],{"class":106},[96,6888,184],{"class":155},[96,6890,485],{"class":106},[96,6892,178],{"class":155},[96,6894,485],{"class":106},[96,6896,400],{"class":155},[96,6898,485],{"class":106},[96,6900,426],{"class":155},[96,6902,485],{"class":106},[96,6904,451],{"class":155},[96,6906,485],{"class":106},[96,6908,476],{"class":155},[96,6910,485],{"class":106},[96,6912,502],{"class":155},[96,6914,485],{"class":106},[96,6916,527],{"class":155},[96,6918,485],{"class":106},[96,6920,553],{"class":155},[96,6922,3978],{"class":106},[96,6924,6925,6927,6929,6932,6934,6936,6938,6940,6942],{"class":98,"line":1183},[96,6926,1534],{"class":106},[96,6928,1151],{"class":102},[96,6930,6931],{"class":211},"\"数组的第一个元素为：\"",[96,6933,1151],{"class":102},[96,6935,3889],{"class":106},[96,6937,298],{"class":155},[96,6939,1047],{"class":106},[96,6941,1151],{"class":102},[96,6943,1174],{"class":106},[96,6945,6946,6948,6950,6952,6954,6957],{"class":98,"line":1197},[96,6947,1968],{"class":102},[96,6949,6502],{"class":102},[96,6951,14],{"class":106},[96,6953,152],{"class":102},[96,6955,6956],{"class":106},"arr;",[96,6958,6959],{"class":165},"\u002F\u002F注意数才要加取地址符号&\n",[96,6961,6962,6964,6966,6968,6970,6972,6974],{"class":98,"line":1203},[96,6963,1534],{"class":106},[96,6965,1151],{"class":102},[96,6967,6931],{"class":211},[96,6969,6403],{"class":102},[96,6971,14],{"class":106},[96,6973,1151],{"class":102},[96,6975,1174],{"class":106},[96,6977,6978,6980,6982,6984],{"class":98,"line":1294},[96,6979,6320],{"class":106},[96,6981,2275],{"class":102},[96,6983,162],{"class":106},[96,6985,6986],{"class":165}," \u002F\u002F让指针向后偏移4个字节\n",[96,6988,6989,6991,6993,6996,6998,7000,7002],{"class":98,"line":1300},[96,6990,1534],{"class":106},[96,6992,1151],{"class":102},[96,6994,6995],{"class":211},"\"数组的第二个元素为：\"",[96,6997,6403],{"class":102},[96,6999,14],{"class":106},[96,7001,1151],{"class":102},[96,7003,1174],{"class":106},[96,7005,7006],{"class":98,"line":1312},[96,7007,7008],{"class":165},"    \u002F\u002F利用指针遍历数组\n",[96,7010,7011,7013,7015,7018,7020],{"class":98,"line":1595},[96,7012,1968],{"class":102},[96,7014,6502],{"class":102},[96,7016,7017],{"class":106},"p2",[96,7019,152],{"class":102},[96,7021,7022],{"class":106},"arr;\n",[96,7024,7025,7027,7029,7031,7033,7035,7037,7039,7041,7043,7045,7047],{"class":98,"line":1600},[96,7026,3184],{"class":102},[96,7028,1641],{"class":106},[96,7030,110],{"class":102},[96,7032,3015],{"class":106},[96,7034,152],{"class":102},[96,7036,298],{"class":155},[96,7038,3022],{"class":106},[96,7040,1017],{"class":102},[96,7042,553],{"class":155},[96,7044,3022],{"class":106},[96,7046,2275],{"class":102},[96,7048,113],{"class":106},[96,7050,7051],{"class":98,"line":1606},[96,7052,2013],{"class":106},[96,7054,7055,7057,7059,7061,7063],{"class":98,"line":1611},[96,7056,3434],{"class":106},[96,7058,6403],{"class":102},[96,7060,7017],{"class":106},[96,7062,1151],{"class":102},[96,7064,1174],{"class":106},[96,7066,7067,7070,7072],{"class":98,"line":1625},[96,7068,7069],{"class":106},"        p2",[96,7071,2275],{"class":102},[96,7073,1273],{"class":106},[96,7075,7076],{"class":98,"line":1630},[96,7077,2170],{"class":106},[96,7079,7080],{"class":98,"line":1636},[96,7081,1548],{"class":106},[38,7083,7085],{"id":7084},"_37指针和函数","3.7指针和函数",[14,7087,7088],{},"利用指针做函数参数，可以修改实参的值",[14,7090,7091],{},"值传递：只改变形参，不改变实参",[14,7093,7094],{},"地址传递：",[87,7096,7098],{"className":89,"code":7097,"language":91,"meta":18,"style":18},"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",[93,7099,7100,7125,7129,7141,7152,7162,7166,7174,7178,7190,7202,7207,7223,7238,7253],{"__ignoreMap":18},[96,7101,7102,7104,7106,7108,7110,7112,7115,7117,7119,7121,7123],{"class":98,"line":99},[96,7103,5348],{"class":102},[96,7105,5351],{"class":1946},[96,7107,107],{"class":106},[96,7109,110],{"class":102},[96,7111,6502],{"class":102},[96,7113,7114],{"class":5200},"p1",[96,7116,485],{"class":106},[96,7118,110],{"class":102},[96,7120,6502],{"class":102},[96,7122,7017],{"class":5200},[96,7124,113],{"class":106},[96,7126,7127],{"class":98,"line":19},[96,7128,1529],{"class":106},[96,7130,7131,7133,7135,7138],{"class":98,"line":1162},[96,7132,1968],{"class":102},[96,7134,4238],{"class":106},[96,7136,7137],{"class":102},"=*",[96,7139,7140],{"class":106},"p1;\n",[96,7142,7143,7145,7147,7149],{"class":98,"line":1177},[96,7144,6387],{"class":102},[96,7146,7114],{"class":106},[96,7148,7137],{"class":102},[96,7150,7151],{"class":106},"p2;\n",[96,7153,7154,7156,7158,7160],{"class":98,"line":1183},[96,7155,6387],{"class":102},[96,7157,7017],{"class":106},[96,7159,152],{"class":102},[96,7161,4263],{"class":106},[96,7163,7164],{"class":98,"line":1197},[96,7165,1548],{"class":106},[96,7167,7168,7170,7172],{"class":98,"line":1203},[96,7169,110],{"class":102},[96,7171,1956],{"class":1946},[96,7173,1959],{"class":106},[96,7175,7176],{"class":98,"line":1294},[96,7177,1529],{"class":106},[96,7179,7180,7182,7184,7186,7188],{"class":98,"line":1300},[96,7181,1968],{"class":102},[96,7183,1381],{"class":106},[96,7185,152],{"class":102},[96,7187,553],{"class":155},[96,7189,1273],{"class":106},[96,7191,7192,7194,7196,7198,7200],{"class":98,"line":1312},[96,7193,1968],{"class":102},[96,7195,2816],{"class":106},[96,7197,152],{"class":102},[96,7199,807],{"class":155},[96,7201,1273],{"class":106},[96,7203,7204],{"class":98,"line":1595},[96,7205,7206],{"class":165},"    \u002F\u002F地址传递\n",[96,7208,7209,7211,7213,7215,7218,7220],{"class":98,"line":1600},[96,7210,5545],{"class":1946},[96,7212,107],{"class":106},[96,7214,460],{"class":102},[96,7216,7217],{"class":106},"a,",[96,7219,460],{"class":102},[96,7221,7222],{"class":106},"b);\n",[96,7224,7225,7227,7229,7231,7233,7235],{"class":98,"line":1606},[96,7226,1534],{"class":106},[96,7228,1151],{"class":102},[96,7230,345],{"class":106},[96,7232,1151],{"class":102},[96,7234,1221],{"class":106},[96,7236,7237],{"class":165},"\u002F\u002F20\n",[96,7239,7240,7242,7244,7246,7248,7250],{"class":98,"line":1611},[96,7241,1534],{"class":106},[96,7243,1151],{"class":102},[96,7245,370],{"class":106},[96,7247,1151],{"class":102},[96,7249,1221],{"class":106},[96,7251,7252],{"class":165},"\u002F\u002F10\n",[96,7254,7255],{"class":98,"line":1625},[96,7256,1548],{"class":106},[14,7258,7259],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[38,7261,7263],{"id":7262},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[14,7265,7266],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[14,7268,7269,7270,7272],{},"例如数组：int arr",[96,7271,553],{},"={4,3,6,9,1,2,10,8,7,5}",[87,7274,7276],{"className":89,"code":7275,"language":91,"meta":18,"style":18},"#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",[93,7277,7278,7284,7294,7318,7322,7353,7357,7391,7395,7413,7417,7428,7443,7458,7462,7466,7470,7474,7478,7486,7490,7495,7549,7561,7573,7578,7586,7590,7595,7620,7624,7639,7648,7652],{"__ignoreMap":18},[96,7279,7280,7282],{"class":98,"line":99},[96,7281,1932],{"class":102},[96,7283,1935],{"class":211},[96,7285,7286,7288,7290,7292],{"class":98,"line":19},[96,7287,1940],{"class":102},[96,7289,1943],{"class":102},[96,7291,1947],{"class":1946},[96,7293,1273],{"class":106},[96,7295,7296,7298,7301,7303,7305,7307,7309,7311,7313,7316],{"class":98,"line":1162},[96,7297,5348],{"class":102},[96,7299,7300],{"class":1946}," bubbleSort",[96,7302,107],{"class":106},[96,7304,110],{"class":102},[96,7306,6502],{"class":102},[96,7308,14],{"class":5200},[96,7310,485],{"class":106},[96,7312,110],{"class":102},[96,7314,7315],{"class":5200}," len",[96,7317,113],{"class":106},[96,7319,7320],{"class":98,"line":1177},[96,7321,1529],{"class":106},[96,7323,7324,7326,7328,7330,7332,7334,7336,7338,7340,7343,7345,7347,7349,7351],{"class":98,"line":1183},[96,7325,3184],{"class":102},[96,7327,107],{"class":106},[96,7329,110],{"class":102},[96,7331,3015],{"class":106},[96,7333,152],{"class":102},[96,7335,298],{"class":155},[96,7337,3022],{"class":106},[96,7339,1017],{"class":102},[96,7341,7342],{"class":106},"len",[96,7344,639],{"class":102},[96,7346,324],{"class":155},[96,7348,3022],{"class":106},[96,7350,2275],{"class":102},[96,7352,113],{"class":106},[96,7354,7355],{"class":98,"line":1197},[96,7356,2013],{"class":106},[96,7358,7359,7361,7363,7365,7367,7369,7371,7373,7375,7377,7379,7381,7383,7385,7387,7389],{"class":98,"line":1203},[96,7360,3386],{"class":102},[96,7362,107],{"class":106},[96,7364,110],{"class":102},[96,7366,3393],{"class":106},[96,7368,152],{"class":102},[96,7370,298],{"class":155},[96,7372,3400],{"class":106},[96,7374,1017],{"class":102},[96,7376,7342],{"class":106},[96,7378,639],{"class":102},[96,7380,548],{"class":106},[96,7382,639],{"class":102},[96,7384,324],{"class":155},[96,7386,3400],{"class":106},[96,7388,2275],{"class":102},[96,7390,113],{"class":106},[96,7392,7393],{"class":98,"line":1294},[96,7394,2493],{"class":106},[96,7396,7397,7399,7402,7404,7407,7409,7411],{"class":98,"line":1300},[96,7398,4625],{"class":102},[96,7400,7401],{"class":106},"(p[j]",[96,7403,1067],{"class":102},[96,7405,7406],{"class":106},"p[j",[96,7408,588],{"class":102},[96,7410,324],{"class":155},[96,7412,4640],{"class":106},[96,7414,7415],{"class":98,"line":1312},[96,7416,4645],{"class":106},[96,7418,7419,7421,7423,7425],{"class":98,"line":1595},[96,7420,4650],{"class":102},[96,7422,4238],{"class":106},[96,7424,152],{"class":102},[96,7426,7427],{"class":106},"p[j];\n",[96,7429,7430,7433,7435,7437,7439,7441],{"class":98,"line":1600},[96,7431,7432],{"class":106},"                p[j]",[96,7434,152],{"class":102},[96,7436,7406],{"class":106},[96,7438,588],{"class":102},[96,7440,324],{"class":155},[96,7442,4673],{"class":106},[96,7444,7445,7448,7450,7452,7454,7456],{"class":98,"line":1606},[96,7446,7447],{"class":106},"                p[j",[96,7449,588],{"class":102},[96,7451,324],{"class":155},[96,7453,1047],{"class":106},[96,7455,152],{"class":102},[96,7457,4263],{"class":106},[96,7459,7460],{"class":98,"line":1611},[96,7461,4693],{"class":106},[96,7463,7464],{"class":98,"line":1625},[96,7465,2512],{"class":106},[96,7467,7468],{"class":98,"line":1630},[96,7469,2170],{"class":106},[96,7471,7472],{"class":98,"line":1636},[96,7473,1548],{"class":106},[96,7475,7476],{"class":98,"line":1657},[96,7477,2383],{"emptyLinePlaceholder":23},[96,7479,7480,7482,7484],{"class":98,"line":1662},[96,7481,110],{"class":102},[96,7483,1956],{"class":1946},[96,7485,1959],{"class":106},[96,7487,7488],{"class":98,"line":1676},[96,7489,1529],{"class":106},[96,7491,7492],{"class":98,"line":1681},[96,7493,7494],{"class":165},"    \u002F\u002F 1.创建数组\n",[96,7496,7497,7499,7501,7503,7505,7507,7509,7511,7513,7515,7517,7519,7521,7523,7525,7527,7529,7531,7533,7535,7537,7539,7541,7543,7545,7547],{"class":98,"line":1710},[96,7498,1968],{"class":102},[96,7500,3945],{"class":106},[96,7502,553],{"class":155},[96,7504,1047],{"class":106},[96,7506,152],{"class":102},[96,7508,1003],{"class":106},[96,7510,400],{"class":155},[96,7512,485],{"class":106},[96,7514,178],{"class":155},[96,7516,485],{"class":106},[96,7518,451],{"class":155},[96,7520,485],{"class":106},[96,7522,527],{"class":155},[96,7524,485],{"class":106},[96,7526,324],{"class":155},[96,7528,485],{"class":106},[96,7530,184],{"class":155},[96,7532,485],{"class":106},[96,7534,553],{"class":155},[96,7536,485],{"class":106},[96,7538,502],{"class":155},[96,7540,485],{"class":106},[96,7542,476],{"class":155},[96,7544,485],{"class":106},[96,7546,426],{"class":155},[96,7548,3978],{"class":106},[96,7550,7551,7553,7555,7557,7559],{"class":98,"line":1715},[96,7552,1968],{"class":102},[96,7554,7315],{"class":106},[96,7556,152],{"class":102},[96,7558,553],{"class":155},[96,7560,1273],{"class":106},[96,7562,7563,7565,7567,7569,7571],{"class":98,"line":1732},[96,7564,1968],{"class":102},[96,7566,6502],{"class":102},[96,7568,14],{"class":106},[96,7570,152],{"class":102},[96,7572,7022],{"class":106},[96,7574,7575],{"class":98,"line":1737},[96,7576,7577],{"class":165},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[96,7579,7580,7583],{"class":98,"line":1742},[96,7581,7582],{"class":1946},"    bubbleSort",[96,7584,7585],{"class":106},"(p,len);\n",[96,7587,7588],{"class":98,"line":1747},[96,7589,2383],{"emptyLinePlaceholder":23},[96,7591,7592],{"class":98,"line":1761},[96,7593,7594],{"class":165},"    \u002F\u002F 3.打印排序后的数组\n",[96,7596,7597,7599,7601,7603,7605,7607,7609,7611,7613,7616,7618],{"class":98,"line":1766},[96,7598,3184],{"class":102},[96,7600,1641],{"class":106},[96,7602,110],{"class":102},[96,7604,3015],{"class":106},[96,7606,152],{"class":102},[96,7608,298],{"class":155},[96,7610,3197],{"class":106},[96,7612,1017],{"class":102},[96,7614,7615],{"class":106},"len; i",[96,7617,2275],{"class":102},[96,7619,113],{"class":106},[96,7621,7622],{"class":98,"line":2560},[96,7623,2013],{"class":106},[96,7625,7626,7628,7630,7632,7634,7637],{"class":98,"line":2574},[96,7627,3434],{"class":106},[96,7629,6403],{"class":102},[96,7631,14],{"class":106},[96,7633,1151],{"class":102},[96,7635,7636],{"class":211},"\"\"",[96,7638,1273],{"class":106},[96,7640,7641,7644,7646],{"class":98,"line":2582},[96,7642,7643],{"class":106},"        p",[96,7645,2275],{"class":102},[96,7647,1273],{"class":106},[96,7649,7650],{"class":98,"line":2587},[96,7651,2170],{"class":106},[96,7653,7654],{"class":98,"line":2593},[96,7655,1548],{"class":106},[5110,7657,7658],{},"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":18,"searchDepth":19,"depth":19,"links":7660},[7661,7662,7663,7664,7665,7666,7667,7668],{"id":6267,"depth":19,"text":6268},{"id":6433,"depth":19,"text":6434},{"id":6589,"depth":19,"text":6590},{"id":6667,"depth":19,"text":6668},{"id":6746,"depth":19,"text":6747},{"id":6845,"depth":19,"text":6846},{"id":7084,"depth":19,"text":7085},{"id":7262,"depth":19,"text":7263},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6256,"description":6264},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7675,"title":7676,"body":7677,"description":7684,"extension":21,"meta":10658,"navigation":23,"path":10659,"seo":10660,"stem":10661,"__hash__":10662},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7678,"toc":10649},[7679,7682,7685,7689,7692,7695,7706,8044,8047,8051,8054,8061,8316,8320,8323,8326,8481,8485,8488,8491,8697,8701,8704,9007,9010,9018,9022,9025,9176,9178,9189,9246,9250,9255,9912,9920,9923,10017,10020,10640,10646],[10,7680,7676],{"id":7681},"_4结构体",[14,7683,7684],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[38,7686,7688],{"id":7687},"_41结构体定义与使用","4.1结构体定义与使用",[14,7690,7691],{},"语法：struct 结构体名 {结构体成员列表}；",[14,7693,7694],{},"通过结构体创建变量的方式：",[1114,7696,7697,7700,7703],{},[53,7698,7699],{},"struct 结构体名 变量名",[53,7701,7702],{},"struct 结构体名 变量名={成员1值，成员2值...}",[53,7704,7705],{},"定义结构体时顺便创建变量",[87,7707,7709],{"className":89,"code":7708,"language":91,"meta":18,"style":18},"#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",[93,7710,7711,7717,7727,7734,7739,7747,7751,7756,7760,7765,7770,7775,7782,7787,7794,7798,7805,7809,7813,7817,7821,7825,7829,7835,7839,7845,7853,7861,7865,7870,7875,7886,7891,7903,7914,7925,7930,7954,7959,7965,7992,7997,8003,8015,8027,8039],{"__ignoreMap":18},[96,7712,7713,7715],{"class":98,"line":99},[96,7714,1932],{"class":102},[96,7716,1935],{"class":211},[96,7718,7719,7721,7723,7725],{"class":98,"line":19},[96,7720,1940],{"class":102},[96,7722,1943],{"class":102},[96,7724,1947],{"class":1946},[96,7726,1273],{"class":106},[96,7728,7729,7731],{"class":98,"line":1162},[96,7730,1932],{"class":102},[96,7732,7733],{"class":211},"\u003Cstring>\n",[96,7735,7736],{"class":98,"line":1177},[96,7737,7738],{"class":165},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[96,7740,7741,7744],{"class":98,"line":1183},[96,7742,7743],{"class":102},"struct",[96,7745,7746],{"class":1946}," Student\n",[96,7748,7749],{"class":98,"line":1197},[96,7750,1529],{"class":106},[96,7752,7753],{"class":98,"line":1203},[96,7754,7755],{"class":165},"    \u002F\u002F成员列表\n",[96,7757,7758],{"class":98,"line":1294},[96,7759,2383],{"emptyLinePlaceholder":23},[96,7761,7762],{"class":98,"line":1300},[96,7763,7764],{"class":165},"    \u002F\u002F姓名\n",[96,7766,7767],{"class":98,"line":1312},[96,7768,7769],{"class":106},"    string name;\n",[96,7771,7772],{"class":98,"line":1595},[96,7773,7774],{"class":165},"    \u002F\u002F年龄\n",[96,7776,7777,7779],{"class":98,"line":1600},[96,7778,1968],{"class":102},[96,7780,7781],{"class":106}," age;\n",[96,7783,7784],{"class":98,"line":1606},[96,7785,7786],{"class":165},"    \u002F\u002F分数\n",[96,7788,7789,7791],{"class":98,"line":1611},[96,7790,1968],{"class":102},[96,7792,7793],{"class":106}," score;\n",[96,7795,7796],{"class":98,"line":1625},[96,7797,3978],{"class":106},[96,7799,7800,7802],{"class":98,"line":1630},[96,7801,7743],{"class":102},[96,7803,7804],{"class":1946}," School\n",[96,7806,7807],{"class":98,"line":1636},[96,7808,1529],{"class":106},[96,7810,7811],{"class":98,"line":1657},[96,7812,7755],{"class":165},[96,7814,7815],{"class":98,"line":1662},[96,7816,2383],{"emptyLinePlaceholder":23},[96,7818,7819],{"class":98,"line":1676},[96,7820,7764],{"class":165},[96,7822,7823],{"class":98,"line":1681},[96,7824,7769],{"class":106},[96,7826,7827],{"class":98,"line":1710},[96,7828,7774],{"class":165},[96,7830,7831,7833],{"class":98,"line":1715},[96,7832,1968],{"class":102},[96,7834,7781],{"class":106},[96,7836,7837],{"class":98,"line":1732},[96,7838,7786],{"class":165},[96,7840,7841,7843],{"class":98,"line":1737},[96,7842,1968],{"class":102},[96,7844,7793],{"class":106},[96,7846,7847,7850],{"class":98,"line":1742},[96,7848,7849],{"class":106},"} s3;",[96,7851,7852],{"class":165}," \u002F\u002F创建结构体时就创建了变量\n",[96,7854,7855,7857,7859],{"class":98,"line":1747},[96,7856,110],{"class":102},[96,7858,1956],{"class":1946},[96,7860,1959],{"class":106},[96,7862,7863],{"class":98,"line":1761},[96,7864,1529],{"class":106},[96,7866,7867],{"class":98,"line":1766},[96,7868,7869],{"class":165},"    \u002F\u002F2.通过学生类型创建具体学生\n",[96,7871,7872],{"class":98,"line":2560},[96,7873,7874],{"class":165},"    \u002F\u002F2.1 struct Student s1;\n",[96,7876,7877,7880,7883],{"class":98,"line":2574},[96,7878,7879],{"class":102},"    struct",[96,7881,7882],{"class":1946}," Student",[96,7884,7885],{"class":106}," s1;\n",[96,7887,7888],{"class":98,"line":2582},[96,7889,7890],{"class":165},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[96,7892,7893,7896,7898,7901],{"class":98,"line":2587},[96,7894,7895],{"class":106},"    s1.name",[96,7897,152],{"class":102},[96,7899,7900],{"class":211},"\"张三\"",[96,7902,1273],{"class":106},[96,7904,7905,7908,7910,7912],{"class":98,"line":2593},[96,7906,7907],{"class":106},"    s1.age",[96,7909,152],{"class":102},[96,7911,757],{"class":155},[96,7913,1273],{"class":106},[96,7915,7916,7919,7921,7923],{"class":98,"line":2599},[96,7917,7918],{"class":106},"    s1.score",[96,7920,152],{"class":102},[96,7922,361],{"class":155},[96,7924,1273],{"class":106},[96,7926,7927],{"class":98,"line":2604},[96,7928,7929],{"class":165},"    \u002F\u002F输出结果\n",[96,7931,7933,7935,7937,7940,7942,7945,7947,7950,7952],{"class":98,"line":7932},37,[96,7934,1534],{"class":106},[96,7936,1151],{"class":102},[96,7938,7939],{"class":106},"s1.name",[96,7941,1151],{"class":102},[96,7943,7944],{"class":106},"s1.age",[96,7946,1151],{"class":102},[96,7948,7949],{"class":106},"s1.score",[96,7951,1151],{"class":102},[96,7953,1174],{"class":106},[96,7955,7957],{"class":98,"line":7956},38,[96,7958,2383],{"emptyLinePlaceholder":23},[96,7960,7962],{"class":98,"line":7961},39,[96,7963,7964],{"class":165},"    \u002F\u002F2.2 struct Student s2={...}\n",[96,7966,7968,7970,7972,7975,7977,7979,7982,7984,7986,7988,7990],{"class":98,"line":7967},40,[96,7969,7879],{"class":102},[96,7971,7882],{"class":1946},[96,7973,7974],{"class":106}," s2",[96,7976,152],{"class":102},[96,7978,1003],{"class":106},[96,7980,7981],{"class":211},"\"王五\"",[96,7983,485],{"class":106},[96,7985,757],{"class":155},[96,7987,485],{"class":106},[96,7989,361],{"class":155},[96,7991,3978],{"class":106},[96,7993,7995],{"class":98,"line":7994},41,[96,7996,2383],{"emptyLinePlaceholder":23},[96,7998,8000],{"class":98,"line":7999},42,[96,8001,8002],{"class":165},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[96,8004,8006,8009,8011,8013],{"class":98,"line":8005},43,[96,8007,8008],{"class":106},"    s3.name",[96,8010,152],{"class":102},[96,8012,3661],{"class":211},[96,8014,1273],{"class":106},[96,8016,8018,8021,8023,8025],{"class":98,"line":8017},44,[96,8019,8020],{"class":106},"    s3.age",[96,8022,152],{"class":102},[96,8024,757],{"class":155},[96,8026,1273],{"class":106},[96,8028,8030,8033,8035,8037],{"class":98,"line":8029},45,[96,8031,8032],{"class":106},"    s3.score",[96,8034,152],{"class":102},[96,8036,807],{"class":155},[96,8038,1273],{"class":106},[96,8040,8042],{"class":98,"line":8041},46,[96,8043,1548],{"class":106},[14,8045,8046],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[38,8048,8050],{"id":8049},"_42结构体数组","4.2结构体数组",[14,8052,8053],{},"将自定义的结构体放入到数组中方便维护",[14,8055,8056,8057,8060],{},"语法：struct 结构体名 数组名",[96,8058,8059],{},"元素个数","={ {}，{},...{} };",[87,8062,8064],{"className":89,"code":8063,"language":91,"meta":18,"style":18},"#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",[93,8065,8066,8072,8082,8088,8093,8099,8103,8107,8113,8119,8123,8127,8135,8139,8144,8159,8163,8179,8195,8199,8204,8220,8235,8250,8255,8281,8285,8308,8312],{"__ignoreMap":18},[96,8067,8068,8070],{"class":98,"line":99},[96,8069,1932],{"class":102},[96,8071,1935],{"class":211},[96,8073,8074,8076,8078,8080],{"class":98,"line":19},[96,8075,1940],{"class":102},[96,8077,1943],{"class":102},[96,8079,1947],{"class":1946},[96,8081,1273],{"class":106},[96,8083,8084,8086],{"class":98,"line":1162},[96,8085,1932],{"class":102},[96,8087,7733],{"class":211},[96,8089,8090],{"class":98,"line":1177},[96,8091,8092],{"class":165},"\u002F\u002F1.定义结构体\n",[96,8094,8095,8097],{"class":98,"line":1183},[96,8096,7743],{"class":102},[96,8098,7746],{"class":1946},[96,8100,8101],{"class":98,"line":1197},[96,8102,1529],{"class":106},[96,8104,8105],{"class":98,"line":1203},[96,8106,7769],{"class":106},[96,8108,8109,8111],{"class":98,"line":1294},[96,8110,1968],{"class":102},[96,8112,7781],{"class":106},[96,8114,8115,8117],{"class":98,"line":1300},[96,8116,1968],{"class":102},[96,8118,7793],{"class":106},[96,8120,8121],{"class":98,"line":1312},[96,8122,2383],{"emptyLinePlaceholder":23},[96,8124,8125],{"class":98,"line":1595},[96,8126,3978],{"class":106},[96,8128,8129,8131,8133],{"class":98,"line":1600},[96,8130,110],{"class":102},[96,8132,1956],{"class":1946},[96,8134,1959],{"class":106},[96,8136,8137],{"class":98,"line":1606},[96,8138,1529],{"class":106},[96,8140,8141],{"class":98,"line":1611},[96,8142,8143],{"class":165},"    \u002F\u002F2.创建结构体数组\n",[96,8145,8146,8148,8150,8153,8155,8157],{"class":98,"line":1625},[96,8147,7879],{"class":102},[96,8149,7882],{"class":1946},[96,8151,8152],{"class":106}," stuArray[",[96,8154,184],{"class":155},[96,8156,1047],{"class":106},[96,8158,4891],{"class":102},[96,8160,8161],{"class":98,"line":1630},[96,8162,2013],{"class":106},[96,8164,8165,8167,8169,8171,8173,8175,8177],{"class":98,"line":1636},[96,8166,4900],{"class":106},[96,8168,7900],{"class":211},[96,8170,485],{"class":106},[96,8172,757],{"class":155},[96,8174,485],{"class":106},[96,8176,418],{"class":155},[96,8178,4913],{"class":106},[96,8180,8181,8183,8185,8187,8189,8191,8193],{"class":98,"line":1657},[96,8182,4900],{"class":106},[96,8184,3661],{"class":211},[96,8186,485],{"class":106},[96,8188,682],{"class":155},[96,8190,485],{"class":106},[96,8192,682],{"class":155},[96,8194,1548],{"class":106},[96,8196,8197],{"class":98,"line":1662},[96,8198,2170],{"class":106},[96,8200,8201],{"class":98,"line":1676},[96,8202,8203],{"class":165},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[96,8205,8206,8209,8211,8214,8216,8218],{"class":98,"line":1681},[96,8207,8208],{"class":106},"    stuArray[",[96,8210,324],{"class":155},[96,8212,8213],{"class":106},"].name",[96,8215,152],{"class":102},[96,8217,3684],{"class":211},[96,8219,1273],{"class":106},[96,8221,8222,8224,8226,8229,8231,8233],{"class":98,"line":1710},[96,8223,8208],{"class":106},[96,8225,324],{"class":155},[96,8227,8228],{"class":106},"].age",[96,8230,152],{"class":102},[96,8232,184],{"class":155},[96,8234,1273],{"class":106},[96,8236,8237,8239,8241,8244,8246,8248],{"class":98,"line":1715},[96,8238,8208],{"class":106},[96,8240,324],{"class":155},[96,8242,8243],{"class":106},"].score",[96,8245,152],{"class":102},[96,8247,184],{"class":155},[96,8249,1273],{"class":106},[96,8251,8252],{"class":98,"line":1732},[96,8253,8254],{"class":165},"    \u002F\u002F4.遍历结构体数组\n",[96,8256,8257,8259,8261,8263,8265,8267,8269,8271,8273,8275,8277,8279],{"class":98,"line":1737},[96,8258,3184],{"class":102},[96,8260,1641],{"class":106},[96,8262,110],{"class":102},[96,8264,3015],{"class":106},[96,8266,152],{"class":102},[96,8268,298],{"class":155},[96,8270,3022],{"class":106},[96,8272,1017],{"class":102},[96,8274,184],{"class":155},[96,8276,3022],{"class":106},[96,8278,2275],{"class":102},[96,8280,113],{"class":106},[96,8282,8283],{"class":98,"line":1742},[96,8284,2013],{"class":106},[96,8286,8287,8289,8291,8294,8296,8299,8301,8304,8306],{"class":98,"line":1747},[96,8288,3434],{"class":106},[96,8290,1151],{"class":102},[96,8292,8293],{"class":106},"stuArray[i].name",[96,8295,1151],{"class":102},[96,8297,8298],{"class":106},"stuArray[i].age",[96,8300,1151],{"class":102},[96,8302,8303],{"class":106},"stuArray[i].score",[96,8305,1151],{"class":102},[96,8307,1174],{"class":106},[96,8309,8310],{"class":98,"line":1761},[96,8311,2170],{"class":106},[96,8313,8314],{"class":98,"line":1766},[96,8315,1548],{"class":106},[38,8317,8319],{"id":8318},"_43结构体指针","4.3结构体指针",[14,8321,8322],{},"作用：通过指针访问结构体中的成员",[14,8324,8325],{},"利用操作符->可以通过结构体指针访问结构体属性",[87,8327,8329],{"className":89,"code":8328,"language":91,"meta":18,"style":18},"#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",[93,8330,8331,8337,8347,8353,8357,8363,8367,8371,8377,8383,8387,8395,8399,8404,8429,8434,8449,8454,8477],{"__ignoreMap":18},[96,8332,8333,8335],{"class":98,"line":99},[96,8334,1932],{"class":102},[96,8336,1935],{"class":211},[96,8338,8339,8341,8343,8345],{"class":98,"line":19},[96,8340,1940],{"class":102},[96,8342,1943],{"class":102},[96,8344,1947],{"class":1946},[96,8346,1273],{"class":106},[96,8348,8349,8351],{"class":98,"line":1162},[96,8350,1932],{"class":102},[96,8352,7733],{"class":211},[96,8354,8355],{"class":98,"line":1177},[96,8356,8092],{"class":165},[96,8358,8359,8361],{"class":98,"line":1183},[96,8360,7743],{"class":102},[96,8362,7746],{"class":1946},[96,8364,8365],{"class":98,"line":1197},[96,8366,1529],{"class":106},[96,8368,8369],{"class":98,"line":1203},[96,8370,7769],{"class":106},[96,8372,8373,8375],{"class":98,"line":1294},[96,8374,1968],{"class":102},[96,8376,7781],{"class":106},[96,8378,8379,8381],{"class":98,"line":1300},[96,8380,1968],{"class":102},[96,8382,7793],{"class":106},[96,8384,8385],{"class":98,"line":1312},[96,8386,3978],{"class":106},[96,8388,8389,8391,8393],{"class":98,"line":1595},[96,8390,110],{"class":102},[96,8392,1956],{"class":1946},[96,8394,1959],{"class":106},[96,8396,8397],{"class":98,"line":1600},[96,8398,1529],{"class":106},[96,8400,8401],{"class":98,"line":1606},[96,8402,8403],{"class":165},"    \u002F\u002F创建学生结构体变量\n",[96,8405,8406,8408,8410,8413,8415,8417,8419,8421,8423,8425,8427],{"class":98,"line":1611},[96,8407,7879],{"class":102},[96,8409,7882],{"class":1946},[96,8411,8412],{"class":106}," s",[96,8414,152],{"class":102},[96,8416,1003],{"class":106},[96,8418,7900],{"class":211},[96,8420,485],{"class":106},[96,8422,757],{"class":155},[96,8424,485],{"class":106},[96,8426,1705],{"class":155},[96,8428,3978],{"class":106},[96,8430,8431],{"class":98,"line":1625},[96,8432,8433],{"class":165},"    \u002F\u002F通过指针指向结构体变量\n",[96,8435,8436,8438,8440,8442,8444,8446],{"class":98,"line":1630},[96,8437,7879],{"class":102},[96,8439,7882],{"class":1946},[96,8441,6502],{"class":102},[96,8443,14],{"class":106},[96,8445,6323],{"class":102},[96,8447,8448],{"class":106},"s\n",[96,8450,8451],{"class":98,"line":1636},[96,8452,8453],{"class":165},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[96,8455,8456,8458,8460,8463,8465,8468,8470,8473,8475],{"class":98,"line":1657},[96,8457,1534],{"class":106},[96,8459,1151],{"class":102},[96,8461,8462],{"class":106},"p->name",[96,8464,1151],{"class":102},[96,8466,8467],{"class":106},"p->age",[96,8469,1151],{"class":102},[96,8471,8472],{"class":106},"p->score",[96,8474,1151],{"class":102},[96,8476,1174],{"class":106},[96,8478,8479],{"class":98,"line":1662},[96,8480,1548],{"class":106},[38,8482,8484],{"id":8483},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[14,8486,8487],{},"作用：结构体中的成员可以是另一个结构体",[14,8489,8490],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[87,8492,8494],{"className":89,"code":8493,"language":91,"meta":18,"style":18},"#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",[93,8495,8496,8502,8512,8518,8523,8531,8535,8539,8545,8551,8555,8560,8567,8571,8578,8582,8588,8593,8597,8605,8609,8614,8619,8624,8635,8647,8658,8671,8682,8693],{"__ignoreMap":18},[96,8497,8498,8500],{"class":98,"line":99},[96,8499,1932],{"class":102},[96,8501,1935],{"class":211},[96,8503,8504,8506,8508,8510],{"class":98,"line":19},[96,8505,1940],{"class":102},[96,8507,1943],{"class":102},[96,8509,1947],{"class":1946},[96,8511,1273],{"class":106},[96,8513,8514,8516],{"class":98,"line":1162},[96,8515,1932],{"class":102},[96,8517,7733],{"class":211},[96,8519,8520],{"class":98,"line":1177},[96,8521,8522],{"class":165},"\u002F\u002F定义学生结构体\n",[96,8524,8525,8527,8529],{"class":98,"line":1183},[96,8526,7743],{"class":102},[96,8528,7882],{"class":1946},[96,8530,2657],{"class":106},[96,8532,8533],{"class":98,"line":1197},[96,8534,1529],{"class":106},[96,8536,8537],{"class":98,"line":1203},[96,8538,7769],{"class":106},[96,8540,8541,8543],{"class":98,"line":1294},[96,8542,1968],{"class":102},[96,8544,7781],{"class":106},[96,8546,8547,8549],{"class":98,"line":1300},[96,8548,1968],{"class":102},[96,8550,7793],{"class":106},[96,8552,8553],{"class":98,"line":1312},[96,8554,1548],{"class":106},[96,8556,8557],{"class":98,"line":1595},[96,8558,8559],{"class":165},"\u002F\u002F定义老师结构体\n",[96,8561,8562,8564],{"class":98,"line":1600},[96,8563,7743],{"class":102},[96,8565,8566],{"class":1946}," Teacher\n",[96,8568,8569],{"class":98,"line":1606},[96,8570,1529],{"class":106},[96,8572,8573,8575],{"class":98,"line":1611},[96,8574,1968],{"class":102},[96,8576,8577],{"class":106}," id;\n",[96,8579,8580],{"class":98,"line":1625},[96,8581,7769],{"class":106},[96,8583,8584,8586],{"class":98,"line":1630},[96,8585,1968],{"class":102},[96,8587,7781],{"class":106},[96,8589,8590],{"class":98,"line":1636},[96,8591,8592],{"class":106},"    Student stu;\n",[96,8594,8595],{"class":98,"line":1657},[96,8596,1548],{"class":106},[96,8598,8599,8601,8603],{"class":98,"line":1662},[96,8600,110],{"class":102},[96,8602,1956],{"class":1946},[96,8604,5962],{"class":106},[96,8606,8607],{"class":98,"line":1676},[96,8608,1529],{"class":106},[96,8610,8611],{"class":98,"line":1681},[96,8612,8613],{"class":165},"    \u002F\u002F结构体嵌套结构体\n",[96,8615,8616],{"class":98,"line":1710},[96,8617,8618],{"class":165},"    \u002F\u002F创建老师\n",[96,8620,8621],{"class":98,"line":1715},[96,8622,8623],{"class":106},"    Teacher t;\n",[96,8625,8626,8629,8631,8633],{"class":98,"line":1732},[96,8627,8628],{"class":106},"    t.id",[96,8630,152],{"class":102},[96,8632,418],{"class":155},[96,8634,1273],{"class":106},[96,8636,8637,8640,8642,8645],{"class":98,"line":1737},[96,8638,8639],{"class":106},"    t.name",[96,8641,152],{"class":102},[96,8643,8644],{"class":211},"\"老王\"",[96,8646,1273],{"class":106},[96,8648,8649,8652,8654,8656],{"class":98,"line":1742},[96,8650,8651],{"class":106},"    t.age",[96,8653,152],{"class":102},[96,8655,757],{"class":155},[96,8657,1273],{"class":106},[96,8659,8660,8663,8665,8668],{"class":98,"line":1747},[96,8661,8662],{"class":106},"    t.stu.name",[96,8664,152],{"class":102},[96,8666,8667],{"class":211},"\"小王\"",[96,8669,8670],{"class":106},"；\n",[96,8672,8673,8676,8678,8680],{"class":98,"line":1761},[96,8674,8675],{"class":106},"    t.stu.age",[96,8677,152],{"class":102},[96,8679,807],{"class":155},[96,8681,1273],{"class":106},[96,8683,8684,8687,8689,8691],{"class":98,"line":1766},[96,8685,8686],{"class":106},"    t.stu.score",[96,8688,152],{"class":102},[96,8690,451],{"class":155},[96,8692,1273],{"class":106},[96,8694,8695],{"class":98,"line":2560},[96,8696,1548],{"class":106},[38,8698,8700],{"id":8699},"_45结构体做函数参数","4.5结构体做函数参数",[14,8702,8703],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[87,8705,8707],{"className":89,"code":8706,"language":91,"meta":18,"style":18},"#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",[93,8708,8709,8715,8725,8731,8737,8741,8745,8751,8757,8761,8766,8771,8788,8792,8825,8829,8834,8853,8857,8888,8892,8900,8904,8913,8925,8937,8949,8962,8970,8983,8995,9003],{"__ignoreMap":18},[96,8710,8711,8713],{"class":98,"line":99},[96,8712,1932],{"class":102},[96,8714,1935],{"class":211},[96,8716,8717,8719,8721,8723],{"class":98,"line":19},[96,8718,1940],{"class":102},[96,8720,1943],{"class":102},[96,8722,1947],{"class":1946},[96,8724,1273],{"class":106},[96,8726,8727,8729],{"class":98,"line":1162},[96,8728,1932],{"class":102},[96,8730,7733],{"class":211},[96,8732,8733,8735],{"class":98,"line":1177},[96,8734,7743],{"class":102},[96,8736,7746],{"class":1946},[96,8738,8739],{"class":98,"line":1183},[96,8740,1529],{"class":106},[96,8742,8743],{"class":98,"line":1197},[96,8744,7769],{"class":106},[96,8746,8747,8749],{"class":98,"line":1203},[96,8748,1968],{"class":102},[96,8750,7781],{"class":106},[96,8752,8753,8755],{"class":98,"line":1294},[96,8754,1968],{"class":102},[96,8756,7793],{"class":106},[96,8758,8759],{"class":98,"line":1300},[96,8760,3978],{"class":106},[96,8762,8763],{"class":98,"line":1312},[96,8764,8765],{"class":165},"\u002F\u002F打印学生信息的函数\n",[96,8767,8768],{"class":98,"line":1595},[96,8769,8770],{"class":165},"\u002F\u002F值传递\n",[96,8772,8773,8775,8778,8780,8782,8784,8786],{"class":98,"line":1600},[96,8774,5348],{"class":102},[96,8776,8777],{"class":1946}," printStudent1",[96,8779,107],{"class":106},[96,8781,7743],{"class":102},[96,8783,7882],{"class":1946},[96,8785,8412],{"class":5200},[96,8787,113],{"class":106},[96,8789,8790],{"class":98,"line":1606},[96,8791,1529],{"class":106},[96,8793,8794,8796,8798,8801,8803,8806,8808,8811,8813,8815,8817,8820,8822],{"class":98,"line":1611},[96,8795,6513],{"class":106},[96,8797,1151],{"class":102},[96,8799,8800],{"class":106}," s.name ",[96,8802,1151],{"class":102},[96,8804,8805],{"class":211}," \" \"",[96,8807,1427],{"class":102},[96,8809,8810],{"class":106}," s.age ",[96,8812,1151],{"class":102},[96,8814,8805],{"class":211},[96,8816,1427],{"class":102},[96,8818,8819],{"class":106}," s.score ",[96,8821,1151],{"class":102},[96,8823,8824],{"class":106}," endl;\n",[96,8826,8827],{"class":98,"line":1625},[96,8828,1548],{"class":106},[96,8830,8831],{"class":98,"line":1630},[96,8832,8833],{"class":165},"\u002F\u002F地址传递\n",[96,8835,8836,8838,8841,8843,8845,8847,8849,8851],{"class":98,"line":1636},[96,8837,5348],{"class":102},[96,8839,8840],{"class":1946}," printStudent2",[96,8842,107],{"class":106},[96,8844,7743],{"class":102},[96,8846,7882],{"class":1946},[96,8848,6502],{"class":102},[96,8850,802],{"class":5200},[96,8852,113],{"class":106},[96,8854,8855],{"class":98,"line":1657},[96,8856,1529],{"class":106},[96,8858,8859,8861,8863,8866,8868,8870,8872,8875,8877,8879,8881,8884,8886],{"class":98,"line":1662},[96,8860,6513],{"class":106},[96,8862,1151],{"class":102},[96,8864,8865],{"class":106}," s->name ",[96,8867,1151],{"class":102},[96,8869,8805],{"class":211},[96,8871,1427],{"class":102},[96,8873,8874],{"class":106}," s->age ",[96,8876,1151],{"class":102},[96,8878,8805],{"class":211},[96,8880,1427],{"class":102},[96,8882,8883],{"class":106}," s->score ",[96,8885,1151],{"class":102},[96,8887,8824],{"class":106},[96,8889,8890],{"class":98,"line":1676},[96,8891,1548],{"class":106},[96,8893,8894,8896,8898],{"class":98,"line":1681},[96,8895,110],{"class":102},[96,8897,1956],{"class":1946},[96,8899,1959],{"class":106},[96,8901,8902],{"class":98,"line":1710},[96,8903,1529],{"class":106},[96,8905,8906,8908,8910],{"class":98,"line":1715},[96,8907,7879],{"class":102},[96,8909,7882],{"class":1946},[96,8911,8912],{"class":106}," s;\n",[96,8914,8915,8918,8920,8923],{"class":98,"line":1732},[96,8916,8917],{"class":106},"    s.name ",[96,8919,152],{"class":102},[96,8921,8922],{"class":211}," \"张三\"",[96,8924,1273],{"class":106},[96,8926,8927,8930,8932,8935],{"class":98,"line":1737},[96,8928,8929],{"class":106},"    s.age ",[96,8931,152],{"class":102},[96,8933,8934],{"class":155}," 20",[96,8936,1273],{"class":106},[96,8938,8939,8942,8944,8947],{"class":98,"line":1742},[96,8940,8941],{"class":106},"    s.score ",[96,8943,152],{"class":102},[96,8945,8946],{"class":155}," 85",[96,8948,1273],{"class":106},[96,8950,8951,8953,8955,8958,8960],{"class":98,"line":1747},[96,8952,1534],{"class":106},[96,8954,1151],{"class":102},[96,8956,8957],{"class":211},"\"值传递:\"",[96,8959,1151],{"class":102},[96,8961,1174],{"class":106},[96,8963,8964,8967],{"class":98,"line":1761},[96,8965,8966],{"class":1946},"    printStudent1",[96,8968,8969],{"class":106},"(s);\n",[96,8971,8972,8974,8976,8979,8981],{"class":98,"line":1766},[96,8973,1534],{"class":106},[96,8975,1151],{"class":102},[96,8977,8978],{"class":211},"\"地址传递:\"",[96,8980,1151],{"class":102},[96,8982,1174],{"class":106},[96,8984,8985,8988,8990,8992],{"class":98,"line":2560},[96,8986,8987],{"class":1946},"    printStudent2",[96,8989,107],{"class":106},[96,8991,460],{"class":102},[96,8993,8994],{"class":106},"s); \n",[96,8996,8997,8999,9001],{"class":98,"line":2574},[96,8998,4073],{"class":102},[96,9000,4076],{"class":155},[96,9002,1273],{"class":106},[96,9004,9005],{"class":98,"line":2582},[96,9006,1548],{"class":106},[14,9008,9009],{},"注意：",[1114,9011,9012,9015],{},[53,9013,9014],{},"1.先定义结构体，不要在函数中写结构体的定义",[53,9016,9017],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[38,9019,9021],{"id":9020},"_46结构体中const使用场景","4.6结构体中const使用场景",[14,9023,9024],{},"用const防止误操作",[87,9026,9028],{"className":89,"code":9027,"language":91,"meta":18,"style":18},"#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",[93,9029,9030,9036,9046,9052,9057,9061,9065,9071,9077,9081,9097,9101,9124,9128,9136,9140,9161,9168,9172],{"__ignoreMap":18},[96,9031,9032,9034],{"class":98,"line":99},[96,9033,1932],{"class":102},[96,9035,1935],{"class":211},[96,9037,9038,9040,9042,9044],{"class":98,"line":19},[96,9039,1940],{"class":102},[96,9041,1943],{"class":102},[96,9043,1947],{"class":1946},[96,9045,1273],{"class":106},[96,9047,9048,9050],{"class":98,"line":1162},[96,9049,1932],{"class":102},[96,9051,7733],{"class":211},[96,9053,9054],{"class":98,"line":1177},[96,9055,9056],{"class":106},"sctuct Student\n",[96,9058,9059],{"class":98,"line":1183},[96,9060,1529],{"class":106},[96,9062,9063],{"class":98,"line":1197},[96,9064,7769],{"class":106},[96,9066,9067,9069],{"class":98,"line":1203},[96,9068,1968],{"class":102},[96,9070,7781],{"class":106},[96,9072,9073,9075],{"class":98,"line":1294},[96,9074,1968],{"class":102},[96,9076,7793],{"class":106},[96,9078,9079],{"class":98,"line":1300},[96,9080,3978],{"class":106},[96,9082,9083,9085,9088,9090,9093,9095],{"class":98,"line":1312},[96,9084,5348],{"class":102},[96,9086,9087],{"class":1946}," printStudents",[96,9089,107],{"class":106},[96,9091,9092],{"class":1946},"student",[96,9094,8412],{"class":5200},[96,9096,113],{"class":106},[96,9098,9099],{"class":98,"line":1595},[96,9100,1529],{"class":106},[96,9102,9103,9105,9107,9110,9112,9115,9117,9120,9122],{"class":98,"line":1600},[96,9104,1534],{"class":106},[96,9106,1151],{"class":102},[96,9108,9109],{"class":106},"s.name",[96,9111,1151],{"class":102},[96,9113,9114],{"class":106},"s.age",[96,9116,1151],{"class":102},[96,9118,9119],{"class":106},"s.score",[96,9121,1151],{"class":102},[96,9123,1174],{"class":106},[96,9125,9126],{"class":98,"line":1606},[96,9127,1548],{"class":106},[96,9129,9130,9132,9134],{"class":98,"line":1611},[96,9131,110],{"class":102},[96,9133,1956],{"class":1946},[96,9135,5962],{"class":106},[96,9137,9138],{"class":98,"line":1625},[96,9139,1529],{"class":106},[96,9141,9142,9145,9147,9149,9151,9153,9155,9157,9159],{"class":98,"line":1630},[96,9143,9144],{"class":106},"    Student s",[96,9146,152],{"class":102},[96,9148,1003],{"class":106},[96,9150,7900],{"class":211},[96,9152,485],{"class":106},[96,9154,757],{"class":155},[96,9156,485],{"class":106},[96,9158,757],{"class":155},[96,9160,3978],{"class":106},[96,9162,9163,9166],{"class":98,"line":1636},[96,9164,9165],{"class":1946},"    printStudent",[96,9167,8969],{"class":106},[96,9169,9170],{"class":98,"line":1657},[96,9171,2383],{"emptyLinePlaceholder":23},[96,9173,9174],{"class":98,"line":1662},[96,9175,1548],{"class":106},[14,9177,9009],{},[1114,9179,9180,9183,9186],{},[53,9181,9182],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[53,9184,9185],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[53,9187,9188],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[87,9190,9192],{"className":89,"code":9191,"language":91,"meta":18,"style":18},"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",[93,9193,9194,9213,9217,9222,9242],{"__ignoreMap":18},[96,9195,9196,9198,9200,9202,9204,9207,9209,9211],{"class":98,"line":99},[96,9197,5348],{"class":102},[96,9199,9087],{"class":1946},[96,9201,107],{"class":106},[96,9203,6776],{"class":102},[96,9205,9206],{"class":1946}," student",[96,9208,6502],{"class":102},[96,9210,802],{"class":5200},[96,9212,113],{"class":106},[96,9214,9215],{"class":98,"line":19},[96,9216,1529],{"class":106},[96,9218,9219],{"class":98,"line":1162},[96,9220,9221],{"class":165},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[96,9223,9224,9226,9228,9230,9232,9234,9236,9238,9240],{"class":98,"line":1177},[96,9225,1534],{"class":106},[96,9227,1151],{"class":102},[96,9229,9109],{"class":106},[96,9231,1151],{"class":102},[96,9233,9114],{"class":106},[96,9235,1151],{"class":102},[96,9237,9119],{"class":106},[96,9239,1151],{"class":102},[96,9241,1174],{"class":106},[96,9243,9244],{"class":98,"line":1183},[96,9245,1548],{"class":106},[38,9247,9249],{"id":9248},"_47案例","4.7案例",[50,9251,9252],{},[53,9253,9254],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[87,9256,9258],{"className":89,"code":9257,"language":91,"meta":18,"style":18},"#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",[93,9259,9260,9266,9276,9282,9289,9293,9299,9303,9308,9314,9320,9324,9328,9334,9338,9343,9348,9361,9365,9370,9396,9400,9412,9439,9443,9455,9465,9469,9474,9503,9507,9519,9528,9555,9566,9576,9580,9584,9588,9593,9617,9621,9645,9649,9668,9694,9698,9723,9746,9770,9775,9780,9785,9794,9799,9805,9826,9832,9846,9852,9879,9888,9894,9902,9907],{"__ignoreMap":18},[96,9261,9262,9264],{"class":98,"line":99},[96,9263,1932],{"class":102},[96,9265,1935],{"class":211},[96,9267,9268,9270,9272,9274],{"class":98,"line":19},[96,9269,1940],{"class":102},[96,9271,1943],{"class":102},[96,9273,1947],{"class":1946},[96,9275,1273],{"class":106},[96,9277,9278,9280],{"class":98,"line":1162},[96,9279,1932],{"class":102},[96,9281,7733],{"class":211},[96,9283,9284,9286],{"class":98,"line":1177},[96,9285,1932],{"class":102},[96,9287,9288],{"class":211},"\u003Cctime>\n",[96,9290,9291],{"class":98,"line":1183},[96,9292,8522],{"class":165},[96,9294,9295,9297],{"class":98,"line":1197},[96,9296,7743],{"class":102},[96,9298,7746],{"class":1946},[96,9300,9301],{"class":98,"line":1203},[96,9302,1529],{"class":106},[96,9304,9305],{"class":98,"line":1294},[96,9306,9307],{"class":106},"    string sName;\n",[96,9309,9310,9312],{"class":98,"line":1300},[96,9311,1968],{"class":102},[96,9313,7781],{"class":106},[96,9315,9316,9318],{"class":98,"line":1312},[96,9317,1968],{"class":102},[96,9319,7793],{"class":106},[96,9321,9322],{"class":98,"line":1595},[96,9323,3978],{"class":106},[96,9325,9326],{"class":98,"line":1600},[96,9327,8559],{"class":165},[96,9329,9330,9332],{"class":98,"line":1606},[96,9331,7743],{"class":102},[96,9333,8566],{"class":1946},[96,9335,9336],{"class":98,"line":1611},[96,9337,1529],{"class":106},[96,9339,9340],{"class":98,"line":1625},[96,9341,9342],{"class":106},"    string tName;\n",[96,9344,9345],{"class":98,"line":1630},[96,9346,9347],{"class":165},"    \u002F\u002F学生数组\n",[96,9349,9350,9352,9354,9357,9359],{"class":98,"line":1636},[96,9351,7879],{"class":102},[96,9353,7882],{"class":1946},[96,9355,9356],{"class":106}," sArray[",[96,9358,426],{"class":155},[96,9360,4673],{"class":106},[96,9362,9363],{"class":98,"line":1657},[96,9364,3978],{"class":106},[96,9366,9367],{"class":98,"line":1662},[96,9368,9369],{"class":165},"\u002F\u002F给老师和学生赋值的函数\n",[96,9371,9372,9374,9377,9379,9381,9384,9387,9390,9392,9394],{"class":98,"line":1676},[96,9373,5348],{"class":102},[96,9375,9376],{"class":1946}," allocateSpace",[96,9378,107],{"class":106},[96,9380,7743],{"class":102},[96,9382,9383],{"class":1946}," Teacher",[96,9385,9386],{"class":5200}," tArray",[96,9388,9389],{"class":106},"[],",[96,9391,110],{"class":102},[96,9393,7315],{"class":5200},[96,9395,113],{"class":106},[96,9397,9398],{"class":98,"line":1681},[96,9399,1529],{"class":106},[96,9401,9402,9405,9407,9410],{"class":98,"line":1710},[96,9403,9404],{"class":106},"    string nameSeed",[96,9406,152],{"class":102},[96,9408,9409],{"class":211},"\"ABCDE\"",[96,9411,1273],{"class":106},[96,9413,9414,9416,9418,9420,9423,9425,9427,9430,9432,9435,9437],{"class":98,"line":1715},[96,9415,3184],{"class":102},[96,9417,1641],{"class":106},[96,9419,110],{"class":102},[96,9421,9422],{"class":106}," i ",[96,9424,152],{"class":102},[96,9426,4076],{"class":155},[96,9428,9429],{"class":106},"; i ",[96,9431,1017],{"class":102},[96,9433,9434],{"class":106}," len; i",[96,9436,2275],{"class":102},[96,9438,113],{"class":106},[96,9440,9441],{"class":98,"line":1732},[96,9442,2013],{"class":106},[96,9444,9445,9448,9450,9453],{"class":98,"line":1737},[96,9446,9447],{"class":106},"        tArray[i].tName ",[96,9449,152],{"class":102},[96,9451,9452],{"class":211}," \"Teacher_\"",[96,9454,1273],{"class":106},[96,9456,9457,9459,9462],{"class":98,"line":1742},[96,9458,9447],{"class":106},[96,9460,9461],{"class":102},"+=",[96,9463,9464],{"class":106},"nameSeed[i];\n",[96,9466,9467],{"class":98,"line":1747},[96,9468,2383],{"emptyLinePlaceholder":23},[96,9470,9471],{"class":98,"line":1761},[96,9472,9473],{"class":165},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[96,9475,9476,9478,9480,9482,9485,9487,9489,9492,9494,9496,9499,9501],{"class":98,"line":1766},[96,9477,3386],{"class":102},[96,9479,1641],{"class":106},[96,9481,110],{"class":102},[96,9483,9484],{"class":106}," j ",[96,9486,152],{"class":102},[96,9488,4076],{"class":155},[96,9490,9491],{"class":106},"; j ",[96,9493,1017],{"class":102},[96,9495,2131],{"class":155},[96,9497,9498],{"class":106},"; j",[96,9500,2275],{"class":102},[96,9502,113],{"class":106},[96,9504,9505],{"class":98,"line":2560},[96,9506,2493],{"class":106},[96,9508,9509,9512,9514,9517],{"class":98,"line":2574},[96,9510,9511],{"class":106},"            tArray[i].sArray[j].sName ",[96,9513,152],{"class":102},[96,9515,9516],{"class":211}," \"Student_\"",[96,9518,1273],{"class":106},[96,9520,9521,9523,9525],{"class":98,"line":2582},[96,9522,9511],{"class":106},[96,9524,9461],{"class":102},[96,9526,9527],{"class":106}," nameSeed[j];\n",[96,9529,9530,9533,9536,9538,9540,9542,9544,9546,9548,9550,9552],{"class":98,"line":2587},[96,9531,9532],{"class":102},"            int",[96,9534,9535],{"class":106}," random",[96,9537,152],{"class":102},[96,9539,2407],{"class":1946},[96,9541,2410],{"class":106},[96,9543,435],{"class":102},[96,9545,1014],{"class":155},[96,9547,588],{"class":102},[96,9549,508],{"class":155},[96,9551,162],{"class":106},[96,9553,9554],{"class":165},"\u002F\u002F40~99\n",[96,9556,9557,9560,9562,9564],{"class":98,"line":2593},[96,9558,9559],{"class":106},"            tArray[i].sArray[j].age ",[96,9561,152],{"class":102},[96,9563,8934],{"class":155},[96,9565,1273],{"class":106},[96,9567,9568,9571,9573],{"class":98,"line":2599},[96,9569,9570],{"class":106},"            tArray[i].sArray[j].score ",[96,9572,152],{"class":102},[96,9574,9575],{"class":106}," random;\n",[96,9577,9578],{"class":98,"line":2604},[96,9579,2512],{"class":106},[96,9581,9582],{"class":98,"line":7932},[96,9583,2170],{"class":106},[96,9585,9586],{"class":98,"line":7956},[96,9587,1548],{"class":106},[96,9589,9590],{"class":98,"line":7961},[96,9591,9592],{"class":165},"\u002F\u002F打印所有信息的函数\n",[96,9594,9595,9597,9600,9602,9604,9606,9608,9611,9613,9615],{"class":98,"line":7967},[96,9596,5348],{"class":102},[96,9598,9599],{"class":1946}," printInfo",[96,9601,107],{"class":106},[96,9603,7743],{"class":102},[96,9605,9383],{"class":1946},[96,9607,9386],{"class":5200},[96,9609,9610],{"class":106},"[], ",[96,9612,110],{"class":102},[96,9614,7315],{"class":5200},[96,9616,113],{"class":106},[96,9618,9619],{"class":98,"line":7994},[96,9620,1529],{"class":106},[96,9622,9623,9625,9627,9629,9631,9633,9635,9637,9639,9641,9643],{"class":98,"line":7999},[96,9624,3184],{"class":102},[96,9626,1641],{"class":106},[96,9628,110],{"class":102},[96,9630,9422],{"class":106},[96,9632,152],{"class":102},[96,9634,4076],{"class":155},[96,9636,9429],{"class":106},[96,9638,1017],{"class":102},[96,9640,9434],{"class":106},[96,9642,2275],{"class":102},[96,9644,113],{"class":106},[96,9646,9647],{"class":98,"line":8005},[96,9648,2013],{"class":106},[96,9650,9651,9654,9656,9659,9661,9664,9666],{"class":98,"line":8017},[96,9652,9653],{"class":106},"        cout ",[96,9655,1151],{"class":102},[96,9657,9658],{"class":211}," \"Teacher: \"",[96,9660,1427],{"class":102},[96,9662,9663],{"class":106}," tArray[i].tName ",[96,9665,1151],{"class":102},[96,9667,8824],{"class":106},[96,9669,9670,9672,9674,9676,9678,9680,9682,9684,9686,9688,9690,9692],{"class":98,"line":8029},[96,9671,3386],{"class":102},[96,9673,1641],{"class":106},[96,9675,110],{"class":102},[96,9677,9484],{"class":106},[96,9679,152],{"class":102},[96,9681,4076],{"class":155},[96,9683,9491],{"class":106},[96,9685,1017],{"class":102},[96,9687,2131],{"class":155},[96,9689,9498],{"class":106},[96,9691,2275],{"class":102},[96,9693,113],{"class":106},[96,9695,9696],{"class":98,"line":8041},[96,9697,2493],{"class":106},[96,9699,9701,9704,9706,9709,9711,9714,9716,9719,9721],{"class":98,"line":9700},47,[96,9702,9703],{"class":106},"            cout ",[96,9705,1151],{"class":102},[96,9707,9708],{"class":211}," \"",[96,9710,1213],{"class":155},[96,9712,9713],{"class":211},"Student: \"",[96,9715,1427],{"class":102},[96,9717,9718],{"class":106}," tArray[i].sArray[j].sName",[96,9720,1151],{"class":102},[96,9722,1174],{"class":106},[96,9724,9726,9728,9730,9732,9734,9737,9739,9742,9744],{"class":98,"line":9725},48,[96,9727,9703],{"class":106},[96,9729,1151],{"class":102},[96,9731,9708],{"class":211},[96,9733,1213],{"class":155},[96,9735,9736],{"class":211},"Age: \"",[96,9738,1427],{"class":102},[96,9740,9741],{"class":106}," tArray[i].sArray[j].age ",[96,9743,1151],{"class":102},[96,9745,8824],{"class":106},[96,9747,9749,9751,9753,9755,9757,9760,9762,9765,9767],{"class":98,"line":9748},49,[96,9750,9703],{"class":106},[96,9752,1151],{"class":102},[96,9754,9708],{"class":211},[96,9756,1213],{"class":155},[96,9758,9759],{"class":211},"Score: \"",[96,9761,1427],{"class":102},[96,9763,9764],{"class":106}," tArray[i].sArray[j].score ",[96,9766,1151],{"class":102},[96,9768,9769],{"class":106}," endl;   \n",[96,9771,9773],{"class":98,"line":9772},50,[96,9774,2512],{"class":106},[96,9776,9778],{"class":98,"line":9777},51,[96,9779,2170],{"class":106},[96,9781,9783],{"class":98,"line":9782},52,[96,9784,1548],{"class":106},[96,9786,9788,9790,9792],{"class":98,"line":9787},53,[96,9789,110],{"class":102},[96,9791,1956],{"class":1946},[96,9793,1959],{"class":106},[96,9795,9797],{"class":98,"line":9796},54,[96,9798,1529],{"class":106},[96,9800,9802],{"class":98,"line":9801},55,[96,9803,9804],{"class":165},"    \u002F\u002F随机数种子\n",[96,9806,9808,9810,9812,9814,9816,9818,9820,9822,9824],{"class":98,"line":9807},56,[96,9809,2356],{"class":1946},[96,9811,2359],{"class":106},[96,9813,2362],{"class":102},[96,9815,2365],{"class":102},[96,9817,536],{"class":106},[96,9819,2370],{"class":1946},[96,9821,107],{"class":106},[96,9823,2375],{"class":155},[96,9825,2378],{"class":106},[96,9827,9829],{"class":98,"line":9828},57,[96,9830,9831],{"class":165},"    \u002F\u002F1.创建3名老师的数组\n",[96,9833,9835,9837,9839,9842,9844],{"class":98,"line":9834},58,[96,9836,7879],{"class":102},[96,9838,9383],{"class":1946},[96,9840,9841],{"class":106}," tArray[",[96,9843,178],{"class":155},[96,9845,4673],{"class":106},[96,9847,9849],{"class":98,"line":9848},59,[96,9850,9851],{"class":165},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[96,9853,9855,9857,9860,9862,9865,9868,9870,9872,9875,9877],{"class":98,"line":9854},60,[96,9856,1968],{"class":102},[96,9858,9859],{"class":106}," len ",[96,9861,152],{"class":102},[96,9863,9864],{"class":102}," sizeof",[96,9866,9867],{"class":106},"(tArray) ",[96,9869,691],{"class":102},[96,9871,9864],{"class":102},[96,9873,9874],{"class":106},"(tArray[",[96,9876,298],{"class":155},[96,9878,3839],{"class":106},[96,9880,9882,9885],{"class":98,"line":9881},61,[96,9883,9884],{"class":1946},"    allocateSpace",[96,9886,9887],{"class":106},"(tArray, len);\n",[96,9889,9891],{"class":98,"line":9890},62,[96,9892,9893],{"class":165},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[96,9895,9897,9900],{"class":98,"line":9896},63,[96,9898,9899],{"class":1946},"    printInfo",[96,9901,9887],{"class":106},[96,9903,9905],{"class":98,"line":9904},64,[96,9906,2383],{"emptyLinePlaceholder":23},[96,9908,9910],{"class":98,"line":9909},65,[96,9911,1548],{"class":106},[50,9913,9914],{"start":19},[53,9915,9916,9919],{},[256,9917,9918],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[14,9921,9922],{},"五名英雄信息如下：",[87,9924,9928],{"className":9925,"code":9926,"language":9927,"meta":18,"style":18},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[93,9929,9930,9948,9965,9982,9999],{"__ignoreMap":18},[96,9931,9932,9934,9937,9939,9941,9943,9946],{"class":98,"line":99},[96,9933,4900],{"class":106},[96,9935,9936],{"class":211},"\"刘备\"",[96,9938,485],{"class":106},[96,9940,882],{"class":155},[96,9942,485],{"class":106},[96,9944,9945],{"class":211},"\"男\"",[96,9947,4913],{"class":106},[96,9949,9950,9952,9955,9957,9959,9961,9963],{"class":98,"line":19},[96,9951,4900],{"class":106},[96,9953,9954],{"class":211},"\"关羽\"",[96,9956,485],{"class":106},[96,9958,857],{"class":155},[96,9960,485],{"class":106},[96,9962,9945],{"class":211},[96,9964,4913],{"class":106},[96,9966,9967,9969,9972,9974,9976,9978,9980],{"class":98,"line":1162},[96,9968,4900],{"class":106},[96,9970,9971],{"class":211},"\"张飞\"",[96,9973,485],{"class":106},[96,9975,807],{"class":155},[96,9977,485],{"class":106},[96,9979,9945],{"class":211},[96,9981,4913],{"class":106},[96,9983,9984,9986,9989,9991,9993,9995,9997],{"class":98,"line":1177},[96,9985,4900],{"class":106},[96,9987,9988],{"class":211},"\"赵云\"",[96,9990,485],{"class":106},[96,9992,832],{"class":155},[96,9994,485],{"class":106},[96,9996,9945],{"class":211},[96,9998,4913],{"class":106},[96,10000,10001,10003,10006,10008,10010,10012,10015],{"class":98,"line":1183},[96,10002,4900],{"class":106},[96,10004,10005],{"class":211},"\"貂蝉\"",[96,10007,485],{"class":106},[96,10009,782],{"class":155},[96,10011,485],{"class":106},[96,10013,10014],{"class":211},"\"女\"",[96,10016,4913],{"class":106},[14,10018,10019],{},"代码：",[87,10021,10023],{"className":89,"code":10022,"language":91,"meta":18,"style":18},"#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",[93,10024,10025,10031,10041,10047,10054,10058,10062,10068,10073,10077,10082,10105,10109,10134,10138,10171,10176,10205,10210,10225,10251,10271,10276,10281,10285,10289,10294,10316,10320,10344,10348,10410,10414,10418,10426,10430,10435,10446,10450,10466,10482,10498,10514,10530,10534,10554,10576,10581,10594,10601,10606,10612,10617,10630,10636],{"__ignoreMap":18},[96,10026,10027,10029],{"class":98,"line":99},[96,10028,1932],{"class":102},[96,10030,1935],{"class":211},[96,10032,10033,10035,10037,10039],{"class":98,"line":19},[96,10034,1940],{"class":102},[96,10036,1943],{"class":102},[96,10038,1947],{"class":1946},[96,10040,1273],{"class":106},[96,10042,10043,10045],{"class":98,"line":1162},[96,10044,1932],{"class":102},[96,10046,7733],{"class":211},[96,10048,10049,10051],{"class":98,"line":1177},[96,10050,7743],{"class":102},[96,10052,10053],{"class":1946}," Sanguo\n",[96,10055,10056],{"class":98,"line":1183},[96,10057,1529],{"class":106},[96,10059,10060],{"class":98,"line":1197},[96,10061,7769],{"class":106},[96,10063,10064,10066],{"class":98,"line":1203},[96,10065,1968],{"class":102},[96,10067,7781],{"class":106},[96,10069,10070],{"class":98,"line":1294},[96,10071,10072],{"class":106},"    string gender;\n",[96,10074,10075],{"class":98,"line":1300},[96,10076,3978],{"class":106},[96,10078,10079],{"class":98,"line":1312},[96,10080,10081],{"class":165},"\u002F\u002F定义排序函数\n",[96,10083,10084,10086,10088,10090,10093,10095,10097,10099,10101,10103],{"class":98,"line":1595},[96,10085,5348],{"class":102},[96,10087,7300],{"class":1946},[96,10089,107],{"class":106},[96,10091,10092],{"class":1946},"Sanguo",[96,10094,6502],{"class":102},[96,10096,802],{"class":5200},[96,10098,485],{"class":106},[96,10100,110],{"class":102},[96,10102,7315],{"class":5200},[96,10104,113],{"class":106},[96,10106,10107],{"class":98,"line":1600},[96,10108,1529],{"class":106},[96,10110,10111,10113,10115,10117,10119,10121,10123,10125,10127,10130,10132],{"class":98,"line":1606},[96,10112,3184],{"class":102},[96,10114,107],{"class":106},[96,10116,110],{"class":102},[96,10118,3015],{"class":106},[96,10120,152],{"class":102},[96,10122,298],{"class":155},[96,10124,3022],{"class":106},[96,10126,1017],{"class":102},[96,10128,10129],{"class":106},"len;i",[96,10131,2275],{"class":102},[96,10133,113],{"class":106},[96,10135,10136],{"class":98,"line":1611},[96,10137,2013],{"class":106},[96,10139,10140,10143,10145,10147,10149,10151,10153,10155,10157,10159,10161,10163,10165,10167,10169],{"class":98,"line":1625},[96,10141,10142],{"class":102},"     for",[96,10144,1641],{"class":106},[96,10146,110],{"class":102},[96,10148,3393],{"class":106},[96,10150,152],{"class":102},[96,10152,298],{"class":155},[96,10154,3400],{"class":106},[96,10156,1017],{"class":102},[96,10158,7342],{"class":106},[96,10160,639],{"class":102},[96,10162,324],{"class":155},[96,10164,639],{"class":102},[96,10166,3533],{"class":106},[96,10168,2275],{"class":102},[96,10170,113],{"class":106},[96,10172,10173],{"class":98,"line":1630},[96,10174,10175],{"class":106},"     {\n",[96,10177,10178,10181,10184,10186,10189,10191,10194,10196,10198,10200,10202],{"class":98,"line":1636},[96,10179,10180],{"class":102},"         if",[96,10182,10183],{"class":106}," ((s",[96,10185,588],{"class":102},[96,10187,10188],{"class":106},"j)->age ",[96,10190,1067],{"class":102},[96,10192,10193],{"class":106}," (s",[96,10195,588],{"class":102},[96,10197,574],{"class":106},[96,10199,588],{"class":102},[96,10201,324],{"class":155},[96,10203,10204],{"class":106},")->age)\n",[96,10206,10207],{"class":98,"line":1657},[96,10208,10209],{"class":106},"         {\n",[96,10211,10212,10215,10217,10220,10222],{"class":98,"line":1662},[96,10213,10214],{"class":106},"             Sanguo temp",[96,10216,7137],{"class":102},[96,10218,10219],{"class":106},"(s",[96,10221,588],{"class":102},[96,10223,10224],{"class":106},"j);\n",[96,10226,10227,10230,10232,10234,10237,10239,10241,10243,10245,10247,10249],{"class":98,"line":1676},[96,10228,10229],{"class":102},"             *",[96,10231,10219],{"class":106},[96,10233,588],{"class":102},[96,10235,10236],{"class":106},"j)",[96,10238,7137],{"class":102},[96,10240,10219],{"class":106},[96,10242,588],{"class":102},[96,10244,574],{"class":106},[96,10246,588],{"class":102},[96,10248,324],{"class":155},[96,10250,2702],{"class":106},[96,10252,10253,10255,10257,10259,10261,10263,10265,10267,10269],{"class":98,"line":1681},[96,10254,10229],{"class":102},[96,10256,10219],{"class":106},[96,10258,588],{"class":102},[96,10260,574],{"class":106},[96,10262,588],{"class":102},[96,10264,324],{"class":155},[96,10266,536],{"class":106},[96,10268,152],{"class":102},[96,10270,4263],{"class":106},[96,10272,10273],{"class":98,"line":1710},[96,10274,10275],{"class":106},"         }\n",[96,10277,10278],{"class":98,"line":1715},[96,10279,10280],{"class":106},"     }\n",[96,10282,10283],{"class":98,"line":1732},[96,10284,2170],{"class":106},[96,10286,10287],{"class":98,"line":1737},[96,10288,1548],{"class":106},[96,10290,10291],{"class":98,"line":1742},[96,10292,10293],{"class":165},"\u002F\u002F定义打印函数\n",[96,10295,10296,10298,10300,10302,10304,10306,10308,10310,10312,10314],{"class":98,"line":1747},[96,10297,5348],{"class":102},[96,10299,9599],{"class":1946},[96,10301,107],{"class":106},[96,10303,10092],{"class":1946},[96,10305,6502],{"class":102},[96,10307,802],{"class":5200},[96,10309,485],{"class":106},[96,10311,110],{"class":102},[96,10313,7315],{"class":5200},[96,10315,113],{"class":106},[96,10317,10318],{"class":98,"line":1761},[96,10319,1529],{"class":106},[96,10321,10322,10324,10326,10328,10330,10332,10334,10336,10338,10340,10342],{"class":98,"line":1766},[96,10323,3184],{"class":102},[96,10325,1641],{"class":106},[96,10327,110],{"class":102},[96,10329,3015],{"class":106},[96,10331,152],{"class":102},[96,10333,298],{"class":155},[96,10335,3022],{"class":106},[96,10337,1017],{"class":102},[96,10339,10129],{"class":106},[96,10341,2275],{"class":102},[96,10343,113],{"class":106},[96,10345,10346],{"class":98,"line":2560},[96,10347,2013],{"class":106},[96,10349,10350,10352,10354,10356,10358,10361,10363,10365,10367,10370,10372,10374,10376,10379,10381,10383,10385,10388,10390,10392,10394,10397,10399,10401,10403,10406,10408],{"class":98,"line":2574},[96,10351,3434],{"class":106},[96,10353,1151],{"class":102},[96,10355,358],{"class":211},[96,10357,1213],{"class":155},[96,10359,10360],{"class":211},"姓名：\"",[96,10362,1151],{"class":102},[96,10364,10219],{"class":106},[96,10366,588],{"class":102},[96,10368,10369],{"class":106},"i)->name",[96,10371,1151],{"class":102},[96,10373,358],{"class":211},[96,10375,1213],{"class":155},[96,10377,10378],{"class":211},"年龄：\"",[96,10380,1151],{"class":102},[96,10382,10219],{"class":106},[96,10384,588],{"class":102},[96,10386,10387],{"class":106},"i)->age",[96,10389,1151],{"class":102},[96,10391,358],{"class":211},[96,10393,1213],{"class":155},[96,10395,10396],{"class":211},"性别：\"",[96,10398,1151],{"class":102},[96,10400,10219],{"class":106},[96,10402,588],{"class":102},[96,10404,10405],{"class":106},"i)->gender",[96,10407,1151],{"class":102},[96,10409,1174],{"class":106},[96,10411,10412],{"class":98,"line":2582},[96,10413,2170],{"class":106},[96,10415,10416],{"class":98,"line":2587},[96,10417,1548],{"class":106},[96,10419,10420,10422,10424],{"class":98,"line":2593},[96,10421,110],{"class":102},[96,10423,1956],{"class":1946},[96,10425,1959],{"class":106},[96,10427,10428],{"class":98,"line":2599},[96,10429,1529],{"class":106},[96,10431,10432],{"class":98,"line":2604},[96,10433,10434],{"class":165},"    \u002F\u002F定义结构体变量\n",[96,10436,10437,10440,10442,10444],{"class":98,"line":7932},[96,10438,10439],{"class":106},"    Sanguo s1[",[96,10441,426],{"class":155},[96,10443,1047],{"class":106},[96,10445,4891],{"class":102},[96,10447,10448],{"class":98,"line":7956},[96,10449,2013],{"class":106},[96,10451,10452,10454,10456,10458,10460,10462,10464],{"class":98,"line":7961},[96,10453,4900],{"class":106},[96,10455,9936],{"class":211},[96,10457,485],{"class":106},[96,10459,882],{"class":155},[96,10461,485],{"class":106},[96,10463,9945],{"class":211},[96,10465,4913],{"class":106},[96,10467,10468,10470,10472,10474,10476,10478,10480],{"class":98,"line":7967},[96,10469,4900],{"class":106},[96,10471,9954],{"class":211},[96,10473,485],{"class":106},[96,10475,857],{"class":155},[96,10477,485],{"class":106},[96,10479,9945],{"class":211},[96,10481,4913],{"class":106},[96,10483,10484,10486,10488,10490,10492,10494,10496],{"class":98,"line":7994},[96,10485,4900],{"class":106},[96,10487,9971],{"class":211},[96,10489,485],{"class":106},[96,10491,807],{"class":155},[96,10493,485],{"class":106},[96,10495,9945],{"class":211},[96,10497,4913],{"class":106},[96,10499,10500,10502,10504,10506,10508,10510,10512],{"class":98,"line":7999},[96,10501,4900],{"class":106},[96,10503,9988],{"class":211},[96,10505,485],{"class":106},[96,10507,832],{"class":155},[96,10509,485],{"class":106},[96,10511,9945],{"class":211},[96,10513,4913],{"class":106},[96,10515,10516,10518,10520,10522,10524,10526,10528],{"class":98,"line":8005},[96,10517,4900],{"class":106},[96,10519,10005],{"class":211},[96,10521,485],{"class":106},[96,10523,782],{"class":155},[96,10525,485],{"class":106},[96,10527,10014],{"class":211},[96,10529,4913],{"class":106},[96,10531,10532],{"class":98,"line":8017},[96,10533,4934],{"class":106},[96,10535,10536,10538,10540,10542,10545,10547,10550,10552],{"class":98,"line":8029},[96,10537,1968],{"class":102},[96,10539,7315],{"class":106},[96,10541,4186],{"class":102},[96,10543,10544],{"class":106},"(s1)",[96,10546,4192],{"class":102},[96,10548,10549],{"class":106},"(s1[",[96,10551,298],{"class":155},[96,10553,3839],{"class":106},[96,10555,10556,10559,10561,10564,10566,10569,10572,10574],{"class":98,"line":8041},[96,10557,10558],{"class":106},"    Sanguo ",[96,10560,562],{"class":102},[96,10562,10563],{"class":106},"s ",[96,10565,152],{"class":102},[96,10567,10568],{"class":102}," &",[96,10570,10571],{"class":106},"s1[",[96,10573,298],{"class":155},[96,10575,4673],{"class":106},[96,10577,10578],{"class":98,"line":9700},[96,10579,10580],{"class":165},"    \u002F\u002F排序前：\n",[96,10582,10583,10585,10587,10590,10592],{"class":98,"line":9725},[96,10584,6513],{"class":106},[96,10586,1151],{"class":102},[96,10588,10589],{"class":211}," \"排序前：\"",[96,10591,1427],{"class":102},[96,10593,8824],{"class":106},[96,10595,10596,10598],{"class":98,"line":9748},[96,10597,9899],{"class":1946},[96,10599,10600],{"class":106},"(s,len);\n",[96,10602,10603],{"class":98,"line":9772},[96,10604,10605],{"class":165},"    \u002F\u002F调用排序函数\n",[96,10607,10608,10610],{"class":98,"line":9777},[96,10609,7582],{"class":1946},[96,10611,10600],{"class":106},[96,10613,10614],{"class":98,"line":9782},[96,10615,10616],{"class":165},"    \u002F\u002F排序后\n",[96,10618,10619,10621,10623,10626,10628],{"class":98,"line":9787},[96,10620,6513],{"class":106},[96,10622,1151],{"class":102},[96,10624,10625],{"class":211}," \"排序后：\"",[96,10627,1427],{"class":102},[96,10629,8824],{"class":106},[96,10631,10632,10634],{"class":98,"line":9796},[96,10633,9899],{"class":1946},[96,10635,10600],{"class":106},[96,10637,10638],{"class":98,"line":9801},[96,10639,1548],{"class":106},[14,10641,10642,10643,10645],{},"注意：使用指针时直接用传首地址**&s",[96,10644,298],{},"**",[5110,10647,10648],{},"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":18,"searchDepth":19,"depth":19,"links":10650},[10651,10652,10653,10654,10655,10656,10657],{"id":7687,"depth":19,"text":7688},{"id":8049,"depth":19,"text":8050},{"id":8318,"depth":19,"text":8319},{"id":8483,"depth":19,"text":8484},{"id":8699,"depth":19,"text":8700},{"id":9020,"depth":19,"text":9021},{"id":9248,"depth":19,"text":9249},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7676,"description":7684},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10664,"title":10665,"body":10666,"description":18,"extension":21,"meta":12009,"navigation":23,"path":12010,"seo":12011,"stem":12012,"__hash__":12013},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10667,"toc":12003},[10668,10671,10675,10681,10695,10700,10703,10707,10714,10720,10723,10730,10736,10741,10744,10747,10750,11314,11317,11331,11335,11340,11356,11496,11499,11505,11508,11513,11521,11629,11632,11637,11640,11645,11648,11654,11657,12000],[10,10669,10665],{"id":10670},"_5程序内存模型",[38,10672,10674],{"id":10673},"_51内存分区模型","5.1内存分区模型",[14,10676,10677,10678],{},"C++程序在执行时，将内存大方向划分为",[256,10679,10680],{},"4个区域",[1114,10682,10683,10686,10689,10692],{},[53,10684,10685],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[53,10687,10688],{},"全局区：存放全局变量和静态变量以及常量",[53,10690,10691],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[53,10693,10694],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[14,10696,10697],{},[256,10698,10699],{},"内存四区意义：",[14,10701,10702],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[67,10704,10706],{"id":10705},"_511程序运行前","5.1.1程序运行前",[14,10708,10709,10710,10713],{},"​\t在程序编译后，生成了exe可执行程序，",[256,10711,10712],{},"未执行该程序前","分为两个区域",[14,10715,10716,10717],{},"​\t",[256,10718,10719],{},"代码区：",[14,10721,10722],{},"​\t\t存放 CPU 执行的机器指令",[14,10724,10725,10726,10729],{},"​\t\t代码区是",[256,10727,10728],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[14,10731,10725,10732,10735],{},[256,10733,10734],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[14,10737,10716,10738],{},[256,10739,10740],{},"全局区：",[14,10742,10743],{},"​\t\t全局变量和静态变量存放在此.",[14,10745,10746],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[14,10748,10749],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[87,10751,10753],{"className":89,"code":10752,"language":91,"meta":18,"style":18},"\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",[93,10754,10755,10760,10773,10786,10790,10795,10810,10825,10829,10838,10842,10847,10860,10873,10877,10882,10908,10934,10938,10965,10991,10995,11000,11016,11031,11035,11061,11087,11091,11116,11141,11145,11171,11197,11201,11217,11232,11258,11284,11288,11298,11302,11310],{"__ignoreMap":18},[96,10756,10757],{"class":98,"line":99},[96,10758,10759],{"class":165},"\u002F\u002F全局变量\n",[96,10761,10762,10764,10767,10769,10771],{"class":98,"line":19},[96,10763,110],{"class":102},[96,10765,10766],{"class":106}," g_a ",[96,10768,152],{"class":102},[96,10770,2021],{"class":155},[96,10772,1273],{"class":106},[96,10774,10775,10777,10780,10782,10784],{"class":98,"line":1162},[96,10776,110],{"class":102},[96,10778,10779],{"class":106}," g_b ",[96,10781,152],{"class":102},[96,10783,2021],{"class":155},[96,10785,1273],{"class":106},[96,10787,10788],{"class":98,"line":1177},[96,10789,2383],{"emptyLinePlaceholder":23},[96,10791,10792],{"class":98,"line":1183},[96,10793,10794],{"class":165},"\u002F\u002F全局常量\n",[96,10796,10797,10799,10801,10804,10806,10808],{"class":98,"line":1197},[96,10798,6776],{"class":102},[96,10800,2365],{"class":102},[96,10802,10803],{"class":106}," c_g_a ",[96,10805,152],{"class":102},[96,10807,2021],{"class":155},[96,10809,1273],{"class":106},[96,10811,10812,10814,10816,10819,10821,10823],{"class":98,"line":1203},[96,10813,6776],{"class":102},[96,10815,2365],{"class":102},[96,10817,10818],{"class":106}," c_g_b ",[96,10820,152],{"class":102},[96,10822,2021],{"class":155},[96,10824,1273],{"class":106},[96,10826,10827],{"class":98,"line":1294},[96,10828,2383],{"emptyLinePlaceholder":23},[96,10830,10831,10833,10835],{"class":98,"line":1300},[96,10832,110],{"class":102},[96,10834,1956],{"class":1946},[96,10836,10837],{"class":106},"() {\n",[96,10839,10840],{"class":98,"line":1312},[96,10841,2383],{"emptyLinePlaceholder":23},[96,10843,10844],{"class":98,"line":1595},[96,10845,10846],{"class":165},"    \u002F\u002F局部变量\n",[96,10848,10849,10851,10854,10856,10858],{"class":98,"line":1600},[96,10850,1968],{"class":102},[96,10852,10853],{"class":106}," a ",[96,10855,152],{"class":102},[96,10857,2021],{"class":155},[96,10859,1273],{"class":106},[96,10861,10862,10864,10867,10869,10871],{"class":98,"line":1606},[96,10863,1968],{"class":102},[96,10865,10866],{"class":106}," b ",[96,10868,152],{"class":102},[96,10870,2021],{"class":155},[96,10872,1273],{"class":106},[96,10874,10875],{"class":98,"line":1611},[96,10876,2383],{"emptyLinePlaceholder":23},[96,10878,10879],{"class":98,"line":1625},[96,10880,10881],{"class":165},"    \u002F\u002F打印地址\n",[96,10883,10884,10886,10888,10891,10893,10895,10897,10899,10901,10904,10906],{"class":98,"line":1630},[96,10885,6513],{"class":106},[96,10887,1151],{"class":102},[96,10889,10890],{"class":211}," \"局部变量a地址为： \"",[96,10892,1427],{"class":102},[96,10894,1641],{"class":106},[96,10896,110],{"class":102},[96,10898,536],{"class":106},[96,10900,460],{"class":102},[96,10902,10903],{"class":106},"a ",[96,10905,1151],{"class":102},[96,10907,8824],{"class":106},[96,10909,10910,10912,10914,10917,10919,10921,10923,10925,10927,10930,10932],{"class":98,"line":1636},[96,10911,6513],{"class":106},[96,10913,1151],{"class":102},[96,10915,10916],{"class":211}," \"局部变量b地址为： \"",[96,10918,1427],{"class":102},[96,10920,1641],{"class":106},[96,10922,110],{"class":102},[96,10924,536],{"class":106},[96,10926,460],{"class":102},[96,10928,10929],{"class":106},"b ",[96,10931,1151],{"class":102},[96,10933,8824],{"class":106},[96,10935,10936],{"class":98,"line":1657},[96,10937,2383],{"emptyLinePlaceholder":23},[96,10939,10940,10942,10944,10947,10949,10952,10954,10956,10958,10961,10963],{"class":98,"line":1662},[96,10941,6513],{"class":106},[96,10943,1151],{"class":102},[96,10945,10946],{"class":211}," \"全局变量g_a地址为： \"",[96,10948,1427],{"class":102},[96,10950,10951],{"class":106},"  (",[96,10953,110],{"class":102},[96,10955,536],{"class":106},[96,10957,460],{"class":102},[96,10959,10960],{"class":106},"g_a ",[96,10962,1151],{"class":102},[96,10964,8824],{"class":106},[96,10966,10967,10969,10971,10974,10976,10978,10980,10982,10984,10987,10989],{"class":98,"line":1676},[96,10968,6513],{"class":106},[96,10970,1151],{"class":102},[96,10972,10973],{"class":211}," \"全局变量g_b地址为： \"",[96,10975,1427],{"class":102},[96,10977,10951],{"class":106},[96,10979,110],{"class":102},[96,10981,536],{"class":106},[96,10983,460],{"class":102},[96,10985,10986],{"class":106},"g_b ",[96,10988,1151],{"class":102},[96,10990,8824],{"class":106},[96,10992,10993],{"class":98,"line":1681},[96,10994,2383],{"emptyLinePlaceholder":23},[96,10996,10997],{"class":98,"line":1710},[96,10998,10999],{"class":165},"    \u002F\u002F静态变量\n",[96,11001,11002,11005,11007,11010,11012,11014],{"class":98,"line":1715},[96,11003,11004],{"class":102},"    static",[96,11006,2365],{"class":102},[96,11008,11009],{"class":106}," s_a ",[96,11011,152],{"class":102},[96,11013,2021],{"class":155},[96,11015,1273],{"class":106},[96,11017,11018,11020,11022,11025,11027,11029],{"class":98,"line":1732},[96,11019,11004],{"class":102},[96,11021,2365],{"class":102},[96,11023,11024],{"class":106}," s_b ",[96,11026,152],{"class":102},[96,11028,2021],{"class":155},[96,11030,1273],{"class":106},[96,11032,11033],{"class":98,"line":1737},[96,11034,2383],{"emptyLinePlaceholder":23},[96,11036,11037,11039,11041,11044,11046,11048,11050,11052,11054,11057,11059],{"class":98,"line":1742},[96,11038,6513],{"class":106},[96,11040,1151],{"class":102},[96,11042,11043],{"class":211}," \"静态变量s_a地址为： \"",[96,11045,1427],{"class":102},[96,11047,1641],{"class":106},[96,11049,110],{"class":102},[96,11051,536],{"class":106},[96,11053,460],{"class":102},[96,11055,11056],{"class":106},"s_a ",[96,11058,1151],{"class":102},[96,11060,8824],{"class":106},[96,11062,11063,11065,11067,11070,11072,11074,11076,11078,11080,11083,11085],{"class":98,"line":1747},[96,11064,6513],{"class":106},[96,11066,1151],{"class":102},[96,11068,11069],{"class":211}," \"静态变量s_b地址为： \"",[96,11071,1427],{"class":102},[96,11073,1641],{"class":106},[96,11075,110],{"class":102},[96,11077,536],{"class":106},[96,11079,460],{"class":102},[96,11081,11082],{"class":106},"s_b ",[96,11084,1151],{"class":102},[96,11086,8824],{"class":106},[96,11088,11089],{"class":98,"line":1761},[96,11090,2383],{"emptyLinePlaceholder":23},[96,11092,11093,11095,11097,11100,11102,11104,11106,11108,11110,11112,11114],{"class":98,"line":1766},[96,11094,6513],{"class":106},[96,11096,1151],{"class":102},[96,11098,11099],{"class":211}," \"字符串常量地址为： \"",[96,11101,1427],{"class":102},[96,11103,1641],{"class":106},[96,11105,110],{"class":102},[96,11107,536],{"class":106},[96,11109,460],{"class":102},[96,11111,1169],{"class":211},[96,11113,1427],{"class":102},[96,11115,8824],{"class":106},[96,11117,11118,11120,11122,11124,11126,11128,11130,11132,11134,11137,11139],{"class":98,"line":2560},[96,11119,6513],{"class":106},[96,11121,1151],{"class":102},[96,11123,11099],{"class":211},[96,11125,1427],{"class":102},[96,11127,1641],{"class":106},[96,11129,110],{"class":102},[96,11131,536],{"class":106},[96,11133,460],{"class":102},[96,11135,11136],{"class":211},"\"hello world1\"",[96,11138,1427],{"class":102},[96,11140,8824],{"class":106},[96,11142,11143],{"class":98,"line":2574},[96,11144,2383],{"emptyLinePlaceholder":23},[96,11146,11147,11149,11151,11154,11156,11158,11160,11162,11164,11167,11169],{"class":98,"line":2582},[96,11148,6513],{"class":106},[96,11150,1151],{"class":102},[96,11152,11153],{"class":211}," \"全局常量c_g_a地址为： \"",[96,11155,1427],{"class":102},[96,11157,1641],{"class":106},[96,11159,110],{"class":102},[96,11161,536],{"class":106},[96,11163,460],{"class":102},[96,11165,11166],{"class":106},"c_g_a ",[96,11168,1151],{"class":102},[96,11170,8824],{"class":106},[96,11172,11173,11175,11177,11180,11182,11184,11186,11188,11190,11193,11195],{"class":98,"line":2587},[96,11174,6513],{"class":106},[96,11176,1151],{"class":102},[96,11178,11179],{"class":211}," \"全局常量c_g_b地址为： \"",[96,11181,1427],{"class":102},[96,11183,1641],{"class":106},[96,11185,110],{"class":102},[96,11187,536],{"class":106},[96,11189,460],{"class":102},[96,11191,11192],{"class":106},"c_g_b ",[96,11194,1151],{"class":102},[96,11196,8824],{"class":106},[96,11198,11199],{"class":98,"line":2593},[96,11200,2383],{"emptyLinePlaceholder":23},[96,11202,11203,11206,11208,11211,11213,11215],{"class":98,"line":2599},[96,11204,11205],{"class":102},"    const",[96,11207,2365],{"class":102},[96,11209,11210],{"class":106}," c_l_a ",[96,11212,152],{"class":102},[96,11214,2021],{"class":155},[96,11216,1273],{"class":106},[96,11218,11219,11221,11223,11226,11228,11230],{"class":98,"line":2604},[96,11220,11205],{"class":102},[96,11222,2365],{"class":102},[96,11224,11225],{"class":106}," c_l_b ",[96,11227,152],{"class":102},[96,11229,2021],{"class":155},[96,11231,1273],{"class":106},[96,11233,11234,11236,11238,11241,11243,11245,11247,11249,11251,11254,11256],{"class":98,"line":7932},[96,11235,6513],{"class":106},[96,11237,1151],{"class":102},[96,11239,11240],{"class":211}," \"局部常量c_l_a地址为： \"",[96,11242,1427],{"class":102},[96,11244,1641],{"class":106},[96,11246,110],{"class":102},[96,11248,536],{"class":106},[96,11250,460],{"class":102},[96,11252,11253],{"class":106},"c_l_a ",[96,11255,1151],{"class":102},[96,11257,8824],{"class":106},[96,11259,11260,11262,11264,11267,11269,11271,11273,11275,11277,11280,11282],{"class":98,"line":7956},[96,11261,6513],{"class":106},[96,11263,1151],{"class":102},[96,11265,11266],{"class":211}," \"局部常量c_l_b地址为： \"",[96,11268,1427],{"class":102},[96,11270,1641],{"class":106},[96,11272,110],{"class":102},[96,11274,536],{"class":106},[96,11276,460],{"class":102},[96,11278,11279],{"class":106},"c_l_b ",[96,11281,1151],{"class":102},[96,11283,8824],{"class":106},[96,11285,11286],{"class":98,"line":7961},[96,11287,2383],{"emptyLinePlaceholder":23},[96,11289,11290,11292,11294,11296],{"class":98,"line":7967},[96,11291,2286],{"class":1946},[96,11293,107],{"class":106},[96,11295,2291],{"class":211},[96,11297,2702],{"class":106},[96,11299,11300],{"class":98,"line":7994},[96,11301,2383],{"emptyLinePlaceholder":23},[96,11303,11304,11306,11308],{"class":98,"line":7999},[96,11305,4073],{"class":102},[96,11307,4076],{"class":155},[96,11309,1273],{"class":106},[96,11311,11312],{"class":98,"line":8005},[96,11313,1548],{"class":106},[14,11315,11316],{},"总结：",[1114,11318,11319,11322,11325,11328],{},[53,11320,11321],{},"c++中程序运行前分为全局区和代码区",[53,11323,11324],{},"代码区特点是共享和只读",[53,11326,11327],{},"全局区中存放全局变量、静态变量、常量",[53,11329,11330],{},"常量区中存放const修饰的全局常量和字符串常量",[67,11332,11334],{"id":11333},"_512程序运行后","5.1.2程序运行后",[50,11336,11337],{},[53,11338,11339],{},"栈区：",[1114,11341,11342,11349],{},[53,11343,11344,11345,11348],{},"由编译器自动分配释放, 存放",[256,11346,11347],{},"函数的参数值,局部变量","等",[53,11350,11351,11352,11355],{},"注意事项：",[256,11353,11354],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[87,11357,11359],{"className":89,"code":11358,"language":91,"meta":18,"style":18},"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",[93,11360,11361,11372,11376,11391,11403,11407,11411,11419,11424,11439,11457,11474,11484,11492],{"__ignoreMap":18},[96,11362,11363,11365,11367,11370],{"class":98,"line":99},[96,11364,110],{"class":102},[96,11366,6502],{"class":102},[96,11368,11369],{"class":1946}," func",[96,11371,1959],{"class":106},[96,11373,11374],{"class":98,"line":19},[96,11375,1529],{"class":106},[96,11377,11378,11380,11382,11384,11386,11388],{"class":98,"line":1162},[96,11379,1968],{"class":102},[96,11381,10853],{"class":106},[96,11383,152],{"class":102},[96,11385,2021],{"class":155},[96,11387,162],{"class":106},[96,11389,11390],{"class":165}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[96,11392,11393,11395,11397,11400],{"class":98,"line":1177},[96,11394,4073],{"class":102},[96,11396,10568],{"class":102},[96,11398,11399],{"class":106},"a;",[96,11401,11402],{"class":165}," \u002F\u002F放回局部变量的地址\n",[96,11404,11405],{"class":98,"line":1183},[96,11406,1548],{"class":106},[96,11408,11409],{"class":98,"line":1197},[96,11410,2383],{"emptyLinePlaceholder":23},[96,11412,11413,11415,11417],{"class":98,"line":1203},[96,11414,110],{"class":102},[96,11416,1956],{"class":1946},[96,11418,10837],{"class":106},[96,11420,11421],{"class":98,"line":1294},[96,11422,11423],{"class":165},"    \u002F\u002F接受func的返回值\n",[96,11425,11426,11428,11430,11433,11435,11437],{"class":98,"line":1300},[96,11427,1968],{"class":102},[96,11429,6502],{"class":102},[96,11431,11432],{"class":106},"p ",[96,11434,152],{"class":102},[96,11436,11369],{"class":1946},[96,11438,5620],{"class":106},[96,11440,11441,11443,11445,11447,11449,11451,11454],{"class":98,"line":1312},[96,11442,6513],{"class":106},[96,11444,1151],{"class":102},[96,11446,6502],{"class":102},[96,11448,11432],{"class":106},[96,11450,1151],{"class":102},[96,11452,11453],{"class":106}," endl;",[96,11455,11456],{"class":165}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[96,11458,11459,11461,11463,11465,11467,11469,11471],{"class":98,"line":1595},[96,11460,6513],{"class":106},[96,11462,1151],{"class":102},[96,11464,6502],{"class":102},[96,11466,11432],{"class":106},[96,11468,1151],{"class":102},[96,11470,11453],{"class":106},[96,11472,11473],{"class":165}," \u002F\u002F第二次这个数据不再保留\n",[96,11475,11476,11478,11480,11482],{"class":98,"line":1600},[96,11477,2286],{"class":1946},[96,11479,107],{"class":106},[96,11481,2291],{"class":211},[96,11483,2702],{"class":106},[96,11485,11486,11488,11490],{"class":98,"line":1606},[96,11487,4073],{"class":102},[96,11489,4076],{"class":155},[96,11491,1273],{"class":106},[96,11493,11494],{"class":98,"line":1611},[96,11495,1548],{"class":106},[14,11497,11498],{},"输出结果：",[14,11500,11501],{},[1445,11502],{"alt":11503,"src":11504},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[14,11506,11507],{},"总结：不要返回局部变量的地址",[50,11509,11510],{"start":19},[53,11511,11512],{},"堆区",[1114,11514,11515,11518],{},[53,11516,11517],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[53,11519,11520],{},"在c++中主要利用new在堆区开辟内存",[87,11522,11524],{"className":89,"code":11523,"language":91,"meta":18,"style":18},"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",[93,11525,11526,11541,11545,11550,11571,11578,11582,11590,11594,11599,11613,11625],{"__ignoreMap":18},[96,11527,11528,11530,11533,11536,11538],{"class":98,"line":99},[96,11529,110],{"class":102},[96,11531,11532],{"class":102},"  *",[96,11534,11535],{"class":1946},"func",[96,11537,2410],{"class":106},[96,11539,11540],{"class":165},"  \u002F\u002F函数返回指针\n",[96,11542,11543],{"class":98,"line":19},[96,11544,1529],{"class":106},[96,11546,11547],{"class":98,"line":1162},[96,11548,11549],{"class":165},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[96,11551,11552,11554,11556,11558,11560,11563,11565,11567,11569],{"class":98,"line":1177},[96,11553,4130],{"class":102},[96,11555,6502],{"class":102},[96,11557,14],{"class":106},[96,11559,152],{"class":102},[96,11561,11562],{"class":102}," new",[96,11564,2365],{"class":102},[96,11566,107],{"class":106},[96,11568,553],{"class":155},[96,11570,2702],{"class":106},[96,11572,11573,11575],{"class":98,"line":1183},[96,11574,4364],{"class":102},[96,11576,11577],{"class":106}," p;\n",[96,11579,11580],{"class":98,"line":1197},[96,11581,1548],{"class":106},[96,11583,11584,11586,11588],{"class":98,"line":1203},[96,11585,110],{"class":102},[96,11587,1956],{"class":1946},[96,11589,1959],{"class":106},[96,11591,11592],{"class":98,"line":1294},[96,11593,1529],{"class":106},[96,11595,11596],{"class":98,"line":1300},[96,11597,11598],{"class":165},"    \u002F\u002F在堆区开辟数据\n",[96,11600,11601,11603,11605,11607,11609,11611],{"class":98,"line":1312},[96,11602,1968],{"class":102},[96,11604,6502],{"class":102},[96,11606,14],{"class":106},[96,11608,152],{"class":102},[96,11610,11535],{"class":1946},[96,11612,5620],{"class":106},[96,11614,11615,11617,11619,11621,11623],{"class":98,"line":1595},[96,11616,1534],{"class":106},[96,11618,6403],{"class":102},[96,11620,14],{"class":106},[96,11622,1151],{"class":102},[96,11624,1174],{"class":106},[96,11626,11627],{"class":98,"line":1600},[96,11628,1548],{"class":106},[14,11630,11631],{},"图片展示：",[14,11633,11634],{},[1445,11635],{"alt":11503,"src":11636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[14,11638,11639],{},"堆区内存由程序员管生死！！！",[50,11641,11642],{"start":1162},[53,11643,11644],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[14,11646,11647],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[14,11649,11650,11651],{},"​语法：",[93,11652,11653],{}," new 数据类型",[14,11655,11656],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[87,11658,11660],{"className":89,"code":11659,"language":91,"meta":18,"style":18},"\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",[93,11661,11662,11667,11677,11681,11686,11691,11713,11717,11725,11729,11743,11755,11767,11779,11784,11789,11800,11804,11809,11817,11821,11826,11848,11874,11878,11896,11900,11926,11930,11942,11946,11951,11956,11964,11968,11972,11980,11984,11990,11996],{"__ignoreMap":18},[96,11663,11664],{"class":98,"line":99},[96,11665,11666],{"class":165},"\u002F\u002F1.new的基本语法\n",[96,11668,11669,11671,11673,11675],{"class":98,"line":19},[96,11670,110],{"class":102},[96,11672,6502],{"class":102},[96,11674,11535],{"class":1946},[96,11676,1959],{"class":106},[96,11678,11679],{"class":98,"line":1162},[96,11680,1529],{"class":106},[96,11682,11683],{"class":98,"line":1177},[96,11684,11685],{"class":165},"    \u002F\u002F在堆区创建整型数据\n",[96,11687,11688],{"class":98,"line":1183},[96,11689,11690],{"class":165},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[96,11692,11693,11695,11697,11699,11702,11704,11706,11708,11710],{"class":98,"line":1197},[96,11694,1968],{"class":102},[96,11696,6502],{"class":102},[96,11698,14],{"class":106},[96,11700,11701],{"class":102},"=new",[96,11703,2365],{"class":102},[96,11705,107],{"class":106},[96,11707,553],{"class":155},[96,11709,5950],{"class":106},[96,11711,11712],{"class":165},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[96,11714,11715],{"class":98,"line":1203},[96,11716,1548],{"class":106},[96,11718,11719,11721,11723],{"class":98,"line":1294},[96,11720,5348],{"class":102},[96,11722,5572],{"class":1946},[96,11724,1959],{"class":106},[96,11726,11727],{"class":98,"line":1300},[96,11728,1529],{"class":106},[96,11730,11731,11733,11735,11737,11739,11741],{"class":98,"line":1312},[96,11732,1968],{"class":102},[96,11734,6502],{"class":102},[96,11736,14],{"class":106},[96,11738,152],{"class":102},[96,11740,11535],{"class":1946},[96,11742,5620],{"class":106},[96,11744,11745,11747,11749,11751,11753],{"class":98,"line":1595},[96,11746,1534],{"class":106},[96,11748,6403],{"class":102},[96,11750,14],{"class":106},[96,11752,1151],{"class":102},[96,11754,1174],{"class":106},[96,11756,11757,11759,11761,11763,11765],{"class":98,"line":1600},[96,11758,1534],{"class":106},[96,11760,6403],{"class":102},[96,11762,14],{"class":106},[96,11764,1151],{"class":102},[96,11766,1174],{"class":106},[96,11768,11769,11771,11773,11775,11777],{"class":98,"line":1606},[96,11770,1534],{"class":106},[96,11772,6403],{"class":102},[96,11774,14],{"class":106},[96,11776,1151],{"class":102},[96,11778,1174],{"class":106},[96,11780,11781],{"class":98,"line":1611},[96,11782,11783],{"class":165},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[96,11785,11786],{"class":98,"line":1625},[96,11787,11788],{"class":165},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[96,11790,11791,11794,11797],{"class":98,"line":1630},[96,11792,11793],{"class":102},"    delete",[96,11795,11796],{"class":106}," p;",[96,11798,11799],{"class":165},"\u002F\u002F删除这块地址\n",[96,11801,11802],{"class":98,"line":1636},[96,11803,1548],{"class":106},[96,11805,11806],{"class":98,"line":1657},[96,11807,11808],{"class":165},"\u002F\u002F2.在堆区利用new开辟数组\n",[96,11810,11811,11813,11815],{"class":98,"line":1662},[96,11812,5348],{"class":102},[96,11814,5641],{"class":1946},[96,11816,1959],{"class":106},[96,11818,11819],{"class":98,"line":1676},[96,11820,1529],{"class":106},[96,11822,11823],{"class":98,"line":1681},[96,11824,11825],{"class":165},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[96,11827,11828,11830,11832,11834,11836,11838,11840,11842,11845],{"class":98,"line":1710},[96,11829,1968],{"class":102},[96,11831,6502],{"class":102},[96,11833,3863],{"class":106},[96,11835,11701],{"class":102},[96,11837,2365],{"class":102},[96,11839,997],{"class":106},[96,11841,553],{"class":155},[96,11843,11844],{"class":106},"];",[96,11846,11847],{"class":165},"\u002F\u002F10代表数组有10个元素\n",[96,11849,11850,11852,11854,11856,11858,11860,11862,11864,11866,11868,11870,11872],{"class":98,"line":1715},[96,11851,3184],{"class":102},[96,11853,1641],{"class":106},[96,11855,110],{"class":102},[96,11857,3015],{"class":106},[96,11859,152],{"class":102},[96,11861,298],{"class":155},[96,11863,3022],{"class":106},[96,11865,1017],{"class":102},[96,11867,553],{"class":155},[96,11869,3022],{"class":106},[96,11871,2275],{"class":102},[96,11873,113],{"class":106},[96,11875,11876],{"class":98,"line":1732},[96,11877,2013],{"class":106},[96,11879,11880,11883,11885,11887,11889,11891,11893],{"class":98,"line":1737},[96,11881,11882],{"class":106},"        arr[i]",[96,11884,152],{"class":102},[96,11886,548],{"class":106},[96,11888,588],{"class":102},[96,11890,418],{"class":155},[96,11892,162],{"class":106},[96,11894,11895],{"class":165},"\u002F\u002F给10个元素赋值100～109\n",[96,11897,11898],{"class":98,"line":1742},[96,11899,2170],{"class":106},[96,11901,11902,11904,11906,11908,11910,11912,11914,11916,11918,11920,11922,11924],{"class":98,"line":1747},[96,11903,3184],{"class":102},[96,11905,1641],{"class":106},[96,11907,110],{"class":102},[96,11909,3015],{"class":106},[96,11911,152],{"class":102},[96,11913,298],{"class":155},[96,11915,3022],{"class":106},[96,11917,1017],{"class":102},[96,11919,553],{"class":155},[96,11921,3022],{"class":106},[96,11923,2275],{"class":102},[96,11925,113],{"class":106},[96,11927,11928],{"class":98,"line":1761},[96,11929,2013],{"class":106},[96,11931,11932,11934,11936,11938,11940],{"class":98,"line":1766},[96,11933,3434],{"class":106},[96,11935,1151],{"class":102},[96,11937,4337],{"class":106},[96,11939,1151],{"class":102},[96,11941,1174],{"class":106},[96,11943,11944],{"class":98,"line":2560},[96,11945,2170],{"class":106},[96,11947,11948],{"class":98,"line":2574},[96,11949,11950],{"class":165},"    \u002F\u002F释放堆区数组\n",[96,11952,11953],{"class":98,"line":2582},[96,11954,11955],{"class":165},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[96,11957,11958,11961],{"class":98,"line":2587},[96,11959,11960],{"class":102},"    delete[]",[96,11962,11963],{"class":106}," arr;\n",[96,11965,11966],{"class":98,"line":2593},[96,11967,1548],{"class":106},[96,11969,11970],{"class":98,"line":2599},[96,11971,2383],{"emptyLinePlaceholder":23},[96,11973,11974,11976,11978],{"class":98,"line":2604},[96,11975,110],{"class":102},[96,11977,1956],{"class":1946},[96,11979,1959],{"class":106},[96,11981,11982],{"class":98,"line":7932},[96,11983,1529],{"class":106},[96,11985,11986,11988],{"class":98,"line":7956},[96,11987,5617],{"class":1946},[96,11989,5620],{"class":106},[96,11991,11992,11994],{"class":98,"line":7961},[96,11993,5686],{"class":1946},[96,11995,5620],{"class":106},[96,11997,11998],{"class":98,"line":7967},[96,11999,1548],{"class":106},[5110,12001,12002],{},"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":18,"searchDepth":19,"depth":19,"links":12004},[12005],{"id":10673,"depth":19,"text":10674,"children":12006},[12007,12008],{"id":10705,"depth":1162,"text":10706},{"id":11333,"depth":1162,"text":11334},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10665,"description":18},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12015,"title":12016,"body":12017,"description":18,"extension":21,"meta":13498,"navigation":23,"path":13499,"seo":13500,"stem":13501,"__hash__":13502},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12018,"toc":13490},[12019,12022,12026,12029,12032,12201,12205,12210,12227,12232,12384,12388,12391,12394,12788,12792,12795,12800,12803,13115,13119,13125,13285,13287,13295,13299,13302,13309,13487],[10,12020,12016],{"id":12021},"_6引用",[38,12023,12025],{"id":12024},"_61引用基本用法","6.1引用基本用法",[14,12027,12028],{},"引用的本质：给变量起别名",[14,12030,12031],{},"语法：数据类型 &别名=原名",[87,12033,12035],{"className":89,"code":12034,"language":91,"meta":18,"style":18},"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",[93,12036,12037,12045,12049,12061,12073,12077,12096,12115,12119,12130,12134,12153,12171,12175,12185,12189,12197],{"__ignoreMap":18},[96,12038,12039,12041,12043],{"class":98,"line":99},[96,12040,110],{"class":102},[96,12042,1956],{"class":1946},[96,12044,10837],{"class":106},[96,12046,12047],{"class":98,"line":19},[96,12048,2383],{"emptyLinePlaceholder":23},[96,12050,12051,12053,12055,12057,12059],{"class":98,"line":1162},[96,12052,1968],{"class":102},[96,12054,10853],{"class":106},[96,12056,152],{"class":102},[96,12058,2021],{"class":155},[96,12060,1273],{"class":106},[96,12062,12063,12065,12067,12069,12071],{"class":98,"line":1177},[96,12064,1968],{"class":102},[96,12066,10568],{"class":102},[96,12068,10929],{"class":106},[96,12070,152],{"class":102},[96,12072,1415],{"class":106},[96,12074,12075],{"class":98,"line":1183},[96,12076,2383],{"emptyLinePlaceholder":23},[96,12078,12079,12081,12083,12086,12088,12090,12092,12094],{"class":98,"line":1197},[96,12080,6513],{"class":106},[96,12082,1151],{"class":102},[96,12084,12085],{"class":211}," \"a = \"",[96,12087,1427],{"class":102},[96,12089,10853],{"class":106},[96,12091,1151],{"class":102},[96,12093,11453],{"class":106},[96,12095,7252],{"class":165},[96,12097,12098,12100,12102,12105,12107,12109,12111,12113],{"class":98,"line":1203},[96,12099,6513],{"class":106},[96,12101,1151],{"class":102},[96,12103,12104],{"class":211}," \"b = \"",[96,12106,1427],{"class":102},[96,12108,10866],{"class":106},[96,12110,1151],{"class":102},[96,12112,11453],{"class":106},[96,12114,7252],{"class":165},[96,12116,12117],{"class":98,"line":1294},[96,12118,2383],{"emptyLinePlaceholder":23},[96,12120,12121,12124,12126,12128],{"class":98,"line":1300},[96,12122,12123],{"class":106},"    b ",[96,12125,152],{"class":102},[96,12127,5738],{"class":155},[96,12129,1273],{"class":106},[96,12131,12132],{"class":98,"line":1312},[96,12133,2383],{"emptyLinePlaceholder":23},[96,12135,12136,12138,12140,12142,12144,12146,12148,12150],{"class":98,"line":1595},[96,12137,6513],{"class":106},[96,12139,1151],{"class":102},[96,12141,12085],{"class":211},[96,12143,1427],{"class":102},[96,12145,10853],{"class":106},[96,12147,1151],{"class":102},[96,12149,11453],{"class":106},[96,12151,12152],{"class":165},"\u002F\u002F100\n",[96,12154,12155,12157,12159,12161,12163,12165,12167,12169],{"class":98,"line":1600},[96,12156,6513],{"class":106},[96,12158,1151],{"class":102},[96,12160,12104],{"class":211},[96,12162,1427],{"class":102},[96,12164,10866],{"class":106},[96,12166,1151],{"class":102},[96,12168,11453],{"class":106},[96,12170,12152],{"class":165},[96,12172,12173],{"class":98,"line":1606},[96,12174,2383],{"emptyLinePlaceholder":23},[96,12176,12177,12179,12181,12183],{"class":98,"line":1611},[96,12178,2286],{"class":1946},[96,12180,107],{"class":106},[96,12182,2291],{"class":211},[96,12184,2702],{"class":106},[96,12186,12187],{"class":98,"line":1625},[96,12188,2383],{"emptyLinePlaceholder":23},[96,12190,12191,12193,12195],{"class":98,"line":1630},[96,12192,4073],{"class":102},[96,12194,4076],{"class":155},[96,12196,1273],{"class":106},[96,12198,12199],{"class":98,"line":1636},[96,12200,1548],{"class":106},[38,12202,12204],{"id":12203},"_62引用的注意事项","6.2引用的注意事项",[50,12206,12207],{},[53,12208,12209],{},"引用必须要初始化",[87,12211,12213],{"className":89,"code":12212,"language":91,"meta":18,"style":18},"int &b;\u002F\u002F非常错误！\n",[93,12214,12215],{"__ignoreMap":18},[96,12216,12217,12219,12221,12224],{"class":98,"line":99},[96,12218,110],{"class":102},[96,12220,10568],{"class":102},[96,12222,12223],{"class":106},"b;",[96,12225,12226],{"class":165},"\u002F\u002F非常错误！\n",[50,12228,12229],{"start":19},[53,12230,12231],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[87,12233,12235],{"className":89,"code":12234,"language":91,"meta":18,"style":18},"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",[93,12236,12237,12245,12257,12269,12277,12293,12306,12324,12342,12362,12372,12380],{"__ignoreMap":18},[96,12238,12239,12241,12243],{"class":98,"line":99},[96,12240,110],{"class":102},[96,12242,1956],{"class":1946},[96,12244,10837],{"class":106},[96,12246,12247,12249,12251,12253,12255],{"class":98,"line":19},[96,12248,1968],{"class":102},[96,12250,10853],{"class":106},[96,12252,152],{"class":102},[96,12254,2021],{"class":155},[96,12256,1273],{"class":106},[96,12258,12259,12261,12263,12265,12267],{"class":98,"line":1162},[96,12260,1968],{"class":102},[96,12262,10866],{"class":106},[96,12264,152],{"class":102},[96,12266,8934],{"class":155},[96,12268,1273],{"class":106},[96,12270,12271,12274],{"class":98,"line":1177},[96,12272,12273],{"class":165},"    \u002F\u002Fint &c;",[96,12275,12276],{"class":165}," \u002F\u002F错误，引用必须初始化\n",[96,12278,12279,12281,12283,12285,12287,12290],{"class":98,"line":1183},[96,12280,1968],{"class":102},[96,12282,10568],{"class":102},[96,12284,2929],{"class":106},[96,12286,152],{"class":102},[96,12288,12289],{"class":106}," a;",[96,12291,12292],{"class":165}," \u002F\u002F一旦初始化后，就不可以更改\n",[96,12294,12295,12298,12300,12303],{"class":98,"line":1197},[96,12296,12297],{"class":106},"    c ",[96,12299,152],{"class":102},[96,12301,12302],{"class":106}," b;",[96,12304,12305],{"class":165}," \u002F\u002F这是赋值操作，不是更改引用\n",[96,12307,12308,12310,12312,12314,12316,12318,12320,12322],{"class":98,"line":1203},[96,12309,6513],{"class":106},[96,12311,1151],{"class":102},[96,12313,12085],{"class":211},[96,12315,1427],{"class":102},[96,12317,10853],{"class":106},[96,12319,1151],{"class":102},[96,12321,11453],{"class":106},[96,12323,7237],{"class":165},[96,12325,12326,12328,12330,12332,12334,12336,12338,12340],{"class":98,"line":1294},[96,12327,6513],{"class":106},[96,12329,1151],{"class":102},[96,12331,12104],{"class":211},[96,12333,1427],{"class":102},[96,12335,10866],{"class":106},[96,12337,1151],{"class":102},[96,12339,11453],{"class":106},[96,12341,7237],{"class":165},[96,12343,12344,12346,12348,12351,12353,12356,12358,12360],{"class":98,"line":1300},[96,12345,6513],{"class":106},[96,12347,1151],{"class":102},[96,12349,12350],{"class":211}," \"c = \"",[96,12352,1427],{"class":102},[96,12354,12355],{"class":106}," c ",[96,12357,1151],{"class":102},[96,12359,11453],{"class":106},[96,12361,7237],{"class":165},[96,12363,12364,12366,12368,12370],{"class":98,"line":1312},[96,12365,2286],{"class":1946},[96,12367,107],{"class":106},[96,12369,2291],{"class":211},[96,12371,2702],{"class":106},[96,12373,12374,12376,12378],{"class":98,"line":1595},[96,12375,4073],{"class":102},[96,12377,4076],{"class":155},[96,12379,1273],{"class":106},[96,12381,12382],{"class":98,"line":1600},[96,12383,1548],{"class":106},[38,12385,12387],{"id":12386},"_63引用做函数参数","6.3引用做函数参数",[14,12389,12390],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[14,12392,12393],{},"优点：可以简化指针修改实参",[87,12395,12397],{"className":89,"code":12396,"language":91,"meta":18,"style":18},"\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",[93,12398,12399,12404,12427,12438,12448,12457,12461,12465,12470,12492,12504,12516,12526,12530,12534,12539,12561,12571,12579,12587,12591,12595,12603,12607,12619,12631,12635,12646,12672,12676,12696,12720,12724,12734,12758,12762,12772,12776,12784],{"__ignoreMap":18},[96,12400,12401],{"class":98,"line":99},[96,12402,12403],{"class":165},"\u002F\u002F1. 值传递\n",[96,12405,12406,12408,12411,12413,12415,12417,12420,12422,12424],{"class":98,"line":19},[96,12407,5348],{"class":102},[96,12409,12410],{"class":1946}," mySwap01",[96,12412,107],{"class":106},[96,12414,110],{"class":102},[96,12416,1381],{"class":5200},[96,12418,12419],{"class":106},", ",[96,12421,110],{"class":102},[96,12423,2816],{"class":5200},[96,12425,12426],{"class":106},") {\n",[96,12428,12429,12431,12434,12436],{"class":98,"line":1162},[96,12430,1968],{"class":102},[96,12432,12433],{"class":106}," temp ",[96,12435,152],{"class":102},[96,12437,1415],{"class":106},[96,12439,12440,12443,12445],{"class":98,"line":1177},[96,12441,12442],{"class":106},"    a ",[96,12444,152],{"class":102},[96,12446,12447],{"class":106}," b;\n",[96,12449,12450,12452,12454],{"class":98,"line":1183},[96,12451,12123],{"class":106},[96,12453,152],{"class":102},[96,12455,12456],{"class":106}," temp;\n",[96,12458,12459],{"class":98,"line":1197},[96,12460,1548],{"class":106},[96,12462,12463],{"class":98,"line":1203},[96,12464,2383],{"emptyLinePlaceholder":23},[96,12466,12467],{"class":98,"line":1294},[96,12468,12469],{"class":165},"\u002F\u002F2. 地址传递\n",[96,12471,12472,12474,12477,12479,12482,12484,12486,12488,12490],{"class":98,"line":1300},[96,12473,5348],{"class":102},[96,12475,12476],{"class":1946}," mySwap02",[96,12478,107],{"class":106},[96,12480,12481],{"class":102},"int*",[96,12483,1381],{"class":5200},[96,12485,12419],{"class":106},[96,12487,12481],{"class":102},[96,12489,2816],{"class":5200},[96,12491,12426],{"class":106},[96,12493,12494,12496,12498,12500,12502],{"class":98,"line":1312},[96,12495,1968],{"class":102},[96,12497,12433],{"class":106},[96,12499,152],{"class":102},[96,12501,6502],{"class":102},[96,12503,6181],{"class":106},[96,12505,12506,12508,12510,12512,12514],{"class":98,"line":1595},[96,12507,6387],{"class":102},[96,12509,10903],{"class":106},[96,12511,152],{"class":102},[96,12513,6502],{"class":102},[96,12515,6053],{"class":106},[96,12517,12518,12520,12522,12524],{"class":98,"line":1600},[96,12519,6387],{"class":102},[96,12521,10929],{"class":106},[96,12523,152],{"class":102},[96,12525,12456],{"class":106},[96,12527,12528],{"class":98,"line":1606},[96,12529,1548],{"class":106},[96,12531,12532],{"class":98,"line":1611},[96,12533,2383],{"emptyLinePlaceholder":23},[96,12535,12536],{"class":98,"line":1625},[96,12537,12538],{"class":165},"\u002F\u002F3. 引用传递\n",[96,12540,12541,12543,12546,12548,12551,12553,12555,12557,12559],{"class":98,"line":1630},[96,12542,5348],{"class":102},[96,12544,12545],{"class":1946}," mySwap03",[96,12547,107],{"class":106},[96,12549,12550],{"class":102},"int&",[96,12552,1381],{"class":5200},[96,12554,12419],{"class":106},[96,12556,12550],{"class":102},[96,12558,2816],{"class":5200},[96,12560,12426],{"class":106},[96,12562,12563,12565,12567,12569],{"class":98,"line":1636},[96,12564,1968],{"class":102},[96,12566,12433],{"class":106},[96,12568,152],{"class":102},[96,12570,1415],{"class":106},[96,12572,12573,12575,12577],{"class":98,"line":1657},[96,12574,12442],{"class":106},[96,12576,152],{"class":102},[96,12578,12447],{"class":106},[96,12580,12581,12583,12585],{"class":98,"line":1662},[96,12582,12123],{"class":106},[96,12584,152],{"class":102},[96,12586,12456],{"class":106},[96,12588,12589],{"class":98,"line":1676},[96,12590,1548],{"class":106},[96,12592,12593],{"class":98,"line":1681},[96,12594,2383],{"emptyLinePlaceholder":23},[96,12596,12597,12599,12601],{"class":98,"line":1710},[96,12598,110],{"class":102},[96,12600,1956],{"class":1946},[96,12602,10837],{"class":106},[96,12604,12605],{"class":98,"line":1715},[96,12606,2383],{"emptyLinePlaceholder":23},[96,12608,12609,12611,12613,12615,12617],{"class":98,"line":1732},[96,12610,1968],{"class":102},[96,12612,10853],{"class":106},[96,12614,152],{"class":102},[96,12616,2021],{"class":155},[96,12618,1273],{"class":106},[96,12620,12621,12623,12625,12627,12629],{"class":98,"line":1737},[96,12622,1968],{"class":102},[96,12624,10866],{"class":106},[96,12626,152],{"class":102},[96,12628,8934],{"class":155},[96,12630,1273],{"class":106},[96,12632,12633],{"class":98,"line":1742},[96,12634,2383],{"emptyLinePlaceholder":23},[96,12636,12637,12640,12643],{"class":98,"line":1747},[96,12638,12639],{"class":1946},"    mySwap01",[96,12641,12642],{"class":106},"(a, b);",[96,12644,12645],{"class":165},"\u002F\u002F值传递，形参不会修饰实参\n",[96,12647,12648,12650,12652,12655,12657,12659,12661,12664,12666,12668,12670],{"class":98,"line":1761},[96,12649,6513],{"class":106},[96,12651,1151],{"class":102},[96,12653,12654],{"class":211}," \"a:\"",[96,12656,1427],{"class":102},[96,12658,10853],{"class":106},[96,12660,1151],{"class":102},[96,12662,12663],{"class":211}," \" b:\"",[96,12665,1427],{"class":102},[96,12667,10866],{"class":106},[96,12669,1151],{"class":102},[96,12671,8824],{"class":106},[96,12673,12674],{"class":98,"line":1766},[96,12675,2383],{"emptyLinePlaceholder":23},[96,12677,12678,12681,12683,12685,12688,12690,12693],{"class":98,"line":2560},[96,12679,12680],{"class":1946},"    mySwap02",[96,12682,107],{"class":106},[96,12684,460],{"class":102},[96,12686,12687],{"class":106},"a, ",[96,12689,460],{"class":102},[96,12691,12692],{"class":106},"b);",[96,12694,12695],{"class":165},"\u002F\u002F地址传递，形参会修饰实参\n",[96,12697,12698,12700,12702,12704,12706,12708,12710,12712,12714,12716,12718],{"class":98,"line":2574},[96,12699,6513],{"class":106},[96,12701,1151],{"class":102},[96,12703,12654],{"class":211},[96,12705,1427],{"class":102},[96,12707,10853],{"class":106},[96,12709,1151],{"class":102},[96,12711,12663],{"class":211},[96,12713,1427],{"class":102},[96,12715,10866],{"class":106},[96,12717,1151],{"class":102},[96,12719,8824],{"class":106},[96,12721,12722],{"class":98,"line":2582},[96,12723,2383],{"emptyLinePlaceholder":23},[96,12725,12726,12729,12731],{"class":98,"line":2587},[96,12727,12728],{"class":1946},"    mySwap03",[96,12730,12642],{"class":106},[96,12732,12733],{"class":165},"\u002F\u002F引用传递，形参会修饰实参\n",[96,12735,12736,12738,12740,12742,12744,12746,12748,12750,12752,12754,12756],{"class":98,"line":2593},[96,12737,6513],{"class":106},[96,12739,1151],{"class":102},[96,12741,12654],{"class":211},[96,12743,1427],{"class":102},[96,12745,10853],{"class":106},[96,12747,1151],{"class":102},[96,12749,12663],{"class":211},[96,12751,1427],{"class":102},[96,12753,10866],{"class":106},[96,12755,1151],{"class":102},[96,12757,8824],{"class":106},[96,12759,12760],{"class":98,"line":2599},[96,12761,2383],{"emptyLinePlaceholder":23},[96,12763,12764,12766,12768,12770],{"class":98,"line":2604},[96,12765,2286],{"class":1946},[96,12767,107],{"class":106},[96,12769,2291],{"class":211},[96,12771,2702],{"class":106},[96,12773,12774],{"class":98,"line":7932},[96,12775,2383],{"emptyLinePlaceholder":23},[96,12777,12778,12780,12782],{"class":98,"line":7956},[96,12779,4073],{"class":102},[96,12781,4076],{"class":155},[96,12783,1273],{"class":106},[96,12785,12786],{"class":98,"line":7961},[96,12787,1548],{"class":106},[38,12789,12791],{"id":12790},"_64引用做函数的返回值","6.4引用做函数的返回值",[14,12793,12794],{},"作用：引用是可以作为函数的返回值存在的",[14,12796,9009,12797],{},[256,12798,12799],{},"不要返回局部变量引用",[14,12801,12802],{},"用法：函数调用作为左值",[87,12804,12806],{"className":9925,"code":12805,"language":9927,"meta":18,"style":18},"\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",[93,12807,12808,12813,12821,12836,12842,12846,12850,12855,12863,12880,12886,12890,12894,12902,12906,12911,12925,12945,12964,12968,12973,12986,13006,13024,13028,13044,13048,13067,13085,13089,13099,13103,13111],{"__ignoreMap":18},[96,12809,12810],{"class":98,"line":99},[96,12811,12812],{"class":165},"\u002F\u002F返回局部变量引用\n",[96,12814,12815,12817,12819],{"class":98,"line":19},[96,12816,12550],{"class":102},[96,12818,5572],{"class":1946},[96,12820,10837],{"class":106},[96,12822,12823,12825,12827,12829,12831,12833],{"class":98,"line":1162},[96,12824,1968],{"class":102},[96,12826,10853],{"class":106},[96,12828,152],{"class":102},[96,12830,2021],{"class":155},[96,12832,162],{"class":106},[96,12834,12835],{"class":165}," \u002F\u002F局部变量\n",[96,12837,12838,12840],{"class":98,"line":1177},[96,12839,4073],{"class":102},[96,12841,1415],{"class":106},[96,12843,12844],{"class":98,"line":1183},[96,12845,1548],{"class":106},[96,12847,12848],{"class":98,"line":1197},[96,12849,2383],{"emptyLinePlaceholder":23},[96,12851,12852],{"class":98,"line":1203},[96,12853,12854],{"class":165},"\u002F\u002F返回静态变量引用\n",[96,12856,12857,12859,12861],{"class":98,"line":1294},[96,12858,12550],{"class":102},[96,12860,5641],{"class":1946},[96,12862,10837],{"class":106},[96,12864,12865,12867,12869,12871,12873,12875,12877],{"class":98,"line":1300},[96,12866,11004],{"class":102},[96,12868,2365],{"class":102},[96,12870,10853],{"class":106},[96,12872,152],{"class":102},[96,12874,8934],{"class":155},[96,12876,162],{"class":106},[96,12878,12879],{"class":165},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[96,12881,12882,12884],{"class":98,"line":1312},[96,12883,4073],{"class":102},[96,12885,1415],{"class":106},[96,12887,12888],{"class":98,"line":1595},[96,12889,1548],{"class":106},[96,12891,12892],{"class":98,"line":1600},[96,12893,2383],{"emptyLinePlaceholder":23},[96,12895,12896,12898,12900],{"class":98,"line":1606},[96,12897,110],{"class":102},[96,12899,1956],{"class":1946},[96,12901,10837],{"class":106},[96,12903,12904],{"class":98,"line":1611},[96,12905,2383],{"emptyLinePlaceholder":23},[96,12907,12908],{"class":98,"line":1625},[96,12909,12910],{"class":165},"    \u002F\u002F不能返回局部变量的引用\n",[96,12912,12913,12916,12919,12921,12923],{"class":98,"line":1630},[96,12914,12915],{"class":102},"    int&",[96,12917,12918],{"class":106}," ref ",[96,12920,152],{"class":102},[96,12922,5572],{"class":1946},[96,12924,5620],{"class":106},[96,12926,12927,12929,12931,12934,12936,12938,12940,12942],{"class":98,"line":1636},[96,12928,6513],{"class":106},[96,12930,1151],{"class":102},[96,12932,12933],{"class":211}," \"ref = \"",[96,12935,1427],{"class":102},[96,12937,12918],{"class":106},[96,12939,1151],{"class":102},[96,12941,11453],{"class":106},[96,12943,12944],{"class":165},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[96,12946,12947,12949,12951,12953,12955,12957,12959,12961],{"class":98,"line":1657},[96,12948,6513],{"class":106},[96,12950,1151],{"class":102},[96,12952,12933],{"class":211},[96,12954,1427],{"class":102},[96,12956,12918],{"class":106},[96,12958,1151],{"class":102},[96,12960,11453],{"class":106},[96,12962,12963],{"class":165},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[96,12965,12966],{"class":98,"line":1662},[96,12967,2383],{"emptyLinePlaceholder":23},[96,12969,12970],{"class":98,"line":1676},[96,12971,12972],{"class":165},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[96,12974,12975,12977,12980,12982,12984],{"class":98,"line":1681},[96,12976,12915],{"class":102},[96,12978,12979],{"class":106}," ref2 ",[96,12981,152],{"class":102},[96,12983,5641],{"class":1946},[96,12985,5620],{"class":106},[96,12987,12988,12990,12992,12995,12997,12999,13001,13003],{"class":98,"line":1710},[96,12989,6513],{"class":106},[96,12991,1151],{"class":102},[96,12993,12994],{"class":211}," \"ref2 = \"",[96,12996,1427],{"class":102},[96,12998,12979],{"class":106},[96,13000,1151],{"class":102},[96,13002,11453],{"class":106},[96,13004,13005],{"class":165}," \u002F\u002F20\n",[96,13007,13008,13010,13012,13014,13016,13018,13020,13022],{"class":98,"line":1715},[96,13009,6513],{"class":106},[96,13011,1151],{"class":102},[96,13013,12994],{"class":211},[96,13015,1427],{"class":102},[96,13017,12979],{"class":106},[96,13019,1151],{"class":102},[96,13021,11453],{"class":106},[96,13023,13005],{"class":165},[96,13025,13026],{"class":98,"line":1732},[96,13027,2383],{"emptyLinePlaceholder":23},[96,13029,13030,13032,13035,13037,13039,13041],{"class":98,"line":1737},[96,13031,5686],{"class":1946},[96,13033,13034],{"class":106},"() ",[96,13036,152],{"class":102},[96,13038,2982],{"class":155},[96,13040,162],{"class":106},[96,13042,13043],{"class":165},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[96,13045,13046],{"class":98,"line":1742},[96,13047,2383],{"emptyLinePlaceholder":23},[96,13049,13050,13052,13054,13056,13058,13060,13062,13064],{"class":98,"line":1747},[96,13051,6513],{"class":106},[96,13053,1151],{"class":102},[96,13055,12994],{"class":211},[96,13057,1427],{"class":102},[96,13059,12979],{"class":106},[96,13061,1151],{"class":102},[96,13063,11453],{"class":106},[96,13065,13066],{"class":165}," \u002F\u002F1000\n",[96,13068,13069,13071,13073,13075,13077,13079,13081,13083],{"class":98,"line":1761},[96,13070,6513],{"class":106},[96,13072,1151],{"class":102},[96,13074,12994],{"class":211},[96,13076,1427],{"class":102},[96,13078,12979],{"class":106},[96,13080,1151],{"class":102},[96,13082,11453],{"class":106},[96,13084,13066],{"class":165},[96,13086,13087],{"class":98,"line":1766},[96,13088,2383],{"emptyLinePlaceholder":23},[96,13090,13091,13093,13095,13097],{"class":98,"line":2560},[96,13092,2286],{"class":1946},[96,13094,107],{"class":106},[96,13096,2291],{"class":211},[96,13098,2702],{"class":106},[96,13100,13101],{"class":98,"line":2574},[96,13102,2383],{"emptyLinePlaceholder":23},[96,13104,13105,13107,13109],{"class":98,"line":2582},[96,13106,4073],{"class":102},[96,13108,4076],{"class":155},[96,13110,1273],{"class":106},[96,13112,13113],{"class":98,"line":2587},[96,13114,1548],{"class":106},[38,13116,13118],{"id":13117},"_65引用的本质","6.5引用的本质",[14,13120,13121,13122],{},"本质：",[256,13123,13124],{},"引用的本质在c++内部实现是一个指针常量.",[87,13126,13128],{"className":89,"code":13127,"language":91,"meta":18,"style":18},"\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",[93,13129,13130,13135,13151,13165,13169,13178,13190,13195,13200,13211,13224,13228,13244,13261,13265,13273,13281],{"__ignoreMap":18},[96,13131,13132],{"class":98,"line":99},[96,13133,13134],{"class":165},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[96,13136,13137,13139,13141,13143,13145,13148],{"class":98,"line":19},[96,13138,5348],{"class":102},[96,13140,11369],{"class":1946},[96,13142,107],{"class":106},[96,13144,12550],{"class":102},[96,13146,13147],{"class":5200}," ref",[96,13149,13150],{"class":106},"){\n",[96,13152,13153,13156,13158,13160,13162],{"class":98,"line":1162},[96,13154,13155],{"class":106},"    ref ",[96,13157,152],{"class":102},[96,13159,5738],{"class":155},[96,13161,162],{"class":106},[96,13163,13164],{"class":165}," \u002F\u002F ref是引用，转换为*ref = 100\n",[96,13166,13167],{"class":98,"line":1177},[96,13168,1548],{"class":106},[96,13170,13171,13173,13175],{"class":98,"line":1183},[96,13172,110],{"class":102},[96,13174,1956],{"class":1946},[96,13176,13177],{"class":106},"(){\n",[96,13179,13180,13182,13184,13186,13188],{"class":98,"line":1197},[96,13181,1968],{"class":102},[96,13183,10853],{"class":106},[96,13185,152],{"class":102},[96,13187,2021],{"class":155},[96,13189,1273],{"class":106},[96,13191,13192],{"class":98,"line":1203},[96,13193,13194],{"class":106},"    \n",[96,13196,13197],{"class":98,"line":1294},[96,13198,13199],{"class":165},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[96,13201,13202,13204,13206,13208],{"class":98,"line":1300},[96,13203,12915],{"class":102},[96,13205,12918],{"class":106},[96,13207,152],{"class":102},[96,13209,13210],{"class":106}," a; \n",[96,13212,13213,13215,13217,13219,13221],{"class":98,"line":1312},[96,13214,13155],{"class":106},[96,13216,152],{"class":102},[96,13218,8934],{"class":155},[96,13220,162],{"class":106},[96,13222,13223],{"class":165}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[96,13225,13226],{"class":98,"line":1595},[96,13227,13194],{"class":106},[96,13229,13230,13232,13234,13236,13238,13240,13242],{"class":98,"line":1600},[96,13231,6513],{"class":106},[96,13233,1151],{"class":102},[96,13235,12654],{"class":211},[96,13237,1427],{"class":102},[96,13239,10853],{"class":106},[96,13241,1151],{"class":102},[96,13243,8824],{"class":106},[96,13245,13246,13248,13250,13253,13255,13257,13259],{"class":98,"line":1606},[96,13247,6513],{"class":106},[96,13249,1151],{"class":102},[96,13251,13252],{"class":211}," \"ref:\"",[96,13254,1427],{"class":102},[96,13256,12918],{"class":106},[96,13258,1151],{"class":102},[96,13260,8824],{"class":106},[96,13262,13263],{"class":98,"line":1611},[96,13264,13194],{"class":106},[96,13266,13267,13270],{"class":98,"line":1625},[96,13268,13269],{"class":1946},"    func",[96,13271,13272],{"class":106},"(a);\n",[96,13274,13275,13277,13279],{"class":98,"line":1630},[96,13276,4073],{"class":102},[96,13278,4076],{"class":155},[96,13280,1273],{"class":106},[96,13282,13283],{"class":98,"line":1636},[96,13284,1548],{"class":106},[14,13286,11316],{},[50,13288,13289,13292],{},[53,13290,13291],{},"引用的本质，就是一个指针常量",[53,13293,13294],{},"引用一旦初始化，就不可以发生改变",[38,13296,13298],{"id":13297},"_66常量引用","6.6常量引用",[14,13300,13301],{},"作用：常量引用主要用来修饰形参",[14,13303,13304,13305,13308],{},"在函数形参列表中，可以加",[256,13306,13307],{},"const修饰形参","，防止形参改变实参",[87,13310,13312],{"className":89,"code":13311,"language":91,"meta":18,"style":18},"\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",[93,13313,13314,13319,13324,13343,13348,13361,13365,13369,13377,13381,13386,13391,13405,13409,13417,13429,13433,13438,13450,13457,13461,13471,13475,13483],{"__ignoreMap":18},[96,13315,13316],{"class":98,"line":99},[96,13317,13318],{"class":165},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[96,13320,13321],{"class":98,"line":19},[96,13322,13323],{"class":165},"\u002F\u002F加上const就不能修改实参的\n",[96,13325,13326,13328,13331,13333,13335,13338,13341],{"class":98,"line":1162},[96,13327,5348],{"class":102},[96,13329,13330],{"class":1946}," showValue",[96,13332,107],{"class":106},[96,13334,6776],{"class":102},[96,13336,13337],{"class":102}," int&",[96,13339,13340],{"class":5200}," v",[96,13342,12426],{"class":106},[96,13344,13345],{"class":98,"line":1177},[96,13346,13347],{"class":165},"    \u002F\u002Fv += 100;\n",[96,13349,13350,13352,13354,13357,13359],{"class":98,"line":1183},[96,13351,6513],{"class":106},[96,13353,1151],{"class":102},[96,13355,13356],{"class":106}," v ",[96,13358,1151],{"class":102},[96,13360,8824],{"class":106},[96,13362,13363],{"class":98,"line":1197},[96,13364,1548],{"class":106},[96,13366,13367],{"class":98,"line":1203},[96,13368,2383],{"emptyLinePlaceholder":23},[96,13370,13371,13373,13375],{"class":98,"line":1294},[96,13372,110],{"class":102},[96,13374,1956],{"class":1946},[96,13376,10837],{"class":106},[96,13378,13379],{"class":98,"line":1300},[96,13380,2383],{"emptyLinePlaceholder":23},[96,13382,13383],{"class":98,"line":1312},[96,13384,13385],{"class":165},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[96,13387,13388],{"class":98,"line":1595},[96,13389,13390],{"class":165},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[96,13392,13393,13395,13397,13399,13401,13403],{"class":98,"line":1600},[96,13394,11205],{"class":102},[96,13396,13337],{"class":102},[96,13398,12918],{"class":106},[96,13400,152],{"class":102},[96,13402,2021],{"class":155},[96,13404,1273],{"class":106},[96,13406,13407],{"class":98,"line":1606},[96,13408,2383],{"emptyLinePlaceholder":23},[96,13410,13411,13414],{"class":98,"line":1611},[96,13412,13413],{"class":165},"    \u002F\u002Fref = 100;",[96,13415,13416],{"class":165},"  \u002F\u002F加入const后不可以修改变量\n",[96,13418,13419,13421,13423,13425,13427],{"class":98,"line":1625},[96,13420,6513],{"class":106},[96,13422,1151],{"class":102},[96,13424,12918],{"class":106},[96,13426,1151],{"class":102},[96,13428,8824],{"class":106},[96,13430,13431],{"class":98,"line":1630},[96,13432,2383],{"emptyLinePlaceholder":23},[96,13434,13435],{"class":98,"line":1636},[96,13436,13437],{"class":165},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[96,13439,13440,13442,13444,13446,13448],{"class":98,"line":1657},[96,13441,1968],{"class":102},[96,13443,10853],{"class":106},[96,13445,152],{"class":102},[96,13447,2021],{"class":155},[96,13449,1273],{"class":106},[96,13451,13452,13455],{"class":98,"line":1662},[96,13453,13454],{"class":1946},"    showValue",[96,13456,13272],{"class":106},[96,13458,13459],{"class":98,"line":1676},[96,13460,2383],{"emptyLinePlaceholder":23},[96,13462,13463,13465,13467,13469],{"class":98,"line":1681},[96,13464,2286],{"class":1946},[96,13466,107],{"class":106},[96,13468,2291],{"class":211},[96,13470,2702],{"class":106},[96,13472,13473],{"class":98,"line":1710},[96,13474,2383],{"emptyLinePlaceholder":23},[96,13476,13477,13479,13481],{"class":98,"line":1715},[96,13478,4073],{"class":102},[96,13480,4076],{"class":155},[96,13482,1273],{"class":106},[96,13484,13485],{"class":98,"line":1732},[96,13486,1548],{"class":106},[5110,13488,13489],{},"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":18,"searchDepth":19,"depth":19,"links":13491},[13492,13493,13494,13495,13496,13497],{"id":12024,"depth":19,"text":12025},{"id":12203,"depth":19,"text":12204},{"id":12386,"depth":19,"text":12387},{"id":12790,"depth":19,"text":12791},{"id":13117,"depth":19,"text":13118},{"id":13297,"depth":19,"text":13298},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12016,"description":18},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13504,"title":13505,"body":13506,"description":18,"extension":21,"meta":14587,"navigation":23,"path":14588,"seo":14589,"stem":14590,"__hash__":14591},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13507,"toc":14579},[13508,13511,13515,13518,13523,13755,13757,13768,13772,13775,13783,13887,13890,13894,13897,13901,13904,13909,13931,13937,14264,14267,14271,14279,14576],[10,13509,13505],{"id":13510},"_7函数高级部分",[38,13512,13514],{"id":13513},"_71函数默认参数","7.1函数默认参数",[14,13516,13517],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[14,13519,5165,13520],{},[93,13521,13522],{}," 返回值类型  函数名 （参数= 默认值）{}",[87,13524,13526],{"className":89,"code":13525,"language":91,"meta":18,"style":18},"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",[93,13527,13528,13563,13578,13582,13586,13591,13596,13625,13645,13655,13659,13663,13671,13675,13703,13725,13729,13739,13743,13751],{"__ignoreMap":18},[96,13529,13530,13532,13534,13536,13538,13540,13542,13544,13546,13549,13551,13553,13555,13557,13559,13561],{"class":98,"line":99},[96,13531,110],{"class":102},[96,13533,11369],{"class":1946},[96,13535,107],{"class":106},[96,13537,110],{"class":102},[96,13539,1381],{"class":5200},[96,13541,12419],{"class":106},[96,13543,110],{"class":102},[96,13545,2816],{"class":5200},[96,13547,13548],{"class":102}," =",[96,13550,2021],{"class":155},[96,13552,12419],{"class":106},[96,13554,110],{"class":102},[96,13556,2832],{"class":5200},[96,13558,13548],{"class":102},[96,13560,2021],{"class":155},[96,13562,12426],{"class":106},[96,13564,13565,13567,13569,13571,13573,13575],{"class":98,"line":19},[96,13566,4073],{"class":102},[96,13568,10853],{"class":106},[96,13570,588],{"class":102},[96,13572,10866],{"class":106},[96,13574,588],{"class":102},[96,13576,13577],{"class":106}," c;\n",[96,13579,13580],{"class":98,"line":1162},[96,13581,1548],{"class":106},[96,13583,13584],{"class":98,"line":1177},[96,13585,2383],{"emptyLinePlaceholder":23},[96,13587,13588],{"class":98,"line":1183},[96,13589,13590],{"class":165},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[96,13592,13593],{"class":98,"line":1197},[96,13594,13595],{"class":165},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[96,13597,13598,13600,13603,13605,13607,13609,13611,13613,13615,13617,13619,13621,13623],{"class":98,"line":1203},[96,13599,110],{"class":102},[96,13601,13602],{"class":1946}," func2",[96,13604,107],{"class":106},[96,13606,110],{"class":102},[96,13608,1381],{"class":5200},[96,13610,13548],{"class":102},[96,13612,2021],{"class":155},[96,13614,12419],{"class":106},[96,13616,110],{"class":102},[96,13618,2816],{"class":5200},[96,13620,13548],{"class":102},[96,13622,2021],{"class":155},[96,13624,2702],{"class":106},[96,13626,13627,13629,13631,13633,13635,13637,13639,13641,13643],{"class":98,"line":1294},[96,13628,110],{"class":102},[96,13630,13602],{"class":1946},[96,13632,107],{"class":106},[96,13634,110],{"class":102},[96,13636,1381],{"class":5200},[96,13638,12419],{"class":106},[96,13640,110],{"class":102},[96,13642,2816],{"class":5200},[96,13644,12426],{"class":106},[96,13646,13647,13649,13651,13653],{"class":98,"line":1300},[96,13648,4073],{"class":102},[96,13650,10853],{"class":106},[96,13652,588],{"class":102},[96,13654,12447],{"class":106},[96,13656,13657],{"class":98,"line":1312},[96,13658,1548],{"class":106},[96,13660,13661],{"class":98,"line":1595},[96,13662,2383],{"emptyLinePlaceholder":23},[96,13664,13665,13667,13669],{"class":98,"line":1600},[96,13666,110],{"class":102},[96,13668,1956],{"class":1946},[96,13670,10837],{"class":106},[96,13672,13673],{"class":98,"line":1606},[96,13674,2383],{"emptyLinePlaceholder":23},[96,13676,13677,13679,13681,13684,13686,13688,13690,13692,13694,13696,13699,13701],{"class":98,"line":1611},[96,13678,6513],{"class":106},[96,13680,1151],{"class":102},[96,13682,13683],{"class":211}," \"ret = \"",[96,13685,1427],{"class":102},[96,13687,11369],{"class":1946},[96,13689,107],{"class":106},[96,13691,807],{"class":155},[96,13693,12419],{"class":106},[96,13695,807],{"class":155},[96,13697,13698],{"class":106},") ",[96,13700,1151],{"class":102},[96,13702,8824],{"class":106},[96,13704,13705,13707,13709,13711,13713,13715,13717,13719,13721,13723],{"class":98,"line":1625},[96,13706,6513],{"class":106},[96,13708,1151],{"class":102},[96,13710,13683],{"class":211},[96,13712,1427],{"class":102},[96,13714,11369],{"class":1946},[96,13716,107],{"class":106},[96,13718,418],{"class":155},[96,13720,13698],{"class":106},[96,13722,1151],{"class":102},[96,13724,8824],{"class":106},[96,13726,13727],{"class":98,"line":1630},[96,13728,2383],{"emptyLinePlaceholder":23},[96,13730,13731,13733,13735,13737],{"class":98,"line":1636},[96,13732,2286],{"class":1946},[96,13734,107],{"class":106},[96,13736,2291],{"class":211},[96,13738,2702],{"class":106},[96,13740,13741],{"class":98,"line":1657},[96,13742,2383],{"emptyLinePlaceholder":23},[96,13744,13745,13747,13749],{"class":98,"line":1662},[96,13746,4073],{"class":102},[96,13748,4076],{"class":155},[96,13750,1273],{"class":106},[96,13752,13753],{"class":98,"line":1676},[96,13754,1548],{"class":106},[14,13756,11316],{},[50,13758,13759,13762,13765],{},[53,13760,13761],{},"我传就用我；没传就用你",[53,13763,13764],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[53,13766,13767],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[38,13769,13771],{"id":13770},"_72函数的占位参数","7.2函数的占位参数",[14,13773,13774],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[14,13776,13777,13779,13780],{},[256,13778,5165],{}," ",[93,13781,13782],{},"返回值类型 函数名 (数据类型){}",[87,13784,13786],{"className":89,"code":13785,"language":91,"meta":18,"style":18},"\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",[93,13787,13788,13793,13811,13824,13828,13836,13840,13857,13861,13871,13875,13883],{"__ignoreMap":18},[96,13789,13790],{"class":98,"line":99},[96,13791,13792],{"class":165},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[96,13794,13795,13797,13799,13801,13803,13805,13807,13809],{"class":98,"line":19},[96,13796,5348],{"class":102},[96,13798,11369],{"class":1946},[96,13800,107],{"class":106},[96,13802,110],{"class":102},[96,13804,1381],{"class":5200},[96,13806,12419],{"class":106},[96,13808,110],{"class":102},[96,13810,12426],{"class":106},[96,13812,13813,13815,13817,13820,13822],{"class":98,"line":1162},[96,13814,6513],{"class":106},[96,13816,1151],{"class":102},[96,13818,13819],{"class":211}," \"this is func\"",[96,13821,1427],{"class":102},[96,13823,8824],{"class":106},[96,13825,13826],{"class":98,"line":1177},[96,13827,1548],{"class":106},[96,13829,13830,13832,13834],{"class":98,"line":1183},[96,13831,110],{"class":102},[96,13833,1956],{"class":1946},[96,13835,10837],{"class":106},[96,13837,13838],{"class":98,"line":1197},[96,13839,2383],{"emptyLinePlaceholder":23},[96,13841,13842,13844,13846,13848,13850,13852,13854],{"class":98,"line":1203},[96,13843,13269],{"class":1946},[96,13845,107],{"class":106},[96,13847,553],{"class":155},[96,13849,485],{"class":106},[96,13851,553],{"class":155},[96,13853,5950],{"class":106},[96,13855,13856],{"class":165}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[96,13858,13859],{"class":98,"line":1294},[96,13860,2383],{"emptyLinePlaceholder":23},[96,13862,13863,13865,13867,13869],{"class":98,"line":1300},[96,13864,2286],{"class":1946},[96,13866,107],{"class":106},[96,13868,2291],{"class":211},[96,13870,2702],{"class":106},[96,13872,13873],{"class":98,"line":1312},[96,13874,2383],{"emptyLinePlaceholder":23},[96,13876,13877,13879,13881],{"class":98,"line":1595},[96,13878,4073],{"class":102},[96,13880,4076],{"class":155},[96,13882,1273],{"class":106},[96,13884,13885],{"class":98,"line":1600},[96,13886,1548],{"class":106},[14,13888,13889],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[38,13891,13893],{"id":13892},"_73函数重载","7.3函数重载",[14,13895,13896],{},"意思是函数名是可以相同的",[67,13898,13900],{"id":13899},"_731基本语法","7.3.1基本语法",[14,13902,13903],{},"作用：函数名可以相同，提高复用性",[14,13905,13906],{},[256,13907,13908],{},"函数重载满足条件：",[1114,13910,13911,13914,13917],{},[53,13912,13913],{},"同一个作用域下",[53,13915,13916],{},"函数名称相同",[53,13918,13919,13920,13923,13924,13927,13928],{},"函数参数",[256,13921,13922],{},"类型不同","  或者 ",[256,13925,13926],{},"个数不同"," 或者 ",[256,13929,13930],{},"顺序不同",[14,13932,13933,13936],{},[256,13934,13935],{},"注意:","  函数的返回值不可以作为函数重载的条件",[87,13938,13940],{"className":9925,"code":13939,"language":9927,"meta":18,"style":18},"\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",[93,13941,13942,13947,13955,13959,13972,13976,13990,13994,14007,14011,14026,14030,14043,14047,14068,14072,14085,14089,14109,14113,14126,14130,14134,14139,14144,14149,14154,14159,14163,14167,14175,14179,14185,14195,14205,14219,14234,14238,14248,14252,14260],{"__ignoreMap":18},[96,13943,13944],{"class":98,"line":99},[96,13945,13946],{"class":165},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[96,13948,13949,13951,13953],{"class":98,"line":19},[96,13950,5348],{"class":102},[96,13952,11369],{"class":1946},[96,13954,1959],{"class":106},[96,13956,13957],{"class":98,"line":1162},[96,13958,1529],{"class":106},[96,13960,13961,13963,13965,13968,13970],{"class":98,"line":1177},[96,13962,6513],{"class":106},[96,13964,1151],{"class":102},[96,13966,13967],{"class":211}," \"func 的调用！\"",[96,13969,1427],{"class":102},[96,13971,8824],{"class":106},[96,13973,13974],{"class":98,"line":1183},[96,13975,1548],{"class":106},[96,13977,13978,13980,13982,13984,13986,13988],{"class":98,"line":1197},[96,13979,5348],{"class":102},[96,13981,11369],{"class":1946},[96,13983,107],{"class":106},[96,13985,110],{"class":102},[96,13987,1381],{"class":5200},[96,13989,113],{"class":106},[96,13991,13992],{"class":98,"line":1203},[96,13993,1529],{"class":106},[96,13995,13996,13998,14000,14003,14005],{"class":98,"line":1294},[96,13997,6513],{"class":106},[96,13999,1151],{"class":102},[96,14001,14002],{"class":211}," \"func (int a) 的调用！\"",[96,14004,1427],{"class":102},[96,14006,8824],{"class":106},[96,14008,14009],{"class":98,"line":1300},[96,14010,1548],{"class":106},[96,14012,14013,14015,14017,14019,14022,14024],{"class":98,"line":1312},[96,14014,5348],{"class":102},[96,14016,11369],{"class":1946},[96,14018,107],{"class":106},[96,14020,14021],{"class":102},"double",[96,14023,1381],{"class":5200},[96,14025,113],{"class":106},[96,14027,14028],{"class":98,"line":1595},[96,14029,1529],{"class":106},[96,14031,14032,14034,14036,14039,14041],{"class":98,"line":1600},[96,14033,6513],{"class":106},[96,14035,1151],{"class":102},[96,14037,14038],{"class":211}," \"func (double a)的调用！\"",[96,14040,1427],{"class":102},[96,14042,8824],{"class":106},[96,14044,14045],{"class":98,"line":1606},[96,14046,1548],{"class":106},[96,14048,14049,14051,14053,14055,14057,14059,14062,14064,14066],{"class":98,"line":1611},[96,14050,5348],{"class":102},[96,14052,11369],{"class":1946},[96,14054,107],{"class":106},[96,14056,110],{"class":102},[96,14058,1381],{"class":5200},[96,14060,14061],{"class":106}," ,",[96,14063,14021],{"class":102},[96,14065,2816],{"class":5200},[96,14067,113],{"class":106},[96,14069,14070],{"class":98,"line":1625},[96,14071,1529],{"class":106},[96,14073,14074,14076,14078,14081,14083],{"class":98,"line":1630},[96,14075,6513],{"class":106},[96,14077,1151],{"class":102},[96,14079,14080],{"class":211}," \"func (int a ,double b) 的调用！\"",[96,14082,1427],{"class":102},[96,14084,8824],{"class":106},[96,14086,14087],{"class":98,"line":1636},[96,14088,1548],{"class":106},[96,14090,14091,14093,14095,14097,14099,14101,14103,14105,14107],{"class":98,"line":1657},[96,14092,5348],{"class":102},[96,14094,11369],{"class":1946},[96,14096,107],{"class":106},[96,14098,14021],{"class":102},[96,14100,1381],{"class":5200},[96,14102,14061],{"class":106},[96,14104,110],{"class":102},[96,14106,2816],{"class":5200},[96,14108,113],{"class":106},[96,14110,14111],{"class":98,"line":1662},[96,14112,1529],{"class":106},[96,14114,14115,14117,14119,14122,14124],{"class":98,"line":1676},[96,14116,6513],{"class":106},[96,14118,1151],{"class":102},[96,14120,14121],{"class":211}," \"func (double a ,int b)的调用！\"",[96,14123,1427],{"class":102},[96,14125,8824],{"class":106},[96,14127,14128],{"class":98,"line":1681},[96,14129,1548],{"class":106},[96,14131,14132],{"class":98,"line":1710},[96,14133,2383],{"emptyLinePlaceholder":23},[96,14135,14136],{"class":98,"line":1715},[96,14137,14138],{"class":165},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[96,14140,14141],{"class":98,"line":1732},[96,14142,14143],{"class":165},"\u002F\u002Fint func(double a, int b)\n",[96,14145,14146],{"class":98,"line":1737},[96,14147,14148],{"class":165},"\u002F\u002F{\n",[96,14150,14151],{"class":98,"line":1742},[96,14152,14153],{"class":165},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[96,14155,14156],{"class":98,"line":1747},[96,14157,14158],{"class":165},"\u002F\u002F}\n",[96,14160,14161],{"class":98,"line":1761},[96,14162,2383],{"emptyLinePlaceholder":23},[96,14164,14165],{"class":98,"line":1766},[96,14166,2383],{"emptyLinePlaceholder":23},[96,14168,14169,14171,14173],{"class":98,"line":2560},[96,14170,110],{"class":102},[96,14172,1956],{"class":1946},[96,14174,10837],{"class":106},[96,14176,14177],{"class":98,"line":2574},[96,14178,2383],{"emptyLinePlaceholder":23},[96,14180,14181,14183],{"class":98,"line":2582},[96,14182,13269],{"class":1946},[96,14184,5620],{"class":106},[96,14186,14187,14189,14191,14193],{"class":98,"line":2587},[96,14188,13269],{"class":1946},[96,14190,107],{"class":106},[96,14192,553],{"class":155},[96,14194,2702],{"class":106},[96,14196,14197,14199,14201,14203],{"class":98,"line":2593},[96,14198,13269],{"class":1946},[96,14200,107],{"class":106},[96,14202,156],{"class":155},[96,14204,2702],{"class":106},[96,14206,14207,14209,14211,14213,14215,14217],{"class":98,"line":2599},[96,14208,13269],{"class":1946},[96,14210,107],{"class":106},[96,14212,553],{"class":155},[96,14214,485],{"class":106},[96,14216,156],{"class":155},[96,14218,2702],{"class":106},[96,14220,14221,14223,14225,14227,14230,14232],{"class":98,"line":2604},[96,14222,13269],{"class":1946},[96,14224,107],{"class":106},[96,14226,156],{"class":155},[96,14228,14229],{"class":106}," , ",[96,14231,553],{"class":155},[96,14233,2702],{"class":106},[96,14235,14236],{"class":98,"line":7932},[96,14237,13194],{"class":106},[96,14239,14240,14242,14244,14246],{"class":98,"line":7956},[96,14241,2286],{"class":1946},[96,14243,107],{"class":106},[96,14245,2291],{"class":211},[96,14247,2702],{"class":106},[96,14249,14250],{"class":98,"line":7961},[96,14251,2383],{"emptyLinePlaceholder":23},[96,14253,14254,14256,14258],{"class":98,"line":7967},[96,14255,4073],{"class":102},[96,14257,4076],{"class":155},[96,14259,1273],{"class":106},[96,14261,14262],{"class":98,"line":7994},[96,14263,1548],{"class":106},[14,14265,14266],{},"重点：函数返回值不可以作为函数重载条件！",[67,14268,14270],{"id":14269},"_732注意事项","7.3.2注意事项",[1114,14272,14273,14276],{},[53,14274,14275],{},"引用作为重载条件!!!",[53,14277,14278],{},"函数重载碰到函数默认参数",[87,14280,14282],{"className":89,"code":14281,"language":91,"meta":18,"style":18},"\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",[93,14283,14284,14289,14294,14298,14314,14318,14331,14335,14339,14357,14361,14374,14378,14382,14386,14391,14395,14419,14423,14436,14440,14444,14458,14462,14475,14479,14483,14491,14495,14507,14517,14530,14534,14538,14546,14550,14560,14564,14572],{"__ignoreMap":18},[96,14285,14286],{"class":98,"line":99},[96,14287,14288],{"class":165},"\u002F\u002F函数重载注意事项\n",[96,14290,14291],{"class":98,"line":19},[96,14292,14293],{"class":165},"\u002F\u002F1、引用作为重载条件\n",[96,14295,14296],{"class":98,"line":1162},[96,14297,2383],{"emptyLinePlaceholder":23},[96,14299,14300,14302,14304,14306,14308,14310,14312],{"class":98,"line":1177},[96,14301,5348],{"class":102},[96,14303,11369],{"class":1946},[96,14305,107],{"class":106},[96,14307,110],{"class":102},[96,14309,10568],{"class":102},[96,14311,345],{"class":5200},[96,14313,113],{"class":106},[96,14315,14316],{"class":98,"line":1183},[96,14317,1529],{"class":106},[96,14319,14320,14322,14324,14327,14329],{"class":98,"line":1197},[96,14321,6513],{"class":106},[96,14323,1151],{"class":102},[96,14325,14326],{"class":211}," \"func (int &a) 调用 \"",[96,14328,1427],{"class":102},[96,14330,8824],{"class":106},[96,14332,14333],{"class":98,"line":1203},[96,14334,1548],{"class":106},[96,14336,14337],{"class":98,"line":1294},[96,14338,2383],{"emptyLinePlaceholder":23},[96,14340,14341,14343,14345,14347,14349,14351,14353,14355],{"class":98,"line":1300},[96,14342,5348],{"class":102},[96,14344,11369],{"class":1946},[96,14346,107],{"class":106},[96,14348,6776],{"class":102},[96,14350,2365],{"class":102},[96,14352,10568],{"class":102},[96,14354,345],{"class":5200},[96,14356,113],{"class":106},[96,14358,14359],{"class":98,"line":1312},[96,14360,1529],{"class":106},[96,14362,14363,14365,14367,14370,14372],{"class":98,"line":1595},[96,14364,6513],{"class":106},[96,14366,1151],{"class":102},[96,14368,14369],{"class":211}," \"func (const int &a) 调用 \"",[96,14371,1427],{"class":102},[96,14373,8824],{"class":106},[96,14375,14376],{"class":98,"line":1600},[96,14377,1548],{"class":106},[96,14379,14380],{"class":98,"line":1606},[96,14381,2383],{"emptyLinePlaceholder":23},[96,14383,14384],{"class":98,"line":1611},[96,14385,2383],{"emptyLinePlaceholder":23},[96,14387,14388],{"class":98,"line":1625},[96,14389,14390],{"class":165},"\u002F\u002F2、函数重载碰到函数默认参数\n",[96,14392,14393],{"class":98,"line":1630},[96,14394,2383],{"emptyLinePlaceholder":23},[96,14396,14397,14399,14401,14403,14405,14407,14409,14411,14413,14415,14417],{"class":98,"line":1636},[96,14398,5348],{"class":102},[96,14400,13602],{"class":1946},[96,14402,107],{"class":106},[96,14404,110],{"class":102},[96,14406,1381],{"class":5200},[96,14408,12419],{"class":106},[96,14410,110],{"class":102},[96,14412,2816],{"class":5200},[96,14414,13548],{"class":102},[96,14416,2021],{"class":155},[96,14418,113],{"class":106},[96,14420,14421],{"class":98,"line":1657},[96,14422,1529],{"class":106},[96,14424,14425,14427,14429,14432,14434],{"class":98,"line":1662},[96,14426,6513],{"class":106},[96,14428,1151],{"class":102},[96,14430,14431],{"class":211}," \"func2(int a, int b = 10) 调用\"",[96,14433,1427],{"class":102},[96,14435,8824],{"class":106},[96,14437,14438],{"class":98,"line":1676},[96,14439,1548],{"class":106},[96,14441,14442],{"class":98,"line":1681},[96,14443,2383],{"emptyLinePlaceholder":23},[96,14445,14446,14448,14450,14452,14454,14456],{"class":98,"line":1710},[96,14447,5348],{"class":102},[96,14449,13602],{"class":1946},[96,14451,107],{"class":106},[96,14453,110],{"class":102},[96,14455,1381],{"class":5200},[96,14457,113],{"class":106},[96,14459,14460],{"class":98,"line":1715},[96,14461,1529],{"class":106},[96,14463,14464,14466,14468,14471,14473],{"class":98,"line":1732},[96,14465,6513],{"class":106},[96,14467,1151],{"class":102},[96,14469,14470],{"class":211}," \"func2(int a) 调用\"",[96,14472,1427],{"class":102},[96,14474,8824],{"class":106},[96,14476,14477],{"class":98,"line":1737},[96,14478,1548],{"class":106},[96,14480,14481],{"class":98,"line":1742},[96,14482,2383],{"emptyLinePlaceholder":23},[96,14484,14485,14487,14489],{"class":98,"line":1747},[96,14486,110],{"class":102},[96,14488,1956],{"class":1946},[96,14490,10837],{"class":106},[96,14492,14493],{"class":98,"line":1761},[96,14494,13194],{"class":106},[96,14496,14497,14499,14501,14503,14505],{"class":98,"line":1766},[96,14498,1968],{"class":102},[96,14500,10853],{"class":106},[96,14502,152],{"class":102},[96,14504,2021],{"class":155},[96,14506,1273],{"class":106},[96,14508,14509,14511,14514],{"class":98,"line":2560},[96,14510,13269],{"class":1946},[96,14512,14513],{"class":106},"(a);",[96,14515,14516],{"class":165}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[96,14518,14519,14521,14523,14525,14527],{"class":98,"line":2574},[96,14520,13269],{"class":1946},[96,14522,107],{"class":106},[96,14524,553],{"class":155},[96,14526,5950],{"class":106},[96,14528,14529],{"class":165},"\u002F\u002F调用有const   10是个常量\n",[96,14531,14532],{"class":98,"line":2582},[96,14533,2383],{"emptyLinePlaceholder":23},[96,14535,14536],{"class":98,"line":2587},[96,14537,2383],{"emptyLinePlaceholder":23},[96,14539,14540,14543],{"class":98,"line":2593},[96,14541,14542],{"class":165},"    \u002F\u002Ffunc2(10);",[96,14544,14545],{"class":165}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[96,14547,14548],{"class":98,"line":2599},[96,14549,2383],{"emptyLinePlaceholder":23},[96,14551,14552,14554,14556,14558],{"class":98,"line":2604},[96,14553,2286],{"class":1946},[96,14555,107],{"class":106},[96,14557,2291],{"class":211},[96,14559,2702],{"class":106},[96,14561,14562],{"class":98,"line":7932},[96,14563,2383],{"emptyLinePlaceholder":23},[96,14565,14566,14568,14570],{"class":98,"line":7956},[96,14567,4073],{"class":102},[96,14569,4076],{"class":155},[96,14571,1273],{"class":106},[96,14573,14574],{"class":98,"line":7961},[96,14575,1548],{"class":106},[5110,14577,14578],{},"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":18,"searchDepth":19,"depth":19,"links":14580},[14581,14582,14583],{"id":13513,"depth":19,"text":13514},{"id":13770,"depth":19,"text":13771},{"id":13892,"depth":19,"text":13893,"children":14584},[14585,14586],{"id":13899,"depth":1162,"text":13900},{"id":14269,"depth":1162,"text":14270},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13505,"description":18},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14593,"title":14594,"body":14595,"description":23349,"extension":21,"meta":23350,"navigation":23,"path":23351,"seo":23352,"stem":23353,"__hash__":23354},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14596,"toc":23330},[14597,14600,14606,14613,14618,14621,14624,14627,14631,14635,14638,14641,14649,14654,14657,14664,14669,14828,14831,15084,15087,15090,15093,15098,15101,15104,15115,15120,15356,15360,15370,15373,15381,15528,15532,15535,15538,15542,15987,15991,15999,16007,16919,16926,16931,17559,17562,17565,17568,17687,17690,17777,17780,17906,17909,18003,18006,18359,18363,18371,18375,18382,18385,18388,18399,18405,18410,18422,18430,18450,18458,18475,18661,18664,18668,18671,18674,18677,18680,18683,18686,18689,19149,19155,19159,19162,19173,19760,19763,20252,20256,20259,20262,20265,20268,20271,20279,20675,20679,20682,20685,21132,21135,21138,21143,21146,21151,21154,21158,21161,21163,21169,21172,21478,21488,21529,21533,21536,21538,21571,21574,21881,21883,21898,21901,21924,21933,21939,21942,21946,21949,21952,21957,21968,21973,21981,21986,22116,22119,22122,22297,22302,22514,22518,22521,22635,22640,22879,22883,22887,22890,22893,22898,23003,23006,23009,23012,23016,23127,23130,23133,23138,23190,23193,23196,23201,23247,23250,23255,23323,23325,23328],[10,14598,14594],{"id":14599},"_8类和对象",[14,14601,14602,14603],{},"C++面向对象的三大特性为",[256,14604,14605],{},"封装、继承、多态",[14,14607,14608,14609,14612],{},"C++认为",[256,14610,14611],{},"万事万物都皆为对象","，对象上有其属性和行为",[14,14614,14615],{},[256,14616,14617],{},"例如：",[14,14619,14620],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[14,14622,14623],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[14,14625,14626],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[38,14628,14630],{"id":14629},"_81封装","8.1封装",[67,14632,14634],{"id":14633},"_811封装的意义","8.1.1封装的意义",[14,14636,14637],{},"封装是C++面向对象三大特性之一",[14,14639,14640],{},"封装的意义：",[1114,14642,14643,14646],{},[53,14644,14645],{},"将属性和行为作为一个整体，表现生活中的事物",[53,14647,14648],{},"将属性和行为加以权限控制",[14,14650,14651],{},[256,14652,14653],{},"封装意义一：",[14,14655,14656],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[14,14658,14659,13779,14661],{},[256,14660,5165],{},[93,14662,14663],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[50,14665,14666],{},[53,14667,14668],{},"**示例1：**设计一个圆类，求圆的周长",[87,14670,14672],{"className":89,"code":14671,"language":91,"meta":18,"style":18},"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",[93,14673,14674,14682,14686,14691,14696,14701,14706,14713,14718,14728,14732,14750,14754,14758,14766,14770,14775,14780,14785,14790,14801,14824],{"__ignoreMap":18},[96,14675,14676,14679],{"class":98,"line":99},[96,14677,14678],{"class":102},"class",[96,14680,14681],{"class":1946}," Circle\n",[96,14683,14684],{"class":98,"line":19},[96,14685,1529],{"class":106},[96,14687,14688],{"class":98,"line":1162},[96,14689,14690],{"class":165},"    \u002F\u002F访问权限\n",[96,14692,14693],{"class":98,"line":1177},[96,14694,14695],{"class":165},"    \u002F\u002F公共权限\n",[96,14697,14698],{"class":98,"line":1183},[96,14699,14700],{"class":102},"public:\n",[96,14702,14703],{"class":98,"line":1197},[96,14704,14705],{"class":165},"    \u002F\u002F属性\n",[96,14707,14708,14710],{"class":98,"line":1203},[96,14709,1968],{"class":102},[96,14711,14712],{"class":106}," m_r;\n",[96,14714,14715],{"class":98,"line":1294},[96,14716,14717],{"class":165},"    \u002F\u002F行为\n",[96,14719,14720,14723,14726],{"class":98,"line":1300},[96,14721,14722],{"class":102},"    double",[96,14724,14725],{"class":1946}," calculateZC",[96,14727,1959],{"class":106},[96,14729,14730],{"class":98,"line":1312},[96,14731,2013],{"class":106},[96,14733,14734,14737,14740,14742,14745,14747],{"class":98,"line":1595},[96,14735,14736],{"class":102},"        return",[96,14738,14739],{"class":155}," 2",[96,14741,562],{"class":102},[96,14743,14744],{"class":106},"PI",[96,14746,562],{"class":102},[96,14748,14749],{"class":106},"m_r;\n",[96,14751,14752],{"class":98,"line":1600},[96,14753,2170],{"class":106},[96,14755,14756],{"class":98,"line":1606},[96,14757,3978],{"class":106},[96,14759,14760,14762,14764],{"class":98,"line":1611},[96,14761,110],{"class":102},[96,14763,1956],{"class":1946},[96,14765,1959],{"class":106},[96,14767,14768],{"class":98,"line":1625},[96,14769,1529],{"class":106},[96,14771,14772],{"class":98,"line":1630},[96,14773,14774],{"class":165},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[96,14776,14777],{"class":98,"line":1636},[96,14778,14779],{"class":165},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[96,14781,14782],{"class":98,"line":1657},[96,14783,14784],{"class":106},"    Circle c1;\n",[96,14786,14787],{"class":98,"line":1662},[96,14788,14789],{"class":165},"    \u002F\u002F给圆对象 的属性进行赋值\n",[96,14791,14792,14795,14797,14799],{"class":98,"line":1676},[96,14793,14794],{"class":106},"    c1.m_r",[96,14796,152],{"class":102},[96,14798,553],{"class":155},[96,14800,1273],{"class":106},[96,14802,14803,14805,14807,14810,14812,14815,14818,14820,14822],{"class":98,"line":1681},[96,14804,1534],{"class":106},[96,14806,1151],{"class":102},[96,14808,14809],{"class":211},"\"圆的周长\"",[96,14811,1151],{"class":102},[96,14813,14814],{"class":106},"c1.",[96,14816,14817],{"class":1946},"calculateZC",[96,14819,2410],{"class":106},[96,14821,1151],{"class":102},[96,14823,1174],{"class":106},[96,14825,14826],{"class":98,"line":1710},[96,14827,1548],{"class":106},[14,14829,14830],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[87,14832,14834],{"className":89,"code":14833,"language":91,"meta":18,"style":18},"#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",[93,14835,14836,14842,14852,14858,14864,14868,14872,14877,14884,14889,14907,14911,14921,14925,14930,14946,14950,14960,14964,14969,14977,14981,15013,15017,15021,15029,15033,15038,15043,15057,15071,15080],{"__ignoreMap":18},[96,14837,14838,14840],{"class":98,"line":99},[96,14839,1932],{"class":102},[96,14841,1935],{"class":211},[96,14843,14844,14846,14848,14850],{"class":98,"line":19},[96,14845,1940],{"class":102},[96,14847,1943],{"class":102},[96,14849,1947],{"class":1946},[96,14851,1273],{"class":106},[96,14853,14854,14856],{"class":98,"line":1162},[96,14855,1932],{"class":102},[96,14857,7733],{"class":211},[96,14859,14860,14862],{"class":98,"line":1177},[96,14861,14678],{"class":102},[96,14863,7746],{"class":1946},[96,14865,14866],{"class":98,"line":1183},[96,14867,1529],{"class":106},[96,14869,14870],{"class":98,"line":1197},[96,14871,14700],{"class":102},[96,14873,14874],{"class":98,"line":1203},[96,14875,14876],{"class":106},"    string m_name;\n",[96,14878,14879,14881],{"class":98,"line":1294},[96,14880,1968],{"class":102},[96,14882,14883],{"class":106}," m_id;\n",[96,14885,14886],{"class":98,"line":1300},[96,14887,14888],{"class":165},"    \u002F\u002F赋值姓名\n",[96,14890,14891,14894,14897,14899,14902,14905],{"class":98,"line":1312},[96,14892,14893],{"class":102},"    void",[96,14895,14896],{"class":1946}," setName",[96,14898,107],{"class":106},[96,14900,14901],{"class":1946},"string",[96,14903,14904],{"class":5200}," name",[96,14906,113],{"class":106},[96,14908,14909],{"class":98,"line":1595},[96,14910,2013],{"class":106},[96,14912,14913,14916,14918],{"class":98,"line":1600},[96,14914,14915],{"class":106},"        m_name",[96,14917,152],{"class":102},[96,14919,14920],{"class":106},"name;\n",[96,14922,14923],{"class":98,"line":1606},[96,14924,2170],{"class":106},[96,14926,14927],{"class":98,"line":1611},[96,14928,14929],{"class":165},"    \u002F\u002F赋值学号\n",[96,14931,14932,14934,14937,14939,14941,14944],{"class":98,"line":1625},[96,14933,14893],{"class":102},[96,14935,14936],{"class":1946}," setId",[96,14938,107],{"class":106},[96,14940,110],{"class":102},[96,14942,14943],{"class":5200}," id",[96,14945,113],{"class":106},[96,14947,14948],{"class":98,"line":1630},[96,14949,2013],{"class":106},[96,14951,14952,14955,14957],{"class":98,"line":1636},[96,14953,14954],{"class":106},"        m_id",[96,14956,152],{"class":102},[96,14958,14959],{"class":106},"id;\n",[96,14961,14962],{"class":98,"line":1657},[96,14963,2170],{"class":106},[96,14965,14966],{"class":98,"line":1662},[96,14967,14968],{"class":165},"    \u002F\u002F打印学生信息\n",[96,14970,14971,14973,14975],{"class":98,"line":1676},[96,14972,14893],{"class":102},[96,14974,9599],{"class":1946},[96,14976,1959],{"class":106},[96,14978,14979],{"class":98,"line":1681},[96,14980,2013],{"class":106},[96,14982,14983,14985,14987,14990,14992,14995,14997,14999,15001,15004,15006,15009,15011],{"class":98,"line":1710},[96,14984,3434],{"class":106},[96,14986,1151],{"class":102},[96,14988,14989],{"class":211},"\"姓名：\"",[96,14991,1151],{"class":102},[96,14993,14994],{"class":106},"m_name",[96,14996,1151],{"class":102},[96,14998,4342],{"class":211},[96,15000,1151],{"class":102},[96,15002,15003],{"class":211},"\"学号：\"",[96,15005,1151],{"class":102},[96,15007,15008],{"class":106},"m_id",[96,15010,1151],{"class":102},[96,15012,1174],{"class":106},[96,15014,15015],{"class":98,"line":1715},[96,15016,2170],{"class":106},[96,15018,15019],{"class":98,"line":1732},[96,15020,3978],{"class":106},[96,15022,15023,15025,15027],{"class":98,"line":1737},[96,15024,110],{"class":102},[96,15026,1956],{"class":1946},[96,15028,1959],{"class":106},[96,15030,15031],{"class":98,"line":1742},[96,15032,1529],{"class":106},[96,15034,15035],{"class":98,"line":1747},[96,15036,15037],{"class":165},"    \u002F\u002F实例化\n",[96,15039,15040],{"class":98,"line":1761},[96,15041,15042],{"class":106},"    Student s1;\n",[96,15044,15045,15048,15051,15053,15055],{"class":98,"line":1766},[96,15046,15047],{"class":106},"    s1.",[96,15049,15050],{"class":1946},"setName",[96,15052,107],{"class":106},[96,15054,7900],{"class":211},[96,15056,2702],{"class":106},[96,15058,15059,15061,15064,15066,15069],{"class":98,"line":2560},[96,15060,15047],{"class":106},[96,15062,15063],{"class":1946},"setId",[96,15065,107],{"class":106},[96,15067,15068],{"class":155},"123456",[96,15070,2702],{"class":106},[96,15072,15073,15075,15078],{"class":98,"line":2574},[96,15074,15047],{"class":106},[96,15076,15077],{"class":1946},"printInfo",[96,15079,5620],{"class":106},[96,15081,15082],{"class":98,"line":2582},[96,15083,1548],{"class":106},[14,15085,15086],{},"类中的属性和行为统称为成员",[14,15088,15089],{},"属性：成员属性(成员变量)",[14,15091,15092],{},"方法：成员函数(成员方法)",[14,15094,15095],{},[256,15096,15097],{},"封装意义二：",[14,15099,15100],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[14,15102,15103],{},"访问权限有三种：",[50,15105,15106,15109,15112],{},[53,15107,15108],{},"public        公共权限",[53,15110,15111],{},"protected 保护权限",[53,15113,15114],{},"private      私有权限",[14,15116,15117],{},[256,15118,15119],{},"示例：",[87,15121,15123],{"className":9925,"code":15122,"language":9927,"meta":18,"style":18},"\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",[93,15124,15125,15130,15135,15140,15145,15149,15156,15160,15165,15169,15174,15178,15183,15188,15193,15197,15202,15207,15214,15218,15222,15230,15234,15245,15257,15269,15273,15277,15281,15289,15293,15298,15310,15318,15326,15330,15340,15344,15352],{"__ignoreMap":18},[96,15126,15127],{"class":98,"line":99},[96,15128,15129],{"class":165},"\u002F\u002F三种权限\n",[96,15131,15132],{"class":98,"line":19},[96,15133,15134],{"class":165},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[96,15136,15137],{"class":98,"line":1162},[96,15138,15139],{"class":165},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[96,15141,15142],{"class":98,"line":1177},[96,15143,15144],{"class":165},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[96,15146,15147],{"class":98,"line":1183},[96,15148,2383],{"emptyLinePlaceholder":23},[96,15150,15151,15153],{"class":98,"line":1197},[96,15152,14678],{"class":102},[96,15154,15155],{"class":1946}," Person\n",[96,15157,15158],{"class":98,"line":1203},[96,15159,1529],{"class":106},[96,15161,15162],{"class":98,"line":1294},[96,15163,15164],{"class":165},"    \u002F\u002F姓名  公共权限\n",[96,15166,15167],{"class":98,"line":1300},[96,15168,14700],{"class":102},[96,15170,15171],{"class":98,"line":1312},[96,15172,15173],{"class":106},"    string m_Name;\n",[96,15175,15176],{"class":98,"line":1595},[96,15177,2383],{"emptyLinePlaceholder":23},[96,15179,15180],{"class":98,"line":1600},[96,15181,15182],{"class":165},"    \u002F\u002F汽车  保护权限\n",[96,15184,15185],{"class":98,"line":1606},[96,15186,15187],{"class":102},"protected:\n",[96,15189,15190],{"class":98,"line":1611},[96,15191,15192],{"class":106},"    string m_Car;\n",[96,15194,15195],{"class":98,"line":1625},[96,15196,2383],{"emptyLinePlaceholder":23},[96,15198,15199],{"class":98,"line":1630},[96,15200,15201],{"class":165},"    \u002F\u002F银行卡密码  私有权限\n",[96,15203,15204],{"class":98,"line":1636},[96,15205,15206],{"class":102},"private:\n",[96,15208,15209,15211],{"class":98,"line":1657},[96,15210,1968],{"class":102},[96,15212,15213],{"class":106}," m_Password;\n",[96,15215,15216],{"class":98,"line":1662},[96,15217,2383],{"emptyLinePlaceholder":23},[96,15219,15220],{"class":98,"line":1676},[96,15221,14700],{"class":102},[96,15223,15224,15226,15228],{"class":98,"line":1681},[96,15225,14893],{"class":102},[96,15227,11369],{"class":1946},[96,15229,1959],{"class":106},[96,15231,15232],{"class":98,"line":1710},[96,15233,2013],{"class":106},[96,15235,15236,15239,15241,15243],{"class":98,"line":1715},[96,15237,15238],{"class":106},"        m_Name ",[96,15240,152],{"class":102},[96,15242,8922],{"class":211},[96,15244,1273],{"class":106},[96,15246,15247,15250,15252,15255],{"class":98,"line":1732},[96,15248,15249],{"class":106},"        m_Car ",[96,15251,152],{"class":102},[96,15253,15254],{"class":211}," \"拖拉机\"",[96,15256,1273],{"class":106},[96,15258,15259,15262,15264,15267],{"class":98,"line":1737},[96,15260,15261],{"class":106},"        m_Password ",[96,15263,152],{"class":102},[96,15265,15266],{"class":155}," 123456",[96,15268,1273],{"class":106},[96,15270,15271],{"class":98,"line":1742},[96,15272,2170],{"class":106},[96,15274,15275],{"class":98,"line":1747},[96,15276,3978],{"class":106},[96,15278,15279],{"class":98,"line":1761},[96,15280,2383],{"emptyLinePlaceholder":23},[96,15282,15283,15285,15287],{"class":98,"line":1766},[96,15284,110],{"class":102},[96,15286,1956],{"class":1946},[96,15288,10837],{"class":106},[96,15290,15291],{"class":98,"line":2560},[96,15292,2383],{"emptyLinePlaceholder":23},[96,15294,15295],{"class":98,"line":2574},[96,15296,15297],{"class":106},"    Person p;\n",[96,15299,15300,15303,15305,15308],{"class":98,"line":2582},[96,15301,15302],{"class":106},"    p.m_Name ",[96,15304,152],{"class":102},[96,15306,15307],{"class":211}," \"李四\"",[96,15309,1273],{"class":106},[96,15311,15312,15315],{"class":98,"line":2587},[96,15313,15314],{"class":165},"    \u002F\u002Fp.m_Car = \"奔驰\";",[96,15316,15317],{"class":165},"  \u002F\u002F保护权限类外访问不到\n",[96,15319,15320,15323],{"class":98,"line":2593},[96,15321,15322],{"class":165},"    \u002F\u002Fp.m_Password = 123;",[96,15324,15325],{"class":165}," \u002F\u002F私有权限类外访问不到\n",[96,15327,15328],{"class":98,"line":2599},[96,15329,2383],{"emptyLinePlaceholder":23},[96,15331,15332,15334,15336,15338],{"class":98,"line":2604},[96,15333,2286],{"class":1946},[96,15335,107],{"class":106},[96,15337,2291],{"class":211},[96,15339,2702],{"class":106},[96,15341,15342],{"class":98,"line":7932},[96,15343,2383],{"emptyLinePlaceholder":23},[96,15345,15346,15348,15350],{"class":98,"line":7956},[96,15347,4073],{"class":102},[96,15349,4076],{"class":155},[96,15351,1273],{"class":106},[96,15353,15354],{"class":98,"line":7961},[96,15355,1548],{"class":106},[67,15357,15359],{"id":15358},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[14,15361,15362,15363,15366,15367],{},"在C++中 struct和class唯一的",[256,15364,15365],{},"区别","就在于 ",[256,15368,15369],{},"默认的访问权限不同",[14,15371,15372],{},"区别：",[1114,15374,15375,15378],{},[53,15376,15377],{},"struct 默认权限为公共",[53,15379,15380],{},"class   默认权限为私有",[87,15382,15384],{"className":9925,"code":15383,"language":9927,"meta":18,"style":18},"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",[93,15385,15386,15393,15397,15407,15411,15415,15422,15426,15436,15440,15444,15452,15456,15461,15475,15479,15484,15498,15502,15512,15516,15524],{"__ignoreMap":18},[96,15387,15388,15390],{"class":98,"line":99},[96,15389,14678],{"class":102},[96,15391,15392],{"class":1946}," C1\n",[96,15394,15395],{"class":98,"line":19},[96,15396,1529],{"class":106},[96,15398,15399,15401,15404],{"class":98,"line":1162},[96,15400,1968],{"class":102},[96,15402,15403],{"class":106},"  m_A;",[96,15405,15406],{"class":165}," \u002F\u002F默认是私有权限\n",[96,15408,15409],{"class":98,"line":1177},[96,15410,3978],{"class":106},[96,15412,15413],{"class":98,"line":1183},[96,15414,2383],{"emptyLinePlaceholder":23},[96,15416,15417,15419],{"class":98,"line":1197},[96,15418,7743],{"class":102},[96,15420,15421],{"class":1946}," C2\n",[96,15423,15424],{"class":98,"line":1203},[96,15425,1529],{"class":106},[96,15427,15428,15430,15433],{"class":98,"line":1294},[96,15429,1968],{"class":102},[96,15431,15432],{"class":106}," m_A;",[96,15434,15435],{"class":165},"  \u002F\u002F默认是公共权限\n",[96,15437,15438],{"class":98,"line":1300},[96,15439,3978],{"class":106},[96,15441,15442],{"class":98,"line":1312},[96,15443,2383],{"emptyLinePlaceholder":23},[96,15445,15446,15448,15450],{"class":98,"line":1595},[96,15447,110],{"class":102},[96,15449,1956],{"class":1946},[96,15451,10837],{"class":106},[96,15453,15454],{"class":98,"line":1600},[96,15455,2383],{"emptyLinePlaceholder":23},[96,15457,15458],{"class":98,"line":1606},[96,15459,15460],{"class":106},"    C1 c1;\n",[96,15462,15463,15466,15468,15470,15472],{"class":98,"line":1611},[96,15464,15465],{"class":106},"    c1.m_A ",[96,15467,152],{"class":102},[96,15469,2021],{"class":155},[96,15471,162],{"class":106},[96,15473,15474],{"class":165}," \u002F\u002F错误，访问权限是私有\n",[96,15476,15477],{"class":98,"line":1625},[96,15478,2383],{"emptyLinePlaceholder":23},[96,15480,15481],{"class":98,"line":1630},[96,15482,15483],{"class":106},"    C2 c2;\n",[96,15485,15486,15489,15491,15493,15495],{"class":98,"line":1636},[96,15487,15488],{"class":106},"    c2.m_A ",[96,15490,152],{"class":102},[96,15492,2021],{"class":155},[96,15494,162],{"class":106},[96,15496,15497],{"class":165}," \u002F\u002F正确，访问权限是公共\n",[96,15499,15500],{"class":98,"line":1657},[96,15501,2383],{"emptyLinePlaceholder":23},[96,15503,15504,15506,15508,15510],{"class":98,"line":1662},[96,15505,2286],{"class":1946},[96,15507,107],{"class":106},[96,15509,2291],{"class":211},[96,15511,2702],{"class":106},[96,15513,15514],{"class":98,"line":1676},[96,15515,2383],{"emptyLinePlaceholder":23},[96,15517,15518,15520,15522],{"class":98,"line":1681},[96,15519,4073],{"class":102},[96,15521,4076],{"class":155},[96,15523,1273],{"class":106},[96,15525,15526],{"class":98,"line":1710},[96,15527,1548],{"class":106},[67,15529,15531],{"id":15530},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[14,15533,15534],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[14,15536,15537],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[14,15539,15540],{},[256,15541,15119],{},[87,15543,15545],{"className":9925,"code":15544,"language":9927,"meta":18,"style":18},"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",[93,15546,15547,15557,15561,15565,15570,15584,15593,15597,15607,15611,15618,15622,15626,15630,15635,15644,15651,15655,15660,15676,15699,15712,15719,15723,15732,15736,15740,15745,15761,15771,15775,15779,15783,15791,15795,15805,15809,15817,15821,15825,15833,15837,15841,15846,15859,15882,15886,15891,15904,15926,15930,15935,15949,15957,15961,15971,15975,15983],{"__ignoreMap":18},[96,15548,15549,15551,15554],{"class":98,"line":99},[96,15550,14678],{"class":102},[96,15552,15553],{"class":1946}," Person",[96,15555,15556],{"class":106}," {\n",[96,15558,15559],{"class":98,"line":19},[96,15560,14700],{"class":102},[96,15562,15563],{"class":98,"line":1162},[96,15564,2383],{"emptyLinePlaceholder":23},[96,15566,15567],{"class":98,"line":1177},[96,15568,15569],{"class":165},"    \u002F\u002F姓名设置可读可写\n",[96,15571,15572,15574,15576,15578,15580,15582],{"class":98,"line":1183},[96,15573,14893],{"class":102},[96,15575,14896],{"class":1946},[96,15577,107],{"class":106},[96,15579,14901],{"class":1946},[96,15581,14904],{"class":5200},[96,15583,12426],{"class":106},[96,15585,15586,15588,15590],{"class":98,"line":1197},[96,15587,15238],{"class":106},[96,15589,152],{"class":102},[96,15591,15592],{"class":106}," name;\n",[96,15594,15595],{"class":98,"line":1203},[96,15596,2170],{"class":106},[96,15598,15599,15602,15605],{"class":98,"line":1294},[96,15600,15601],{"class":1946},"    string",[96,15603,15604],{"class":1946}," getName",[96,15606,1959],{"class":106},[96,15608,15609],{"class":98,"line":1300},[96,15610,2013],{"class":106},[96,15612,15613,15615],{"class":98,"line":1312},[96,15614,14736],{"class":102},[96,15616,15617],{"class":106}," m_Name;\n",[96,15619,15620],{"class":98,"line":1595},[96,15621,2170],{"class":106},[96,15623,15624],{"class":98,"line":1600},[96,15625,2383],{"emptyLinePlaceholder":23},[96,15627,15628],{"class":98,"line":1606},[96,15629,2383],{"emptyLinePlaceholder":23},[96,15631,15632],{"class":98,"line":1611},[96,15633,15634],{"class":165},"    \u002F\u002F获取年龄 \n",[96,15636,15637,15639,15642],{"class":98,"line":1625},[96,15638,1968],{"class":102},[96,15640,15641],{"class":1946}," getAge",[96,15643,10837],{"class":106},[96,15645,15646,15648],{"class":98,"line":1630},[96,15647,14736],{"class":102},[96,15649,15650],{"class":106}," m_Age;\n",[96,15652,15653],{"class":98,"line":1636},[96,15654,2170],{"class":106},[96,15656,15657],{"class":98,"line":1657},[96,15658,15659],{"class":165},"    \u002F\u002F设置年龄\n",[96,15661,15662,15664,15667,15669,15671,15674],{"class":98,"line":1662},[96,15663,14893],{"class":102},[96,15665,15666],{"class":1946}," setAge",[96,15668,107],{"class":106},[96,15670,110],{"class":102},[96,15672,15673],{"class":5200}," age",[96,15675,12426],{"class":106},[96,15677,15678,15680,15683,15685,15687,15689,15692,15694,15697],{"class":98,"line":1676},[96,15679,2480],{"class":102},[96,15681,15682],{"class":106}," (age ",[96,15684,1017],{"class":102},[96,15686,4076],{"class":155},[96,15688,3238],{"class":102},[96,15690,15691],{"class":106}," age ",[96,15693,1067],{"class":102},[96,15695,15696],{"class":155}," 150",[96,15698,12426],{"class":106},[96,15700,15701,15703,15705,15708,15710],{"class":98,"line":1681},[96,15702,9703],{"class":106},[96,15704,1151],{"class":102},[96,15706,15707],{"class":211}," \"你个老妖精!\"",[96,15709,1427],{"class":102},[96,15711,8824],{"class":106},[96,15713,15714,15717],{"class":98,"line":1710},[96,15715,15716],{"class":102},"            return",[96,15718,1273],{"class":106},[96,15720,15721],{"class":98,"line":1715},[96,15722,2512],{"class":106},[96,15724,15725,15728,15730],{"class":98,"line":1732},[96,15726,15727],{"class":106},"        m_Age ",[96,15729,152],{"class":102},[96,15731,7781],{"class":106},[96,15733,15734],{"class":98,"line":1737},[96,15735,2170],{"class":106},[96,15737,15738],{"class":98,"line":1742},[96,15739,2383],{"emptyLinePlaceholder":23},[96,15741,15742],{"class":98,"line":1747},[96,15743,15744],{"class":165},"    \u002F\u002F情人设置为只写\n",[96,15746,15747,15749,15752,15754,15756,15759],{"class":98,"line":1761},[96,15748,14893],{"class":102},[96,15750,15751],{"class":1946}," setLover",[96,15753,107],{"class":106},[96,15755,14901],{"class":1946},[96,15757,15758],{"class":5200}," lover",[96,15760,12426],{"class":106},[96,15762,15763,15766,15768],{"class":98,"line":1766},[96,15764,15765],{"class":106},"        m_Lover ",[96,15767,152],{"class":102},[96,15769,15770],{"class":106}," lover;\n",[96,15772,15773],{"class":98,"line":2560},[96,15774,2170],{"class":106},[96,15776,15777],{"class":98,"line":2574},[96,15778,2383],{"emptyLinePlaceholder":23},[96,15780,15781],{"class":98,"line":2582},[96,15782,15206],{"class":102},[96,15784,15785,15788],{"class":98,"line":2587},[96,15786,15787],{"class":106},"    string m_Name;",[96,15789,15790],{"class":165}," \u002F\u002F可读可写  姓名\n",[96,15792,15793],{"class":98,"line":2593},[96,15794,13194],{"class":106},[96,15796,15797,15799,15802],{"class":98,"line":2599},[96,15798,1968],{"class":102},[96,15800,15801],{"class":106}," m_Age;",[96,15803,15804],{"class":165}," \u002F\u002F只读  年龄\n",[96,15806,15807],{"class":98,"line":2604},[96,15808,2383],{"emptyLinePlaceholder":23},[96,15810,15811,15814],{"class":98,"line":7932},[96,15812,15813],{"class":106},"    string m_Lover;",[96,15815,15816],{"class":165}," \u002F\u002F只写  情人\n",[96,15818,15819],{"class":98,"line":7956},[96,15820,3978],{"class":106},[96,15822,15823],{"class":98,"line":7961},[96,15824,2383],{"emptyLinePlaceholder":23},[96,15826,15827,15829,15831],{"class":98,"line":7967},[96,15828,110],{"class":102},[96,15830,1956],{"class":1946},[96,15832,10837],{"class":106},[96,15834,15835],{"class":98,"line":7994},[96,15836,2383],{"emptyLinePlaceholder":23},[96,15838,15839],{"class":98,"line":7999},[96,15840,15297],{"class":106},[96,15842,15843],{"class":98,"line":8005},[96,15844,15845],{"class":165},"    \u002F\u002F姓名设置\n",[96,15847,15848,15851,15853,15855,15857],{"class":98,"line":8017},[96,15849,15850],{"class":106},"    p.",[96,15852,15050],{"class":1946},[96,15854,107],{"class":106},[96,15856,7900],{"class":211},[96,15858,2702],{"class":106},[96,15860,15861,15863,15865,15868,15870,15873,15876,15878,15880],{"class":98,"line":8029},[96,15862,6513],{"class":106},[96,15864,1151],{"class":102},[96,15866,15867],{"class":211}," \"姓名： \"",[96,15869,1427],{"class":102},[96,15871,15872],{"class":106}," p.",[96,15874,15875],{"class":1946},"getName",[96,15877,13034],{"class":106},[96,15879,1151],{"class":102},[96,15881,8824],{"class":106},[96,15883,15884],{"class":98,"line":8041},[96,15885,2383],{"emptyLinePlaceholder":23},[96,15887,15888],{"class":98,"line":9700},[96,15889,15890],{"class":165},"    \u002F\u002F年龄设置\n",[96,15892,15893,15895,15898,15900,15902],{"class":98,"line":9725},[96,15894,15850],{"class":106},[96,15896,15897],{"class":1946},"setAge",[96,15899,107],{"class":106},[96,15901,763],{"class":155},[96,15903,2702],{"class":106},[96,15905,15906,15908,15910,15913,15915,15917,15920,15922,15924],{"class":98,"line":9748},[96,15907,6513],{"class":106},[96,15909,1151],{"class":102},[96,15911,15912],{"class":211}," \"年龄： \"",[96,15914,1427],{"class":102},[96,15916,15872],{"class":106},[96,15918,15919],{"class":1946},"getAge",[96,15921,13034],{"class":106},[96,15923,1151],{"class":102},[96,15925,8824],{"class":106},[96,15927,15928],{"class":98,"line":9772},[96,15929,2383],{"emptyLinePlaceholder":23},[96,15931,15932],{"class":98,"line":9777},[96,15933,15934],{"class":165},"    \u002F\u002F情人设置\n",[96,15936,15937,15939,15942,15944,15947],{"class":98,"line":9782},[96,15938,15850],{"class":106},[96,15940,15941],{"class":1946},"setLover",[96,15943,107],{"class":106},[96,15945,15946],{"class":211},"\"苍井\"",[96,15948,2702],{"class":106},[96,15950,15951,15954],{"class":98,"line":9787},[96,15952,15953],{"class":165},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[96,15955,15956],{"class":165},"  \u002F\u002F只写属性，不可以读取\n",[96,15958,15959],{"class":98,"line":9796},[96,15960,2383],{"emptyLinePlaceholder":23},[96,15962,15963,15965,15967,15969],{"class":98,"line":9801},[96,15964,2286],{"class":1946},[96,15966,107],{"class":106},[96,15968,2291],{"class":211},[96,15970,2702],{"class":106},[96,15972,15973],{"class":98,"line":9807},[96,15974,2383],{"emptyLinePlaceholder":23},[96,15976,15977,15979,15981],{"class":98,"line":9828},[96,15978,4073],{"class":102},[96,15980,4076],{"class":155},[96,15982,1273],{"class":106},[96,15984,15985],{"class":98,"line":9834},[96,15986,1548],{"class":106},[67,15988,15990],{"id":15989},"_814封装案例","8.1.4封装案例",[50,15992,15993],{},[53,15994,15995,15998],{},[256,15996,15997],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1114,16000,16001,16004],{},[53,16002,16003],{},"求出立方体的面积和体积",[53,16005,16006],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[87,16008,16010],{"className":89,"code":16009,"language":91,"meta":18,"style":18},"#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",[93,16011,16012,16018,16028,16035,16039,16043,16048,16078,16082,16092,16102,16112,16116,16125,16129,16165,16169,16178,16182,16198,16202,16207,16216,16220,16227,16231,16240,16244,16251,16255,16264,16268,16275,16279,16284,16301,16305,16351,16355,16364,16368,16372,16376,16385,16389,16393,16398,16402,16408,16414,16420,16424,16428,16433,16455,16459,16513,16517,16525,16529,16534,16539,16552,16559,16575,16586,16592,16615,16621,16644,16658,16678,16684,16695,16718,16740,16745,16751,16765,16778,16783,16797,16802,16808,16813,16827,16832,16837,16851,16863,16868,16881,16886,16891,16896,16909,16914],{"__ignoreMap":18},[96,16013,16014,16016],{"class":98,"line":99},[96,16015,1932],{"class":102},[96,16017,1935],{"class":211},[96,16019,16020,16022,16024,16026],{"class":98,"line":19},[96,16021,1940],{"class":102},[96,16023,1943],{"class":102},[96,16025,1947],{"class":1946},[96,16027,1273],{"class":106},[96,16029,16030,16032],{"class":98,"line":1162},[96,16031,14678],{"class":102},[96,16033,16034],{"class":1946}," Cube\n",[96,16036,16037],{"class":98,"line":1177},[96,16038,1529],{"class":106},[96,16040,16041],{"class":98,"line":1183},[96,16042,14700],{"class":102},[96,16044,16045],{"class":98,"line":1197},[96,16046,16047],{"class":165},"    \u002F\u002F输入长宽高\n",[96,16049,16050,16052,16055,16057,16059,16062,16064,16066,16069,16071,16073,16076],{"class":98,"line":1203},[96,16051,14893],{"class":102},[96,16053,16054],{"class":1946}," setLwh",[96,16056,107],{"class":106},[96,16058,110],{"class":102},[96,16060,16061],{"class":5200}," l",[96,16063,485],{"class":106},[96,16065,110],{"class":102},[96,16067,16068],{"class":5200}," w",[96,16070,485],{"class":106},[96,16072,110],{"class":102},[96,16074,16075],{"class":5200}," h",[96,16077,113],{"class":106},[96,16079,16080],{"class":98,"line":1294},[96,16081,2013],{"class":106},[96,16083,16084,16087,16089],{"class":98,"line":1300},[96,16085,16086],{"class":106},"        m_L",[96,16088,152],{"class":102},[96,16090,16091],{"class":106},"l;\n",[96,16093,16094,16097,16099],{"class":98,"line":1312},[96,16095,16096],{"class":106},"        m_W",[96,16098,152],{"class":102},[96,16100,16101],{"class":106},"w;\n",[96,16103,16104,16107,16109],{"class":98,"line":1595},[96,16105,16106],{"class":106},"        m_H",[96,16108,152],{"class":102},[96,16110,16111],{"class":106},"h;\n",[96,16113,16114],{"class":98,"line":1600},[96,16115,2170],{"class":106},[96,16117,16118,16120,16123],{"class":98,"line":1606},[96,16119,1968],{"class":102},[96,16121,16122],{"class":1946}," mianji",[96,16124,1959],{"class":106},[96,16126,16127],{"class":98,"line":1611},[96,16128,2013],{"class":106},[96,16130,16131,16133,16135,16137,16140,16142,16145,16147,16150,16152,16155,16157,16160,16162],{"class":98,"line":1625},[96,16132,14736],{"class":102},[96,16134,14739],{"class":155},[96,16136,562],{"class":102},[96,16138,16139],{"class":106},"(m_L",[96,16141,562],{"class":102},[96,16143,16144],{"class":106},"m_W ",[96,16146,588],{"class":102},[96,16148,16149],{"class":106}," m_L",[96,16151,562],{"class":102},[96,16153,16154],{"class":106},"m_H ",[96,16156,588],{"class":102},[96,16158,16159],{"class":106}," m_W",[96,16161,562],{"class":102},[96,16163,16164],{"class":106},"m_H);\n",[96,16166,16167],{"class":98,"line":1630},[96,16168,2170],{"class":106},[96,16170,16171,16173,16176],{"class":98,"line":1636},[96,16172,1968],{"class":102},[96,16174,16175],{"class":1946}," tiji",[96,16177,1959],{"class":106},[96,16179,16180],{"class":98,"line":1657},[96,16181,2013],{"class":106},[96,16183,16184,16186,16188,16190,16193,16195],{"class":98,"line":1662},[96,16185,14736],{"class":102},[96,16187,16149],{"class":106},[96,16189,562],{"class":102},[96,16191,16192],{"class":106},"m_W",[96,16194,562],{"class":102},[96,16196,16197],{"class":106},"m_H;\n",[96,16199,16200],{"class":98,"line":1676},[96,16201,2170],{"class":106},[96,16203,16204],{"class":98,"line":1681},[96,16205,16206],{"class":165},"    \u002F\u002F获取长宽高\n",[96,16208,16209,16211,16214],{"class":98,"line":1710},[96,16210,1968],{"class":102},[96,16212,16213],{"class":1946}," getLength",[96,16215,1959],{"class":106},[96,16217,16218],{"class":98,"line":1715},[96,16219,2013],{"class":106},[96,16221,16222,16224],{"class":98,"line":1732},[96,16223,14736],{"class":102},[96,16225,16226],{"class":106}," m_L;\n",[96,16228,16229],{"class":98,"line":1737},[96,16230,2170],{"class":106},[96,16232,16233,16235,16238],{"class":98,"line":1742},[96,16234,1968],{"class":102},[96,16236,16237],{"class":1946}," getWidth",[96,16239,1959],{"class":106},[96,16241,16242],{"class":98,"line":1747},[96,16243,2013],{"class":106},[96,16245,16246,16248],{"class":98,"line":1761},[96,16247,14736],{"class":102},[96,16249,16250],{"class":106}," m_W;\n",[96,16252,16253],{"class":98,"line":1766},[96,16254,2170],{"class":106},[96,16256,16257,16259,16262],{"class":98,"line":2560},[96,16258,1968],{"class":102},[96,16260,16261],{"class":1946}," getHeight",[96,16263,1959],{"class":106},[96,16265,16266],{"class":98,"line":2574},[96,16267,2013],{"class":106},[96,16269,16270,16272],{"class":98,"line":2582},[96,16271,14736],{"class":102},[96,16273,16274],{"class":106}," m_H;\n",[96,16276,16277],{"class":98,"line":2587},[96,16278,2170],{"class":106},[96,16280,16281],{"class":98,"line":2593},[96,16282,16283],{"class":165},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[96,16285,16286,16289,16292,16294,16297,16299],{"class":98,"line":2599},[96,16287,16288],{"class":102},"    bool",[96,16290,16291],{"class":1946}," isEqual",[96,16293,107],{"class":106},[96,16295,16296],{"class":1946},"Cube",[96,16298,2832],{"class":5200},[96,16300,113],{"class":106},[96,16302,16303],{"class":98,"line":2604},[96,16304,2013],{"class":106},[96,16306,16307,16309,16312,16315,16317,16319,16322,16324,16327,16330,16332,16334,16337,16339,16341,16344,16346,16348],{"class":98,"line":7932},[96,16308,2480],{"class":102},[96,16310,16311],{"class":106}," (c.",[96,16313,16314],{"class":1946},"getLength",[96,16316,13034],{"class":106},[96,16318,2932],{"class":102},[96,16320,16321],{"class":106}," m_L ",[96,16323,1698],{"class":102},[96,16325,16326],{"class":106}," c.",[96,16328,16329],{"class":1946},"getWidth",[96,16331,13034],{"class":106},[96,16333,2932],{"class":102},[96,16335,16336],{"class":106}," m_W ",[96,16338,1698],{"class":102},[96,16340,16326],{"class":106},[96,16342,16343],{"class":1946},"getHeight",[96,16345,13034],{"class":106},[96,16347,2932],{"class":102},[96,16349,16350],{"class":106}," m_H)\n",[96,16352,16353],{"class":98,"line":7956},[96,16354,2493],{"class":106},[96,16356,16357,16359,16362],{"class":98,"line":7961},[96,16358,15716],{"class":102},[96,16360,16361],{"class":155}," true",[96,16363,1273],{"class":106},[96,16365,16366],{"class":98,"line":7967},[96,16367,2512],{"class":106},[96,16369,16370],{"class":98,"line":7994},[96,16371,2553],{"class":102},[96,16373,16374],{"class":98,"line":7999},[96,16375,2493],{"class":106},[96,16377,16378,16380,16383],{"class":98,"line":8005},[96,16379,15716],{"class":102},[96,16381,16382],{"class":155}," false",[96,16384,1273],{"class":106},[96,16386,16387],{"class":98,"line":8017},[96,16388,2512],{"class":106},[96,16390,16391],{"class":98,"line":8029},[96,16392,2170],{"class":106},[96,16394,16395],{"class":98,"line":8041},[96,16396,16397],{"class":165},"    \u002F\u002F私有属性\n",[96,16399,16400],{"class":98,"line":9700},[96,16401,15206],{"class":102},[96,16403,16404,16406],{"class":98,"line":9725},[96,16405,1968],{"class":102},[96,16407,16226],{"class":106},[96,16409,16410,16412],{"class":98,"line":9748},[96,16411,1968],{"class":102},[96,16413,16250],{"class":106},[96,16415,16416,16418],{"class":98,"line":9772},[96,16417,1968],{"class":102},[96,16419,16274],{"class":106},[96,16421,16422],{"class":98,"line":9777},[96,16423,2383],{"emptyLinePlaceholder":23},[96,16425,16426],{"class":98,"line":9782},[96,16427,3978],{"class":106},[96,16429,16430],{"class":98,"line":9787},[96,16431,16432],{"class":165},"\u002F\u002F全局函数判断两个立方体是否相等\n",[96,16434,16435,16437,16439,16441,16443,16446,16448,16450,16453],{"class":98,"line":9796},[96,16436,1337],{"class":102},[96,16438,16291],{"class":1946},[96,16440,107],{"class":106},[96,16442,16296],{"class":1946},[96,16444,16445],{"class":5200}," c1",[96,16447,485],{"class":106},[96,16449,16296],{"class":1946},[96,16451,16452],{"class":5200}," c2",[96,16454,113],{"class":106},[96,16456,16457],{"class":98,"line":9801},[96,16458,1529],{"class":106},[96,16460,16461,16463,16466,16468,16470,16472,16475,16477,16480,16482,16484,16486,16488,16490,16492,16494,16496,16498,16500,16502,16504,16506,16508,16510],{"class":98,"line":9807},[96,16462,4073],{"class":102},[96,16464,16465],{"class":106}," (c1.",[96,16467,16314],{"class":1946},[96,16469,13034],{"class":106},[96,16471,2932],{"class":102},[96,16473,16474],{"class":106}," c2.",[96,16476,16314],{"class":1946},[96,16478,16479],{"class":106},"()) ",[96,16481,1698],{"class":102},[96,16483,16465],{"class":106},[96,16485,16329],{"class":1946},[96,16487,13034],{"class":106},[96,16489,2932],{"class":102},[96,16491,16474],{"class":106},[96,16493,16329],{"class":1946},[96,16495,16479],{"class":106},[96,16497,1698],{"class":102},[96,16499,16465],{"class":106},[96,16501,16343],{"class":1946},[96,16503,13034],{"class":106},[96,16505,2932],{"class":102},[96,16507,16474],{"class":106},[96,16509,16343],{"class":1946},[96,16511,16512],{"class":106},"());\n",[96,16514,16515],{"class":98,"line":9828},[96,16516,1548],{"class":106},[96,16518,16519,16521,16523],{"class":98,"line":9834},[96,16520,110],{"class":102},[96,16522,1956],{"class":1946},[96,16524,1959],{"class":106},[96,16526,16527],{"class":98,"line":9848},[96,16528,1529],{"class":106},[96,16530,16531],{"class":98,"line":9854},[96,16532,16533],{"class":106},"    Cube c1;\n",[96,16535,16536],{"class":98,"line":9881},[96,16537,16538],{"class":165},"    \u002F\u002F输入立方体的长宽高\n",[96,16540,16541,16543,16545,16548,16550],{"class":98,"line":9890},[96,16542,1534],{"class":106},[96,16544,1151],{"class":102},[96,16546,16547],{"class":211},"\"请输入第一个立方体的长、宽、高：\"",[96,16549,1151],{"class":102},[96,16551,1174],{"class":106},[96,16553,16554,16556],{"class":98,"line":9896},[96,16555,1968],{"class":102},[96,16557,16558],{"class":106}," l,w,h,l1,w1,h1;\n",[96,16560,16561,16563,16565,16567,16569,16571,16573],{"class":98,"line":9904},[96,16562,1995],{"class":106},[96,16564,1412],{"class":102},[96,16566,625],{"class":106},[96,16568,1412],{"class":102},[96,16570,902],{"class":106},[96,16572,1412],{"class":102},[96,16574,16111],{"class":106},[96,16576,16577,16580,16583],{"class":98,"line":9909},[96,16578,16579],{"class":106},"    c1.",[96,16581,16582],{"class":1946},"setLwh",[96,16584,16585],{"class":106},"(l,w,h);\n",[96,16587,16589],{"class":98,"line":16588},66,[96,16590,16591],{"class":165},"    \u002F\u002F面积\n",[96,16593,16595,16597,16599,16602,16604,16606,16609,16611,16613],{"class":98,"line":16594},67,[96,16596,1534],{"class":106},[96,16598,1151],{"class":102},[96,16600,16601],{"class":211},"\"立方体的表面积为：\"",[96,16603,1151],{"class":102},[96,16605,14814],{"class":106},[96,16607,16608],{"class":1946},"mianji",[96,16610,2410],{"class":106},[96,16612,1151],{"class":102},[96,16614,1174],{"class":106},[96,16616,16618],{"class":98,"line":16617},68,[96,16619,16620],{"class":165},"    \u002F\u002F体积\n",[96,16622,16624,16626,16628,16631,16633,16635,16638,16640,16642],{"class":98,"line":16623},69,[96,16625,1534],{"class":106},[96,16627,1151],{"class":102},[96,16629,16630],{"class":211},"\"立方体的体积为：\"",[96,16632,1151],{"class":102},[96,16634,14814],{"class":106},[96,16636,16637],{"class":1946},"tiji",[96,16639,2410],{"class":106},[96,16641,1151],{"class":102},[96,16643,1174],{"class":106},[96,16645,16647,16649,16651,16654,16656],{"class":98,"line":16646},70,[96,16648,1534],{"class":106},[96,16650,1151],{"class":102},[96,16652,16653],{"class":211},"\"请输入第二个立方体的长、宽、高：\"",[96,16655,1151],{"class":102},[96,16657,1174],{"class":106},[96,16659,16661,16663,16665,16668,16670,16673,16675],{"class":98,"line":16660},71,[96,16662,1995],{"class":106},[96,16664,1412],{"class":102},[96,16666,16667],{"class":106},"l1",[96,16669,1412],{"class":102},[96,16671,16672],{"class":106},"w1",[96,16674,1412],{"class":102},[96,16676,16677],{"class":106},"h1;\n",[96,16679,16681],{"class":98,"line":16680},72,[96,16682,16683],{"class":106},"    Cube c2;\n",[96,16685,16687,16690,16692],{"class":98,"line":16686},73,[96,16688,16689],{"class":106},"    c2.",[96,16691,16582],{"class":1946},[96,16693,16694],{"class":106},"(l1,w1,h1);\n",[96,16696,16698,16700,16702,16705,16707,16710,16712,16714,16716],{"class":98,"line":16697},74,[96,16699,1534],{"class":106},[96,16701,1151],{"class":102},[96,16703,16704],{"class":211},"\"第二个立方体的表面积为：\"",[96,16706,1151],{"class":102},[96,16708,16709],{"class":106},"c2.",[96,16711,16608],{"class":1946},[96,16713,2410],{"class":106},[96,16715,1151],{"class":102},[96,16717,1174],{"class":106},[96,16719,16721,16723,16725,16728,16730,16732,16734,16736,16738],{"class":98,"line":16720},75,[96,16722,1534],{"class":106},[96,16724,1151],{"class":102},[96,16726,16727],{"class":211},"\"第二个立方体的体积为：\"",[96,16729,1151],{"class":102},[96,16731,16709],{"class":106},[96,16733,16637],{"class":1946},[96,16735,2410],{"class":106},[96,16737,1151],{"class":102},[96,16739,1174],{"class":106},[96,16741,16743],{"class":98,"line":16742},76,[96,16744,2383],{"emptyLinePlaceholder":23},[96,16746,16748],{"class":98,"line":16747},77,[96,16749,16750],{"class":165},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[96,16752,16754,16756,16758,16761,16763],{"class":98,"line":16753},78,[96,16755,1534],{"class":106},[96,16757,1151],{"class":102},[96,16759,16760],{"class":211},"\"内部函数判断结果：\"",[96,16762,1151],{"class":102},[96,16764,1174],{"class":106},[96,16766,16768,16770,16772,16775],{"class":98,"line":16767},79,[96,16769,3084],{"class":102},[96,16771,16465],{"class":106},[96,16773,16774],{"class":1946},"isEqual",[96,16776,16777],{"class":106},"(c2))\n",[96,16779,16781],{"class":98,"line":16780},80,[96,16782,2013],{"class":106},[96,16784,16786,16788,16790,16793,16795],{"class":98,"line":16785},81,[96,16787,3434],{"class":106},[96,16789,1151],{"class":102},[96,16791,16792],{"class":211},"\"两个立方体相等\"",[96,16794,1151],{"class":102},[96,16796,1174],{"class":106},[96,16798,16800],{"class":98,"line":16799},82,[96,16801,2170],{"class":106},[96,16803,16805],{"class":98,"line":16804},83,[96,16806,16807],{"class":102},"    else\n",[96,16809,16811],{"class":98,"line":16810},84,[96,16812,2013],{"class":106},[96,16814,16816,16818,16820,16823,16825],{"class":98,"line":16815},85,[96,16817,3434],{"class":106},[96,16819,1151],{"class":102},[96,16821,16822],{"class":211},"\"两个立方体不相等\"",[96,16824,1151],{"class":102},[96,16826,1174],{"class":106},[96,16828,16830],{"class":98,"line":16829},86,[96,16831,2170],{"class":106},[96,16833,16835],{"class":98,"line":16834},87,[96,16836,2383],{"emptyLinePlaceholder":23},[96,16838,16840,16842,16844,16847,16849],{"class":98,"line":16839},88,[96,16841,1534],{"class":106},[96,16843,1151],{"class":102},[96,16845,16846],{"class":211},"\"全局函数判断结果：\"",[96,16848,1151],{"class":102},[96,16850,1174],{"class":106},[96,16852,16854,16856,16858,16860],{"class":98,"line":16853},89,[96,16855,3084],{"class":102},[96,16857,1641],{"class":106},[96,16859,16774],{"class":1946},[96,16861,16862],{"class":106},"(c1, c2))\n",[96,16864,16866],{"class":98,"line":16865},90,[96,16867,2013],{"class":106},[96,16869,16871,16873,16875,16877,16879],{"class":98,"line":16870},91,[96,16872,3434],{"class":106},[96,16874,1151],{"class":102},[96,16876,16792],{"class":211},[96,16878,1151],{"class":102},[96,16880,1174],{"class":106},[96,16882,16884],{"class":98,"line":16883},92,[96,16885,2170],{"class":106},[96,16887,16889],{"class":98,"line":16888},93,[96,16890,16807],{"class":102},[96,16892,16894],{"class":98,"line":16893},94,[96,16895,2013],{"class":106},[96,16897,16899,16901,16903,16905,16907],{"class":98,"line":16898},95,[96,16900,3434],{"class":106},[96,16902,1151],{"class":102},[96,16904,16822],{"class":211},[96,16906,1151],{"class":102},[96,16908,1174],{"class":106},[96,16910,16912],{"class":98,"line":16911},96,[96,16913,2170],{"class":106},[96,16915,16917],{"class":98,"line":16916},97,[96,16918,1548],{"class":106},[50,16920,16921],{"start":19},[53,16922,16923],{},[256,16924,16925],{},"练习案例2：点和圆的关系",[1114,16927,16928],{},[53,16929,16930],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[87,16932,16934],{"className":89,"code":16933,"language":91,"meta":18,"style":18},"#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",[93,16935,16936,16942,16952,16959,16966,16970,16974,16979,17013,17018,17034,17048,17052,17056,17063,17070,17074,17080,17084,17088,17092,17114,17137,17142,17156,17171,17175,17179,17185,17190,17195,17199,17225,17229,17259,17287,17315,17332,17336,17349,17353,17357,17361,17374,17378,17382,17390,17394,17398,17402,17407,17411,17422,17429,17438,17448,17459,17466,17479,17490,17500,17511,17518,17532,17537,17547,17555],{"__ignoreMap":18},[96,16937,16938,16940],{"class":98,"line":99},[96,16939,1932],{"class":102},[96,16941,1935],{"class":211},[96,16943,16944,16946,16948,16950],{"class":98,"line":19},[96,16945,1940],{"class":102},[96,16947,1943],{"class":102},[96,16949,1947],{"class":1946},[96,16951,1273],{"class":106},[96,16953,16954,16956],{"class":98,"line":1162},[96,16955,1932],{"class":102},[96,16957,16958],{"class":211},"\u003Ccmath>\n",[96,16960,16961,16963],{"class":98,"line":1177},[96,16962,14678],{"class":102},[96,16964,16965],{"class":1946}," Point\n",[96,16967,16968],{"class":98,"line":1183},[96,16969,1529],{"class":106},[96,16971,16972],{"class":98,"line":1197},[96,16973,14700],{"class":102},[96,16975,16976],{"class":98,"line":1203},[96,16977,16978],{"class":165},"    \u002F\u002F赋值\n",[96,16980,16981,16983,16986,16988,16990,16993,16995,16997,17000,17003,17005,17008,17010],{"class":98,"line":1294},[96,16982,14893],{"class":102},[96,16984,16985],{"class":1946}," setPoint",[96,16987,107],{"class":106},[96,16989,14021],{"class":102},[96,16991,16992],{"class":5200}," x",[96,16994,12419],{"class":106},[96,16996,14021],{"class":102},[96,16998,16999],{"class":5200}," y",[96,17001,17002],{"class":106},") { m_x ",[96,17004,152],{"class":102},[96,17006,17007],{"class":106}," x; m_y ",[96,17009,152],{"class":102},[96,17011,17012],{"class":106}," y; }\n",[96,17014,17015],{"class":98,"line":1300},[96,17016,17017],{"class":165},"    \u002F\u002F获取坐标\n",[96,17019,17020,17022,17025,17028,17031],{"class":98,"line":1312},[96,17021,14722],{"class":102},[96,17023,17024],{"class":1946}," getX",[96,17026,17027],{"class":106},"() { ",[96,17029,17030],{"class":102},"return",[96,17032,17033],{"class":106}," m_x; }\n",[96,17035,17036,17038,17041,17043,17045],{"class":98,"line":1595},[96,17037,14722],{"class":102},[96,17039,17040],{"class":1946}," getY",[96,17042,17027],{"class":106},[96,17044,17030],{"class":102},[96,17046,17047],{"class":106}," m_y; }\n",[96,17049,17050],{"class":98,"line":1600},[96,17051,2383],{"emptyLinePlaceholder":23},[96,17053,17054],{"class":98,"line":1606},[96,17055,15206],{"class":102},[96,17057,17058,17060],{"class":98,"line":1611},[96,17059,14722],{"class":102},[96,17061,17062],{"class":106}," m_x;\n",[96,17064,17065,17067],{"class":98,"line":1625},[96,17066,14722],{"class":102},[96,17068,17069],{"class":106}," m_y;\n",[96,17071,17072],{"class":98,"line":1630},[96,17073,3978],{"class":106},[96,17075,17076,17078],{"class":98,"line":1636},[96,17077,14678],{"class":102},[96,17079,14681],{"class":1946},[96,17081,17082],{"class":98,"line":1657},[96,17083,1529],{"class":106},[96,17085,17086],{"class":98,"line":1662},[96,17087,14700],{"class":102},[96,17089,17090],{"class":98,"line":1676},[96,17091,16978],{"class":165},[96,17093,17094,17096,17099,17101,17103,17106,17109,17111],{"class":98,"line":1681},[96,17095,14893],{"class":102},[96,17097,17098],{"class":1946}," setRadius",[96,17100,107],{"class":106},[96,17102,14021],{"class":102},[96,17104,17105],{"class":5200}," r",[96,17107,17108],{"class":106},") { m_r ",[96,17110,152],{"class":102},[96,17112,17113],{"class":106}," r; }\n",[96,17115,17116,17118,17121,17123,17126,17129,17132,17134],{"class":98,"line":1710},[96,17117,14893],{"class":102},[96,17119,17120],{"class":1946}," setCenter",[96,17122,107],{"class":106},[96,17124,17125],{"class":1946},"Point",[96,17127,17128],{"class":5200}," center",[96,17130,17131],{"class":106},") { m_center ",[96,17133,152],{"class":102},[96,17135,17136],{"class":106}," center; }\n",[96,17138,17139],{"class":98,"line":1715},[96,17140,17141],{"class":165},"    \u002F\u002F获取属性\n",[96,17143,17144,17146,17149,17151,17153],{"class":98,"line":1732},[96,17145,14722],{"class":102},[96,17147,17148],{"class":1946}," getRadius",[96,17150,17027],{"class":106},[96,17152,17030],{"class":102},[96,17154,17155],{"class":106}," m_r; }\n",[96,17157,17158,17161,17164,17166,17168],{"class":98,"line":1737},[96,17159,17160],{"class":1946},"    Point",[96,17162,17163],{"class":1946}," getCenter",[96,17165,17027],{"class":106},[96,17167,17030],{"class":102},[96,17169,17170],{"class":106}," m_center; }\n",[96,17172,17173],{"class":98,"line":1742},[96,17174,2383],{"emptyLinePlaceholder":23},[96,17176,17177],{"class":98,"line":1747},[96,17178,15206],{"class":102},[96,17180,17181,17183],{"class":98,"line":1761},[96,17182,14722],{"class":102},[96,17184,14712],{"class":106},[96,17186,17187],{"class":98,"line":1766},[96,17188,17189],{"class":165},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[96,17191,17192],{"class":98,"line":2560},[96,17193,17194],{"class":106},"    Point m_center;\n",[96,17196,17197],{"class":98,"line":2574},[96,17198,3978],{"class":106},[96,17200,17201,17203,17206,17208,17211,17213,17215,17217,17219,17221,17223],{"class":98,"line":2582},[96,17202,5348],{"class":102},[96,17204,17205],{"class":1946}," isInCircle",[96,17207,107],{"class":106},[96,17209,17210],{"class":1946},"Circle",[96,17212,10568],{"class":102},[96,17214,395],{"class":5200},[96,17216,485],{"class":106},[96,17218,17125],{"class":1946},[96,17220,10568],{"class":102},[96,17222,14],{"class":5200},[96,17224,113],{"class":106},[96,17226,17227],{"class":98,"line":2587},[96,17228,1529],{"class":106},[96,17230,17231,17233,17236,17238,17240,17243,17246,17249,17251,17253,17255,17257],{"class":98,"line":2593},[96,17232,14722],{"class":102},[96,17234,17235],{"class":106}," dx ",[96,17237,152],{"class":102},[96,17239,16326],{"class":106},[96,17241,17242],{"class":1946},"getCenter",[96,17244,17245],{"class":106},"().",[96,17247,17248],{"class":1946},"getX",[96,17250,13034],{"class":106},[96,17252,639],{"class":102},[96,17254,15872],{"class":106},[96,17256,17248],{"class":1946},[96,17258,5620],{"class":106},[96,17260,17261,17263,17266,17268,17270,17272,17274,17277,17279,17281,17283,17285],{"class":98,"line":2599},[96,17262,14722],{"class":102},[96,17264,17265],{"class":106}," dy ",[96,17267,152],{"class":102},[96,17269,16326],{"class":106},[96,17271,17242],{"class":1946},[96,17273,17245],{"class":106},[96,17275,17276],{"class":1946},"getY",[96,17278,13034],{"class":106},[96,17280,639],{"class":102},[96,17282,15872],{"class":106},[96,17284,17276],{"class":1946},[96,17286,5620],{"class":106},[96,17288,17289,17291,17294,17296,17299,17302,17304,17306,17308,17310,17312],{"class":98,"line":2604},[96,17290,14722],{"class":102},[96,17292,17293],{"class":106}," distance ",[96,17295,152],{"class":102},[96,17297,17298],{"class":1946}," sqrt",[96,17300,17301],{"class":106},"(dx ",[96,17303,562],{"class":102},[96,17305,17235],{"class":106},[96,17307,588],{"class":102},[96,17309,17265],{"class":106},[96,17311,562],{"class":102},[96,17313,17314],{"class":106}," dy);\n",[96,17316,17317,17319,17322,17324,17326,17329],{"class":98,"line":7932},[96,17318,3084],{"class":102},[96,17320,17321],{"class":106}," (distance ",[96,17323,1017],{"class":102},[96,17325,16326],{"class":106},[96,17327,17328],{"class":1946},"getRadius",[96,17330,17331],{"class":106},"())\n",[96,17333,17334],{"class":98,"line":7956},[96,17335,2013],{"class":106},[96,17337,17338,17340,17342,17345,17347],{"class":98,"line":7961},[96,17339,9653],{"class":106},[96,17341,1151],{"class":102},[96,17343,17344],{"class":211}," \"点在圆内\"",[96,17346,1427],{"class":102},[96,17348,8824],{"class":106},[96,17350,17351],{"class":98,"line":7967},[96,17352,2170],{"class":106},[96,17354,17355],{"class":98,"line":7994},[96,17356,16807],{"class":102},[96,17358,17359],{"class":98,"line":7999},[96,17360,2013],{"class":106},[96,17362,17363,17365,17367,17370,17372],{"class":98,"line":8005},[96,17364,9653],{"class":106},[96,17366,1151],{"class":102},[96,17368,17369],{"class":211}," \"点在圆外\"",[96,17371,1427],{"class":102},[96,17373,8824],{"class":106},[96,17375,17376],{"class":98,"line":8017},[96,17377,2170],{"class":106},[96,17379,17380],{"class":98,"line":8029},[96,17381,1548],{"class":106},[96,17383,17384,17386,17388],{"class":98,"line":8041},[96,17385,110],{"class":102},[96,17387,1956],{"class":1946},[96,17389,1959],{"class":106},[96,17391,17392],{"class":98,"line":9700},[96,17393,1529],{"class":106},[96,17395,17396],{"class":98,"line":9725},[96,17397,15037],{"class":165},[96,17399,17400],{"class":98,"line":9748},[96,17401,14784],{"class":106},[96,17403,17404],{"class":98,"line":9772},[96,17405,17406],{"class":106},"    Point p1;\n",[96,17408,17409],{"class":98,"line":9777},[96,17410,16978],{"class":165},[96,17412,17413,17415,17417,17420],{"class":98,"line":9782},[96,17414,1534],{"class":106},[96,17416,1151],{"class":102},[96,17418,17419],{"class":211},"\"请输入圆的半径：\"",[96,17421,1273],{"class":106},[96,17423,17424,17426],{"class":98,"line":9787},[96,17425,14722],{"class":102},[96,17427,17428],{"class":106}," r;\n",[96,17430,17431,17433,17435],{"class":98,"line":9796},[96,17432,1995],{"class":106},[96,17434,1412],{"class":102},[96,17436,17437],{"class":106},"r;\n",[96,17439,17440,17442,17445],{"class":98,"line":9801},[96,17441,16579],{"class":106},[96,17443,17444],{"class":1946},"setRadius",[96,17446,17447],{"class":106},"(r);\n",[96,17449,17450,17452,17454,17457],{"class":98,"line":9807},[96,17451,1534],{"class":106},[96,17453,1151],{"class":102},[96,17455,17456],{"class":211},"\"请输入圆心坐标：\"",[96,17458,1273],{"class":106},[96,17460,17461,17463],{"class":98,"line":9828},[96,17462,14722],{"class":102},[96,17464,17465],{"class":106}," x, y;\n",[96,17467,17468,17470,17472,17474,17476],{"class":98,"line":9834},[96,17469,1995],{"class":106},[96,17471,1412],{"class":102},[96,17473,927],{"class":106},[96,17475,1412],{"class":102},[96,17477,17478],{"class":106},"y;\n",[96,17480,17481,17484,17487],{"class":98,"line":9848},[96,17482,17483],{"class":106},"    p1.",[96,17485,17486],{"class":1946},"setPoint",[96,17488,17489],{"class":106},"(x, y);\n",[96,17491,17492,17494,17497],{"class":98,"line":9854},[96,17493,16579],{"class":106},[96,17495,17496],{"class":1946},"setCenter",[96,17498,17499],{"class":106},"(p1);\n",[96,17501,17502,17504,17506,17509],{"class":98,"line":9881},[96,17503,1534],{"class":106},[96,17505,1151],{"class":102},[96,17507,17508],{"class":211},"\"请输入测试点坐标：\"",[96,17510,1273],{"class":106},[96,17512,17513,17515],{"class":98,"line":9890},[96,17514,14722],{"class":102},[96,17516,17517],{"class":106}," x1, y1;\n",[96,17519,17520,17522,17524,17527,17529],{"class":98,"line":9896},[96,17521,1995],{"class":106},[96,17523,1412],{"class":102},[96,17525,17526],{"class":106},"x1",[96,17528,1412],{"class":102},[96,17530,17531],{"class":106},"y1;\n",[96,17533,17534],{"class":98,"line":9904},[96,17535,17536],{"class":106},"    Point p2;\n",[96,17538,17539,17542,17544],{"class":98,"line":9909},[96,17540,17541],{"class":106},"    p2.",[96,17543,17486],{"class":1946},[96,17545,17546],{"class":106},"(x1, y1);\n",[96,17548,17549,17552],{"class":98,"line":16588},[96,17550,17551],{"class":1946},"    isInCircle",[96,17553,17554],{"class":106},"(c1, p2);\n",[96,17556,17557],{"class":98,"line":16594},[96,17558,1548],{"class":106},[14,17560,17561],{},"在类中可以让另一个类作为本来的成员",[14,17563,17564],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[14,17566,17567],{},"创建point.h",[87,17569,17571],{"className":89,"code":17570,"language":91,"meta":18,"style":18},"#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",[93,17572,17573,17584,17590,17600,17606,17610,17615,17619,17623,17643,17647,17655,17663,17667,17671,17677,17683],{"__ignoreMap":18},[96,17574,17575,17578,17581],{"class":98,"line":99},[96,17576,17577],{"class":102},"#pragma",[96,17579,17580],{"class":1946}," once",[96,17582,17583],{"class":165}," \u002F\u002F防止头文件重复包含\n",[96,17585,17586,17588],{"class":98,"line":19},[96,17587,1932],{"class":102},[96,17589,1935],{"class":211},[96,17591,17592,17594,17596,17598],{"class":98,"line":1162},[96,17593,1940],{"class":102},[96,17595,1943],{"class":102},[96,17597,1947],{"class":1946},[96,17599,1273],{"class":106},[96,17601,17602,17604],{"class":98,"line":1177},[96,17603,14678],{"class":102},[96,17605,16965],{"class":1946},[96,17607,17608],{"class":98,"line":1183},[96,17609,1529],{"class":106},[96,17611,17612],{"class":98,"line":1197},[96,17613,17614],{"class":165},"\u002F\u002F做好声明与变量定义就可以\n",[96,17616,17617],{"class":98,"line":1203},[96,17618,14700],{"class":102},[96,17620,17621],{"class":98,"line":1294},[96,17622,16978],{"class":165},[96,17624,17625,17627,17629,17631,17633,17635,17637,17639,17641],{"class":98,"line":1300},[96,17626,14893],{"class":102},[96,17628,16985],{"class":1946},[96,17630,107],{"class":106},[96,17632,14021],{"class":102},[96,17634,16992],{"class":5200},[96,17636,12419],{"class":106},[96,17638,14021],{"class":102},[96,17640,16999],{"class":5200},[96,17642,2702],{"class":106},[96,17644,17645],{"class":98,"line":1312},[96,17646,17017],{"class":165},[96,17648,17649,17651,17653],{"class":98,"line":1595},[96,17650,14722],{"class":102},[96,17652,17024],{"class":1946},[96,17654,5620],{"class":106},[96,17656,17657,17659,17661],{"class":98,"line":1600},[96,17658,14722],{"class":102},[96,17660,17040],{"class":1946},[96,17662,5620],{"class":106},[96,17664,17665],{"class":98,"line":1606},[96,17666,2383],{"emptyLinePlaceholder":23},[96,17668,17669],{"class":98,"line":1611},[96,17670,15206],{"class":102},[96,17672,17673,17675],{"class":98,"line":1625},[96,17674,14722],{"class":102},[96,17676,17062],{"class":106},[96,17678,17679,17681],{"class":98,"line":1630},[96,17680,14722],{"class":102},[96,17682,17069],{"class":106},[96,17684,17685],{"class":98,"line":1636},[96,17686,3978],{"class":106},[14,17688,17689],{},"创建point.cpp",[87,17691,17693],{"className":89,"code":17692,"language":91,"meta":18,"style":18},"#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",[93,17694,17695,17702,17707,17741,17745,17761],{"__ignoreMap":18},[96,17696,17697,17699],{"class":98,"line":99},[96,17698,1932],{"class":102},[96,17700,17701],{"class":211},"\u003Cpoint.h>\n",[96,17703,17704],{"class":98,"line":19},[96,17705,17706],{"class":165},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[96,17708,17709,17711,17714,17717,17719,17721,17723,17725,17727,17729,17731,17733,17735,17737,17739],{"class":98,"line":1162},[96,17710,14893],{"class":102},[96,17712,17713],{"class":1946}," Point",[96,17715,17716],{"class":106},"::",[96,17718,17486],{"class":1946},[96,17720,107],{"class":106},[96,17722,14021],{"class":102},[96,17724,16992],{"class":5200},[96,17726,12419],{"class":106},[96,17728,14021],{"class":102},[96,17730,16999],{"class":5200},[96,17732,17002],{"class":106},[96,17734,152],{"class":102},[96,17736,17007],{"class":106},[96,17738,152],{"class":102},[96,17740,17012],{"class":106},[96,17742,17743],{"class":98,"line":1177},[96,17744,17017],{"class":165},[96,17746,17747,17749,17751,17753,17755,17757,17759],{"class":98,"line":1183},[96,17748,14722],{"class":102},[96,17750,17713],{"class":1946},[96,17752,17716],{"class":106},[96,17754,17248],{"class":1946},[96,17756,17027],{"class":106},[96,17758,17030],{"class":102},[96,17760,17033],{"class":106},[96,17762,17763,17765,17767,17769,17771,17773,17775],{"class":98,"line":1197},[96,17764,14722],{"class":102},[96,17766,17713],{"class":1946},[96,17768,17716],{"class":106},[96,17770,17276],{"class":1946},[96,17772,17027],{"class":106},[96,17774,17030],{"class":102},[96,17776,17047],{"class":106},[14,17778,17779],{},"创建circle.h",[87,17781,17783],{"className":89,"code":17782,"language":91,"meta":18,"style":18},"#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",[93,17784,17785,17792,17798,17808,17814,17820,17824,17828,17832,17846,17860,17864,17872,17880,17884,17888,17894,17898,17902],{"__ignoreMap":18},[96,17786,17787,17789],{"class":98,"line":99},[96,17788,17577],{"class":102},[96,17790,17791],{"class":1946}," once\n",[96,17793,17794,17796],{"class":98,"line":19},[96,17795,1932],{"class":102},[96,17797,1935],{"class":211},[96,17799,17800,17802,17804,17806],{"class":98,"line":1162},[96,17801,1940],{"class":102},[96,17803,1943],{"class":102},[96,17805,1947],{"class":1946},[96,17807,1273],{"class":106},[96,17809,17810,17812],{"class":98,"line":1177},[96,17811,1932],{"class":102},[96,17813,17701],{"class":211},[96,17815,17816,17818],{"class":98,"line":1183},[96,17817,14678],{"class":102},[96,17819,14681],{"class":1946},[96,17821,17822],{"class":98,"line":1197},[96,17823,1529],{"class":106},[96,17825,17826],{"class":98,"line":1203},[96,17827,14700],{"class":102},[96,17829,17830],{"class":98,"line":1294},[96,17831,16978],{"class":165},[96,17833,17834,17836,17838,17840,17842,17844],{"class":98,"line":1300},[96,17835,14893],{"class":102},[96,17837,17098],{"class":1946},[96,17839,107],{"class":106},[96,17841,14021],{"class":102},[96,17843,17105],{"class":5200},[96,17845,2702],{"class":106},[96,17847,17848,17850,17852,17854,17856,17858],{"class":98,"line":1312},[96,17849,14893],{"class":102},[96,17851,17120],{"class":1946},[96,17853,107],{"class":106},[96,17855,17125],{"class":1946},[96,17857,17128],{"class":5200},[96,17859,2702],{"class":106},[96,17861,17862],{"class":98,"line":1595},[96,17863,17141],{"class":165},[96,17865,17866,17868,17870],{"class":98,"line":1600},[96,17867,14722],{"class":102},[96,17869,17148],{"class":1946},[96,17871,5620],{"class":106},[96,17873,17874,17876,17878],{"class":98,"line":1606},[96,17875,17160],{"class":1946},[96,17877,17163],{"class":1946},[96,17879,5620],{"class":106},[96,17881,17882],{"class":98,"line":1611},[96,17883,2383],{"emptyLinePlaceholder":23},[96,17885,17886],{"class":98,"line":1625},[96,17887,15206],{"class":102},[96,17889,17890,17892],{"class":98,"line":1630},[96,17891,14722],{"class":102},[96,17893,14712],{"class":106},[96,17895,17896],{"class":98,"line":1636},[96,17897,17189],{"class":165},[96,17899,17900],{"class":98,"line":1657},[96,17901,17194],{"class":106},[96,17903,17904],{"class":98,"line":1662},[96,17905,3978],{"class":106},[14,17907,17908],{},"创建circle.cpp",[87,17910,17912],{"className":89,"code":17911,"language":91,"meta":18,"style":18},"#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",[93,17913,17914,17921,17944,17966,17971,17987],{"__ignoreMap":18},[96,17915,17916,17918],{"class":98,"line":99},[96,17917,1932],{"class":102},[96,17919,17920],{"class":211},"\u003Ccircle.h>\n",[96,17922,17923,17925,17928,17930,17932,17934,17936,17938,17940,17942],{"class":98,"line":19},[96,17924,5348],{"class":102},[96,17926,17927],{"class":1946}," Circle",[96,17929,17716],{"class":106},[96,17931,17444],{"class":1946},[96,17933,107],{"class":106},[96,17935,14021],{"class":102},[96,17937,17105],{"class":5200},[96,17939,17108],{"class":106},[96,17941,152],{"class":102},[96,17943,17113],{"class":106},[96,17945,17946,17948,17950,17952,17954,17956,17958,17960,17962,17964],{"class":98,"line":1162},[96,17947,5348],{"class":102},[96,17949,17927],{"class":1946},[96,17951,17716],{"class":106},[96,17953,17496],{"class":1946},[96,17955,107],{"class":106},[96,17957,17125],{"class":1946},[96,17959,17128],{"class":5200},[96,17961,17131],{"class":106},[96,17963,152],{"class":102},[96,17965,17136],{"class":106},[96,17967,17968],{"class":98,"line":1177},[96,17969,17970],{"class":165},"\u002F\u002F获取属性\n",[96,17972,17973,17975,17977,17979,17981,17983,17985],{"class":98,"line":1183},[96,17974,14021],{"class":102},[96,17976,17927],{"class":1946},[96,17978,17716],{"class":106},[96,17980,17328],{"class":1946},[96,17982,17027],{"class":106},[96,17984,17030],{"class":102},[96,17986,17155],{"class":106},[96,17988,17989,17991,17993,17995,17997,17999,18001],{"class":98,"line":1197},[96,17990,17125],{"class":1946},[96,17992,17927],{"class":1946},[96,17994,17716],{"class":106},[96,17996,17242],{"class":1946},[96,17998,17027],{"class":106},[96,18000,17030],{"class":102},[96,18002,17170],{"class":106},[14,18004,18005],{},"使用封装的类",[87,18007,18009],{"className":89,"code":18008,"language":91,"meta":18,"style":18},"#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",[93,18010,18011,18017,18027,18033,18039,18063,18067,18093,18119,18143,18157,18161,18173,18177,18181,18185,18197,18201,18205,18213,18217,18221,18225,18229,18233,18243,18249,18257,18265,18275,18281,18293,18301,18309,18319,18325,18337,18341,18349,18355],{"__ignoreMap":18},[96,18012,18013,18015],{"class":98,"line":99},[96,18014,1932],{"class":102},[96,18016,1935],{"class":211},[96,18018,18019,18021,18023,18025],{"class":98,"line":19},[96,18020,1940],{"class":102},[96,18022,1943],{"class":102},[96,18024,1947],{"class":1946},[96,18026,1273],{"class":106},[96,18028,18029,18031],{"class":98,"line":1162},[96,18030,1932],{"class":102},[96,18032,17920],{"class":211},[96,18034,18035,18037],{"class":98,"line":1177},[96,18036,1932],{"class":102},[96,18038,17701],{"class":211},[96,18040,18041,18043,18045,18047,18049,18051,18053,18055,18057,18059,18061],{"class":98,"line":1183},[96,18042,5348],{"class":102},[96,18044,17205],{"class":1946},[96,18046,107],{"class":106},[96,18048,17210],{"class":1946},[96,18050,10568],{"class":102},[96,18052,395],{"class":5200},[96,18054,485],{"class":106},[96,18056,17125],{"class":1946},[96,18058,10568],{"class":102},[96,18060,14],{"class":5200},[96,18062,113],{"class":106},[96,18064,18065],{"class":98,"line":1197},[96,18066,1529],{"class":106},[96,18068,18069,18071,18073,18075,18077,18079,18081,18083,18085,18087,18089,18091],{"class":98,"line":1203},[96,18070,14722],{"class":102},[96,18072,17235],{"class":106},[96,18074,152],{"class":102},[96,18076,16326],{"class":106},[96,18078,17242],{"class":1946},[96,18080,17245],{"class":106},[96,18082,17248],{"class":1946},[96,18084,13034],{"class":106},[96,18086,639],{"class":102},[96,18088,15872],{"class":106},[96,18090,17248],{"class":1946},[96,18092,5620],{"class":106},[96,18094,18095,18097,18099,18101,18103,18105,18107,18109,18111,18113,18115,18117],{"class":98,"line":1294},[96,18096,14722],{"class":102},[96,18098,17265],{"class":106},[96,18100,152],{"class":102},[96,18102,16326],{"class":106},[96,18104,17242],{"class":1946},[96,18106,17245],{"class":106},[96,18108,17276],{"class":1946},[96,18110,13034],{"class":106},[96,18112,639],{"class":102},[96,18114,15872],{"class":106},[96,18116,17276],{"class":1946},[96,18118,5620],{"class":106},[96,18120,18121,18123,18125,18127,18129,18131,18133,18135,18137,18139,18141],{"class":98,"line":1300},[96,18122,14722],{"class":102},[96,18124,17293],{"class":106},[96,18126,152],{"class":102},[96,18128,17298],{"class":1946},[96,18130,17301],{"class":106},[96,18132,562],{"class":102},[96,18134,17235],{"class":106},[96,18136,588],{"class":102},[96,18138,17265],{"class":106},[96,18140,562],{"class":102},[96,18142,17314],{"class":106},[96,18144,18145,18147,18149,18151,18153,18155],{"class":98,"line":1312},[96,18146,3084],{"class":102},[96,18148,17321],{"class":106},[96,18150,1017],{"class":102},[96,18152,16326],{"class":106},[96,18154,17328],{"class":1946},[96,18156,17331],{"class":106},[96,18158,18159],{"class":98,"line":1595},[96,18160,2013],{"class":106},[96,18162,18163,18165,18167,18169,18171],{"class":98,"line":1600},[96,18164,9653],{"class":106},[96,18166,1151],{"class":102},[96,18168,17344],{"class":211},[96,18170,1427],{"class":102},[96,18172,8824],{"class":106},[96,18174,18175],{"class":98,"line":1606},[96,18176,2170],{"class":106},[96,18178,18179],{"class":98,"line":1611},[96,18180,16807],{"class":102},[96,18182,18183],{"class":98,"line":1625},[96,18184,2013],{"class":106},[96,18186,18187,18189,18191,18193,18195],{"class":98,"line":1630},[96,18188,9653],{"class":106},[96,18190,1151],{"class":102},[96,18192,17369],{"class":211},[96,18194,1427],{"class":102},[96,18196,8824],{"class":106},[96,18198,18199],{"class":98,"line":1636},[96,18200,2170],{"class":106},[96,18202,18203],{"class":98,"line":1657},[96,18204,1548],{"class":106},[96,18206,18207,18209,18211],{"class":98,"line":1662},[96,18208,110],{"class":102},[96,18210,1956],{"class":1946},[96,18212,1959],{"class":106},[96,18214,18215],{"class":98,"line":1676},[96,18216,1529],{"class":106},[96,18218,18219],{"class":98,"line":1681},[96,18220,15037],{"class":165},[96,18222,18223],{"class":98,"line":1710},[96,18224,14784],{"class":106},[96,18226,18227],{"class":98,"line":1715},[96,18228,17406],{"class":106},[96,18230,18231],{"class":98,"line":1732},[96,18232,16978],{"class":165},[96,18234,18235,18237,18239,18241],{"class":98,"line":1737},[96,18236,1534],{"class":106},[96,18238,1151],{"class":102},[96,18240,17419],{"class":211},[96,18242,1273],{"class":106},[96,18244,18245,18247],{"class":98,"line":1742},[96,18246,14722],{"class":102},[96,18248,17428],{"class":106},[96,18250,18251,18253,18255],{"class":98,"line":1747},[96,18252,1995],{"class":106},[96,18254,1412],{"class":102},[96,18256,17437],{"class":106},[96,18258,18259,18261,18263],{"class":98,"line":1761},[96,18260,16579],{"class":106},[96,18262,17444],{"class":1946},[96,18264,17447],{"class":106},[96,18266,18267,18269,18271,18273],{"class":98,"line":1766},[96,18268,1534],{"class":106},[96,18270,1151],{"class":102},[96,18272,17456],{"class":211},[96,18274,1273],{"class":106},[96,18276,18277,18279],{"class":98,"line":2560},[96,18278,14722],{"class":102},[96,18280,17465],{"class":106},[96,18282,18283,18285,18287,18289,18291],{"class":98,"line":2574},[96,18284,1995],{"class":106},[96,18286,1412],{"class":102},[96,18288,927],{"class":106},[96,18290,1412],{"class":102},[96,18292,17478],{"class":106},[96,18294,18295,18297,18299],{"class":98,"line":2582},[96,18296,17483],{"class":106},[96,18298,17486],{"class":1946},[96,18300,17489],{"class":106},[96,18302,18303,18305,18307],{"class":98,"line":2587},[96,18304,16579],{"class":106},[96,18306,17496],{"class":1946},[96,18308,17499],{"class":106},[96,18310,18311,18313,18315,18317],{"class":98,"line":2593},[96,18312,1534],{"class":106},[96,18314,1151],{"class":102},[96,18316,17508],{"class":211},[96,18318,1273],{"class":106},[96,18320,18321,18323],{"class":98,"line":2599},[96,18322,14722],{"class":102},[96,18324,17517],{"class":106},[96,18326,18327,18329,18331,18333,18335],{"class":98,"line":2604},[96,18328,1995],{"class":106},[96,18330,1412],{"class":102},[96,18332,17526],{"class":106},[96,18334,1412],{"class":102},[96,18336,17531],{"class":106},[96,18338,18339],{"class":98,"line":7932},[96,18340,17536],{"class":106},[96,18342,18343,18345,18347],{"class":98,"line":7956},[96,18344,17541],{"class":106},[96,18346,17486],{"class":1946},[96,18348,17546],{"class":106},[96,18350,18351,18353],{"class":98,"line":7961},[96,18352,17551],{"class":1946},[96,18354,17554],{"class":106},[96,18356,18357],{"class":98,"line":7967},[96,18358,1548],{"class":106},[38,18360,18362],{"id":18361},"_82对象的初始化清理","8.2对象的初始化清理",[1114,18364,18365,18368],{},[53,18366,18367],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[53,18369,18370],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[67,18372,18374],{"id":18373},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[14,18376,18377,18378,18381],{},"对象的",[256,18379,18380],{},"初始化和清理","也是两个非常重要的安全问题",[14,18383,18384],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[14,18386,18387],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[14,18389,18390,18391,18394,18395,18398],{},"c++利用了",[256,18392,18393],{},"构造函数","和",[256,18396,18397],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[14,18400,18401,18402],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[256,18403,18404],{},"我们不提供构造和析构，编译器会提供",[14,18406,18407],{},[256,18408,18409],{},"编译器提供的构造函数和析构函数是空实现。",[1114,18411,18412,18415],{},[53,18413,18414],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[53,18416,18417,18418,18421],{},"析构函数：主要作用在于对象",[256,18419,18420],{},"销毁前","系统自动调用，执行一些清理工作。",[14,18423,18424,18427],{},[256,18425,18426],{},"构造函数语法：",[93,18428,18429],{},"类名(){}",[50,18431,18432,18435,18438,18441,18444],{},[53,18433,18434],{},"构造函数，没有返回值也不写void",[53,18436,18437],{},"函数名称与类名相同",[53,18439,18440],{},"构造函数可以有参数，因此可以发生重载",[53,18442,18443],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[53,18445,18446,18447,536],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[93,18448,18449],{},"Person(){}",[14,18451,18452,13779,18455],{},[256,18453,18454],{},"析构函数语法：",[93,18456,18457],{},"~类名(){}",[50,18459,18460,18463,18466,18472],{},[53,18461,18462],{},"析构函数，没有返回值也不写void",[53,18464,18465],{},"函数名称与类名相同,在名称前加上符号  ~",[53,18467,18468,18469],{},"析构函数不可以有参数，因此",[256,18470,18471],{},"不可以发生重载",[53,18473,18474],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[87,18476,18478],{"className":89,"code":18477,"language":91,"meta":18,"style":18},"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",[93,18479,18480,18486,18490,18494,18499,18506,18510,18523,18527,18532,18539,18543,18556,18560,18564,18568,18572,18580,18584,18592,18596,18600,18608,18612,18617,18621,18628,18632,18645,18649,18657],{"__ignoreMap":18},[96,18481,18482,18484],{"class":98,"line":99},[96,18483,14678],{"class":102},[96,18485,15155],{"class":1946},[96,18487,18488],{"class":98,"line":19},[96,18489,1529],{"class":106},[96,18491,18492],{"class":98,"line":1162},[96,18493,14700],{"class":102},[96,18495,18496],{"class":98,"line":1177},[96,18497,18498],{"class":165},"    \u002F\u002F构造函数\n",[96,18500,18501,18504],{"class":98,"line":1183},[96,18502,18503],{"class":1946},"    Person",[96,18505,1959],{"class":106},[96,18507,18508],{"class":98,"line":1197},[96,18509,2013],{"class":106},[96,18511,18512,18514,18516,18519,18521],{"class":98,"line":1203},[96,18513,9653],{"class":106},[96,18515,1151],{"class":102},[96,18517,18518],{"class":211}," \"Person的构造函数调用\"",[96,18520,1427],{"class":102},[96,18522,8824],{"class":106},[96,18524,18525],{"class":98,"line":1294},[96,18526,2170],{"class":106},[96,18528,18529],{"class":98,"line":1300},[96,18530,18531],{"class":165},"    \u002F\u002F析构函数\n",[96,18533,18534,18537],{"class":98,"line":1312},[96,18535,18536],{"class":1946},"    ~Person",[96,18538,1959],{"class":106},[96,18540,18541],{"class":98,"line":1595},[96,18542,2013],{"class":106},[96,18544,18545,18547,18549,18552,18554],{"class":98,"line":1600},[96,18546,9653],{"class":106},[96,18548,1151],{"class":102},[96,18550,18551],{"class":211}," \"Person的析构函数调用\"",[96,18553,1427],{"class":102},[96,18555,8824],{"class":106},[96,18557,18558],{"class":98,"line":1606},[96,18559,2170],{"class":106},[96,18561,18562],{"class":98,"line":1611},[96,18563,2383],{"emptyLinePlaceholder":23},[96,18565,18566],{"class":98,"line":1625},[96,18567,3978],{"class":106},[96,18569,18570],{"class":98,"line":1630},[96,18571,2383],{"emptyLinePlaceholder":23},[96,18573,18574,18576,18578],{"class":98,"line":1636},[96,18575,5348],{"class":102},[96,18577,5572],{"class":1946},[96,18579,1959],{"class":106},[96,18581,18582],{"class":98,"line":1657},[96,18583,1529],{"class":106},[96,18585,18586,18589],{"class":98,"line":1662},[96,18587,18588],{"class":106},"    Person p;",[96,18590,18591],{"class":165},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[96,18593,18594],{"class":98,"line":1676},[96,18595,1548],{"class":106},[96,18597,18598],{"class":98,"line":1681},[96,18599,2383],{"emptyLinePlaceholder":23},[96,18601,18602,18604,18606],{"class":98,"line":1710},[96,18603,110],{"class":102},[96,18605,1956],{"class":1946},[96,18607,10837],{"class":106},[96,18609,18610],{"class":98,"line":1715},[96,18611,13194],{"class":106},[96,18613,18614],{"class":98,"line":1732},[96,18615,18616],{"class":165},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[96,18618,18619],{"class":98,"line":1737},[96,18620,2383],{"emptyLinePlaceholder":23},[96,18622,18623,18625],{"class":98,"line":1742},[96,18624,18588],{"class":106},[96,18626,18627],{"class":165},"\u002F\u002F只有构造函数\n",[96,18629,18630],{"class":98,"line":1747},[96,18631,2383],{"emptyLinePlaceholder":23},[96,18633,18634,18636,18638,18640,18642],{"class":98,"line":1761},[96,18635,2286],{"class":1946},[96,18637,107],{"class":106},[96,18639,2291],{"class":211},[96,18641,5950],{"class":106},[96,18643,18644],{"class":165},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[96,18646,18647],{"class":98,"line":1766},[96,18648,2383],{"emptyLinePlaceholder":23},[96,18650,18651,18653,18655],{"class":98,"line":2560},[96,18652,4073],{"class":102},[96,18654,4076],{"class":155},[96,18656,1273],{"class":106},[96,18658,18659],{"class":98,"line":2574},[96,18660,1548],{"class":106},[14,18662,18663],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[67,18665,18667],{"id":18666},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[14,18669,18670],{},"两种分类方式：",[14,18672,18673],{},"​\t按参数分为： 有参构造和无参构造",[14,18675,18676],{},"​\t按类型分为： 普通构造和拷贝构造",[14,18678,18679],{},"三种调用方式：",[14,18681,18682],{},"​\t括号法",[14,18684,18685],{},"​\t显示法",[14,18687,18688],{},"​\t隐式转换法",[87,18690,18692],{"className":89,"code":18691,"language":91,"meta":18,"style":18},"#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",[93,18693,18694,18700,18710,18715,18720,18725,18730,18734,18742,18746,18750,18754,18760,18764,18777,18781,18793,18797,18806,18819,18823,18827,18833,18837,18850,18854,18859,18875,18879,18884,18893,18906,18910,18916,18920,18925,18933,18937,18942,18946,18954,18958,18963,18968,18973,18978,18983,18987,18992,18997,19002,19007,19011,19016,19021,19037,19049,19054,19058,19063,19068,19073,19077,19082,19096,19109,19113,19121,19125,19131,19137,19145],{"__ignoreMap":18},[96,18695,18696,18698],{"class":98,"line":99},[96,18697,1932],{"class":102},[96,18699,1935],{"class":211},[96,18701,18702,18704,18706,18708],{"class":98,"line":19},[96,18703,1940],{"class":102},[96,18705,1943],{"class":102},[96,18707,1947],{"class":1946},[96,18709,1273],{"class":106},[96,18711,18712],{"class":98,"line":1162},[96,18713,18714],{"class":165},"\u002F\u002F1.构造函数的分类及调用\n",[96,18716,18717],{"class":98,"line":1177},[96,18718,18719],{"class":165},"\u002F\u002F分类\n",[96,18721,18722],{"class":98,"line":1183},[96,18723,18724],{"class":165},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[96,18726,18727],{"class":98,"line":1197},[96,18728,18729],{"class":165},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[96,18731,18732],{"class":98,"line":1203},[96,18733,2383],{"emptyLinePlaceholder":23},[96,18735,18736,18738,18740],{"class":98,"line":1294},[96,18737,14678],{"class":102},[96,18739,15553],{"class":1946},[96,18741,2657],{"class":106},[96,18743,18744],{"class":98,"line":1300},[96,18745,1529],{"class":106},[96,18747,18748],{"class":98,"line":1312},[96,18749,14700],{"class":102},[96,18751,18752],{"class":98,"line":1595},[96,18753,18498],{"class":165},[96,18755,18756,18758],{"class":98,"line":1600},[96,18757,18503],{"class":1946},[96,18759,1959],{"class":106},[96,18761,18762],{"class":98,"line":1606},[96,18763,2013],{"class":106},[96,18765,18766,18768,18770,18773,18775],{"class":98,"line":1611},[96,18767,3434],{"class":106},[96,18769,1151],{"class":102},[96,18771,18772],{"class":211},"\"Person构造函数无参构造\"",[96,18774,1151],{"class":102},[96,18776,1174],{"class":106},[96,18778,18779],{"class":98,"line":1625},[96,18780,2170],{"class":106},[96,18782,18783,18785,18787,18789,18791],{"class":98,"line":1630},[96,18784,18503],{"class":1946},[96,18786,107],{"class":106},[96,18788,110],{"class":102},[96,18790,1381],{"class":5200},[96,18792,113],{"class":106},[96,18794,18795],{"class":98,"line":1636},[96,18796,2013],{"class":106},[96,18798,18799,18802,18804],{"class":98,"line":1657},[96,18800,18801],{"class":106},"        age",[96,18803,152],{"class":102},[96,18805,6181],{"class":106},[96,18807,18808,18810,18812,18815,18817],{"class":98,"line":1662},[96,18809,3434],{"class":106},[96,18811,1151],{"class":102},[96,18813,18814],{"class":211},"\"Person构造函数有参构造\"",[96,18816,1151],{"class":102},[96,18818,1174],{"class":106},[96,18820,18821],{"class":98,"line":1676},[96,18822,2170],{"class":106},[96,18824,18825],{"class":98,"line":1681},[96,18826,18531],{"class":165},[96,18828,18829,18831],{"class":98,"line":1710},[96,18830,18536],{"class":1946},[96,18832,1959],{"class":106},[96,18834,18835],{"class":98,"line":1715},[96,18836,2013],{"class":106},[96,18838,18839,18841,18843,18846,18848],{"class":98,"line":1732},[96,18840,3434],{"class":106},[96,18842,1151],{"class":102},[96,18844,18845],{"class":211},"\"Person析构函数被调用\"",[96,18847,1151],{"class":102},[96,18849,1174],{"class":106},[96,18851,18852],{"class":98,"line":1737},[96,18853,2170],{"class":106},[96,18855,18856],{"class":98,"line":1742},[96,18857,18858],{"class":165},"    \u002F\u002F拷贝构造函数\n",[96,18860,18861,18863,18865,18867,18869,18871,18873],{"class":98,"line":1747},[96,18862,18503],{"class":1946},[96,18864,107],{"class":106},[96,18866,6776],{"class":102},[96,18868,15553],{"class":1946},[96,18870,10568],{"class":102},[96,18872,14],{"class":5200},[96,18874,113],{"class":106},[96,18876,18877],{"class":98,"line":1761},[96,18878,2013],{"class":106},[96,18880,18881],{"class":98,"line":1766},[96,18882,18883],{"class":165},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[96,18885,18886,18888,18890],{"class":98,"line":2560},[96,18887,18801],{"class":106},[96,18889,152],{"class":102},[96,18891,18892],{"class":106},"p.age;\n",[96,18894,18895,18897,18899,18902,18904],{"class":98,"line":2574},[96,18896,3434],{"class":106},[96,18898,1151],{"class":102},[96,18900,18901],{"class":211},"\"Person拷贝构造函数被调用\"",[96,18903,1151],{"class":102},[96,18905,1174],{"class":106},[96,18907,18908],{"class":98,"line":2582},[96,18909,2170],{"class":106},[96,18911,18912,18914],{"class":98,"line":2587},[96,18913,1968],{"class":102},[96,18915,7781],{"class":106},[96,18917,18918],{"class":98,"line":2593},[96,18919,3978],{"class":106},[96,18921,18922],{"class":98,"line":2599},[96,18923,18924],{"class":165},"\u002F\u002F调用\n",[96,18926,18927,18929,18931],{"class":98,"line":2604},[96,18928,5348],{"class":102},[96,18930,5572],{"class":1946},[96,18932,1959],{"class":106},[96,18934,18935],{"class":98,"line":7932},[96,18936,1529],{"class":106},[96,18938,18939],{"class":98,"line":7956},[96,18940,18941],{"class":165},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[96,18943,18944],{"class":98,"line":7961},[96,18945,1548],{"class":106},[96,18947,18948,18950,18952],{"class":98,"line":7967},[96,18949,5348],{"class":102},[96,18951,5641],{"class":1946},[96,18953,1959],{"class":106},[96,18955,18956],{"class":98,"line":7994},[96,18957,1529],{"class":106},[96,18959,18960],{"class":98,"line":7999},[96,18961,18962],{"class":165},"    \u002F\u002F1.括号法\n",[96,18964,18965],{"class":98,"line":8005},[96,18966,18967],{"class":165},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[96,18969,18970],{"class":98,"line":8017},[96,18971,18972],{"class":165},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[96,18974,18975],{"class":98,"line":8029},[96,18976,18977],{"class":165},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[96,18979,18980],{"class":98,"line":8041},[96,18981,18982],{"class":165},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[96,18984,18985],{"class":98,"line":9700},[96,18986,2383],{"emptyLinePlaceholder":23},[96,18988,18989],{"class":98,"line":9725},[96,18990,18991],{"class":165},"    \u002F\u002F注意事项\n",[96,18993,18994],{"class":98,"line":9748},[96,18995,18996],{"class":165},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[96,18998,18999],{"class":98,"line":9772},[96,19000,19001],{"class":165},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[96,19003,19004],{"class":98,"line":9777},[96,19005,19006],{"class":165},"    \u002F\u002F Person p4();\n",[96,19008,19009],{"class":98,"line":9782},[96,19010,2383],{"emptyLinePlaceholder":23},[96,19012,19013],{"class":98,"line":9787},[96,19014,19015],{"class":165},"    \u002F\u002F2.显示法\n",[96,19017,19018],{"class":98,"line":9796},[96,19019,19020],{"class":106},"    Person p1;\n",[96,19022,19023,19026,19028,19031,19033,19035],{"class":98,"line":9801},[96,19024,19025],{"class":106},"    Person p2",[96,19027,152],{"class":102},[96,19029,19030],{"class":1946},"Person",[96,19032,107],{"class":106},[96,19034,553],{"class":155},[96,19036,2702],{"class":106},[96,19038,19039,19042,19044,19046],{"class":98,"line":9807},[96,19040,19041],{"class":106},"    Person p3",[96,19043,152],{"class":102},[96,19045,19030],{"class":1946},[96,19047,19048],{"class":106},"(p2);\n",[96,19050,19051],{"class":98,"line":9828},[96,19052,19053],{"class":165},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[96,19055,19056],{"class":98,"line":9834},[96,19057,2383],{"emptyLinePlaceholder":23},[96,19059,19060],{"class":98,"line":9848},[96,19061,19062],{"class":165},"    \u002F\u002F 注意事项2\n",[96,19064,19065],{"class":98,"line":9854},[96,19066,19067],{"class":165},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[96,19069,19070],{"class":98,"line":9881},[96,19071,19072],{"class":165},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[96,19074,19075],{"class":98,"line":9890},[96,19076,2383],{"emptyLinePlaceholder":23},[96,19078,19079],{"class":98,"line":9896},[96,19080,19081],{"class":165},"    \u002F\u002F3.隐士转换法\n",[96,19083,19084,19087,19089,19091,19093],{"class":98,"line":9904},[96,19085,19086],{"class":106},"    Person p4",[96,19088,152],{"class":102},[96,19090,553],{"class":155},[96,19092,162],{"class":106},[96,19094,19095],{"class":165},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[96,19097,19098,19101,19103,19106],{"class":98,"line":9909},[96,19099,19100],{"class":106},"    Person p5",[96,19102,152],{"class":102},[96,19104,19105],{"class":106},"p4;",[96,19107,19108],{"class":165}," \u002F\u002F 这里会调用拷贝构造函数\n",[96,19110,19111],{"class":98,"line":16588},[96,19112,1548],{"class":106},[96,19114,19115,19117,19119],{"class":98,"line":16594},[96,19116,110],{"class":102},[96,19118,1956],{"class":1946},[96,19120,1959],{"class":106},[96,19122,19123],{"class":98,"line":16617},[96,19124,1529],{"class":106},[96,19126,19127,19129],{"class":98,"line":16623},[96,19128,5617],{"class":1946},[96,19130,5620],{"class":106},[96,19132,19133,19135],{"class":98,"line":16646},[96,19134,5686],{"class":1946},[96,19136,5620],{"class":106},[96,19138,19139,19141,19143],{"class":98,"line":16660},[96,19140,4073],{"class":102},[96,19142,4076],{"class":155},[96,19144,1273],{"class":106},[96,19146,19147],{"class":98,"line":16680},[96,19148,1548],{"class":106},[14,19150,19151,19154],{},[256,19152,19153],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[67,19156,19158],{"id":19157},"_823拷贝构造函数","8.2.3拷贝构造函数",[14,19160,19161],{},"C++中拷贝构造函数调用时机通常有三种情况",[1114,19163,19164,19167,19170],{},[53,19165,19166],{},"使用一个已经创建完毕的对象来初始化一个新对象",[53,19168,19169],{},"值传递的方式给函数参数传值",[53,19171,19172],{},"以值方式返回局部对象",[87,19174,19176],{"className":89,"code":19175,"language":91,"meta":18,"style":18},"#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",[93,19177,19178,19184,19194,19198,19203,19207,19212,19217,19222,19228,19232,19236,19242,19246,19259,19263,19268,19280,19284,19292,19305,19309,19313,19329,19333,19342,19355,19359,19365,19369,19381,19385,19391,19395,19399,19407,19411,19424,19432,19450,19454,19459,19464,19479,19483,19496,19500,19508,19512,19516,19524,19528,19533,19542,19546,19550,19575,19585,19589,19597,19601,19612,19637,19641,19645,19649,19657,19661,19666,19671,19678,19683,19688,19693,19698,19702,19707,19711,19716,19720,19725,19730,19734,19738,19743,19748,19756],{"__ignoreMap":18},[96,19179,19180,19182],{"class":98,"line":99},[96,19181,1932],{"class":102},[96,19183,1935],{"class":211},[96,19185,19186,19188,19190,19192],{"class":98,"line":19},[96,19187,1940],{"class":102},[96,19189,1943],{"class":102},[96,19191,1947],{"class":1946},[96,19193,1273],{"class":106},[96,19195,19196],{"class":98,"line":1162},[96,19197,2383],{"emptyLinePlaceholder":23},[96,19199,19200],{"class":98,"line":1177},[96,19201,19202],{"class":165},"\u002F\u002F拷贝构造函数调用时机\n",[96,19204,19205],{"class":98,"line":1183},[96,19206,2383],{"emptyLinePlaceholder":23},[96,19208,19209],{"class":98,"line":1197},[96,19210,19211],{"class":165},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[96,19213,19214],{"class":98,"line":1203},[96,19215,19216],{"class":165},"\u002F\u002F2.值传递的方式给函数参数传值\n",[96,19218,19219],{"class":98,"line":1294},[96,19220,19221],{"class":165},"\u002F\u002F3.以值方式返回局部对象\n",[96,19223,19224,19226],{"class":98,"line":1300},[96,19225,14678],{"class":102},[96,19227,15155],{"class":1946},[96,19229,19230],{"class":98,"line":1312},[96,19231,1529],{"class":106},[96,19233,19234],{"class":98,"line":1595},[96,19235,14700],{"class":102},[96,19237,19238,19240],{"class":98,"line":1600},[96,19239,18503],{"class":1946},[96,19241,1959],{"class":106},[96,19243,19244],{"class":98,"line":1606},[96,19245,2013],{"class":106},[96,19247,19248,19250,19252,19255,19257],{"class":98,"line":1611},[96,19249,9653],{"class":106},[96,19251,1151],{"class":102},[96,19253,19254],{"class":211}," \"Person的默认构造函数调用\"",[96,19256,1427],{"class":102},[96,19258,8824],{"class":106},[96,19260,19261],{"class":98,"line":1625},[96,19262,2170],{"class":106},[96,19264,19265],{"class":98,"line":1630},[96,19266,19267],{"class":165},"    \u002F\u002F有参构造\n",[96,19269,19270,19272,19274,19276,19278],{"class":98,"line":1636},[96,19271,18503],{"class":1946},[96,19273,107],{"class":106},[96,19275,110],{"class":102},[96,19277,15673],{"class":5200},[96,19279,113],{"class":106},[96,19281,19282],{"class":98,"line":1657},[96,19283,2013],{"class":106},[96,19285,19286,19288,19290],{"class":98,"line":1662},[96,19287,15727],{"class":106},[96,19289,152],{"class":102},[96,19291,7781],{"class":106},[96,19293,19294,19296,19298,19301,19303],{"class":98,"line":1676},[96,19295,9653],{"class":106},[96,19297,1151],{"class":102},[96,19299,19300],{"class":211}," \"Person的有参构造函数调用\"",[96,19302,1427],{"class":102},[96,19304,8824],{"class":106},[96,19306,19307],{"class":98,"line":1681},[96,19308,2170],{"class":106},[96,19310,19311],{"class":98,"line":1710},[96,19312,18858],{"class":165},[96,19314,19315,19317,19319,19321,19323,19325,19327],{"class":98,"line":1715},[96,19316,18503],{"class":1946},[96,19318,107],{"class":106},[96,19320,6776],{"class":102},[96,19322,15553],{"class":1946},[96,19324,10568],{"class":102},[96,19326,14],{"class":5200},[96,19328,113],{"class":106},[96,19330,19331],{"class":98,"line":1732},[96,19332,2013],{"class":106},[96,19334,19335,19337,19339],{"class":98,"line":1737},[96,19336,15727],{"class":106},[96,19338,152],{"class":102},[96,19340,19341],{"class":106}," p.m_Age;\n",[96,19343,19344,19346,19348,19351,19353],{"class":98,"line":1742},[96,19345,9653],{"class":106},[96,19347,1151],{"class":102},[96,19349,19350],{"class":211}," \"Person的拷贝构造函数调用\"",[96,19352,1427],{"class":102},[96,19354,8824],{"class":106},[96,19356,19357],{"class":98,"line":1747},[96,19358,2170],{"class":106},[96,19360,19361,19363],{"class":98,"line":1761},[96,19362,18536],{"class":1946},[96,19364,1959],{"class":106},[96,19366,19367],{"class":98,"line":1766},[96,19368,2013],{"class":106},[96,19370,19371,19373,19375,19377,19379],{"class":98,"line":2560},[96,19372,9653],{"class":106},[96,19374,1151],{"class":102},[96,19376,18551],{"class":211},[96,19378,1427],{"class":102},[96,19380,8824],{"class":106},[96,19382,19383],{"class":98,"line":2574},[96,19384,2170],{"class":106},[96,19386,19387,19389],{"class":98,"line":2582},[96,19388,1968],{"class":102},[96,19390,15650],{"class":106},[96,19392,19393],{"class":98,"line":2587},[96,19394,3978],{"class":106},[96,19396,19397],{"class":98,"line":2593},[96,19398,19211],{"class":165},[96,19400,19401,19403,19405],{"class":98,"line":2599},[96,19402,5348],{"class":102},[96,19404,5572],{"class":1946},[96,19406,1959],{"class":106},[96,19408,19409],{"class":98,"line":2604},[96,19410,1529],{"class":106},[96,19412,19413,19416,19418,19420,19422],{"class":98,"line":7932},[96,19414,19415],{"class":106},"    Person ",[96,19417,7114],{"class":1946},[96,19419,107],{"class":106},[96,19421,807],{"class":155},[96,19423,2702],{"class":106},[96,19425,19426,19428,19430],{"class":98,"line":7956},[96,19427,19415],{"class":106},[96,19429,7017],{"class":1946},[96,19431,17499],{"class":106},[96,19433,19434,19436,19438,19441,19443,19446,19448],{"class":98,"line":7961},[96,19435,1534],{"class":106},[96,19437,1151],{"class":102},[96,19439,19440],{"class":211},"\"P2的年龄为：\"",[96,19442,1151],{"class":102},[96,19444,19445],{"class":106},"p2.m_Age",[96,19447,1151],{"class":102},[96,19449,1174],{"class":106},[96,19451,19452],{"class":98,"line":7967},[96,19453,1548],{"class":106},[96,19455,19456],{"class":98,"line":7994},[96,19457,19458],{"class":165},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[96,19460,19461],{"class":98,"line":7999},[96,19462,19463],{"class":165},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[96,19465,19466,19468,19471,19473,19475,19477],{"class":98,"line":8005},[96,19467,5348],{"class":102},[96,19469,19470],{"class":1946}," doWork",[96,19472,107],{"class":106},[96,19474,19030],{"class":1946},[96,19476,6809],{"class":5200},[96,19478,113],{"class":106},[96,19480,19481],{"class":98,"line":8017},[96,19482,1529],{"class":106},[96,19484,19485,19487,19489,19492,19494],{"class":98,"line":8029},[96,19486,6513],{"class":106},[96,19488,1151],{"class":102},[96,19490,19491],{"class":211}," \"doWork函数调用\"",[96,19493,1427],{"class":102},[96,19495,8824],{"class":106},[96,19497,19498],{"class":98,"line":8041},[96,19499,1548],{"class":106},[96,19501,19502,19504,19506],{"class":98,"line":9700},[96,19503,5348],{"class":102},[96,19505,5641],{"class":1946},[96,19507,1959],{"class":106},[96,19509,19510],{"class":98,"line":9725},[96,19511,1529],{"class":106},[96,19513,19514],{"class":98,"line":9748},[96,19515,15297],{"class":106},[96,19517,19518,19521],{"class":98,"line":9772},[96,19519,19520],{"class":1946},"    doWork",[96,19522,19523],{"class":106},"(p);\n",[96,19525,19526],{"class":98,"line":9777},[96,19527,1548],{"class":106},[96,19529,19530],{"class":98,"line":9782},[96,19531,19532],{"class":165},"\u002F\u002F 3.以值方式返回局部对象\n",[96,19534,19535,19537,19540],{"class":98,"line":9787},[96,19536,19030],{"class":1946},[96,19538,19539],{"class":1946}," doWork2",[96,19541,1959],{"class":106},[96,19543,19544],{"class":98,"line":9796},[96,19545,1529],{"class":106},[96,19547,19548],{"class":98,"line":9801},[96,19549,19020],{"class":106},[96,19551,19552,19554,19556,19558,19560,19562,19564,19566,19568,19570,19572],{"class":98,"line":9807},[96,19553,1534],{"class":106},[96,19555,1151],{"class":102},[96,19557,107],{"class":106},[96,19559,110],{"class":102},[96,19561,6502],{"class":102},[96,19563,536],{"class":106},[96,19565,460],{"class":102},[96,19567,7114],{"class":106},[96,19569,1151],{"class":102},[96,19571,1221],{"class":106},[96,19573,19574],{"class":165},"\u002F\u002F打印p1的地址\n",[96,19576,19577,19579,19582],{"class":98,"line":9828},[96,19578,4073],{"class":102},[96,19580,19581],{"class":106}," p1;",[96,19583,19584],{"class":165},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[96,19586,19587],{"class":98,"line":9834},[96,19588,1548],{"class":106},[96,19590,19591,19593,19595],{"class":98,"line":9848},[96,19592,5348],{"class":102},[96,19594,5713],{"class":1946},[96,19596,1959],{"class":106},[96,19598,19599],{"class":98,"line":9854},[96,19600,1529],{"class":106},[96,19602,19603,19606,19608,19610],{"class":98,"line":9881},[96,19604,19605],{"class":106},"    Person p ",[96,19607,152],{"class":102},[96,19609,19539],{"class":1946},[96,19611,5620],{"class":106},[96,19613,19614,19616,19618,19620,19622,19624,19626,19628,19630,19632,19634],{"class":98,"line":9890},[96,19615,1534],{"class":106},[96,19617,1151],{"class":102},[96,19619,107],{"class":106},[96,19621,110],{"class":102},[96,19623,6502],{"class":102},[96,19625,536],{"class":106},[96,19627,460],{"class":102},[96,19629,14],{"class":106},[96,19631,1151],{"class":102},[96,19633,1221],{"class":106},[96,19635,19636],{"class":165},"\u002F\u002F打印p的地址\n",[96,19638,19639],{"class":98,"line":9896},[96,19640,1548],{"class":106},[96,19642,19643],{"class":98,"line":9904},[96,19644,2383],{"emptyLinePlaceholder":23},[96,19646,19647],{"class":98,"line":9909},[96,19648,2383],{"emptyLinePlaceholder":23},[96,19650,19651,19653,19655],{"class":98,"line":16588},[96,19652,110],{"class":102},[96,19654,1956],{"class":1946},[96,19656,1959],{"class":106},[96,19658,19659],{"class":98,"line":16594},[96,19660,1529],{"class":106},[96,19662,19663],{"class":98,"line":16617},[96,19664,19665],{"class":165},"    \u002F\u002F test01();\n",[96,19667,19668],{"class":98,"line":16623},[96,19669,19670],{"class":165},"    \u002F\u002F test02();\n",[96,19672,19673,19676],{"class":98,"line":16646},[96,19674,19675],{"class":1946},"    test03",[96,19677,5620],{"class":106},[96,19679,19680],{"class":98,"line":16660},[96,19681,19682],{"class":165},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[96,19684,19685],{"class":98,"line":16680},[96,19686,19687],{"class":165},"\u002F\u002F 输出结果如下：\n",[96,19689,19690],{"class":98,"line":16686},[96,19691,19692],{"class":165},"\u002F\u002F Person的默认构造函数调用\n",[96,19694,19695],{"class":98,"line":16697},[96,19696,19697],{"class":165},"\u002F\u002F 0x7fffffffceec\n",[96,19699,19700],{"class":98,"line":16720},[96,19701,19697],{"class":165},[96,19703,19704],{"class":98,"line":16742},[96,19705,19706],{"class":165},"\u002F\u002F Person的析构函数调用\n",[96,19708,19709],{"class":98,"line":16747},[96,19710,2383],{"emptyLinePlaceholder":23},[96,19712,19713],{"class":98,"line":16753},[96,19714,19715],{"class":165},"\u002F\u002F 之前的输出结果如下：\n",[96,19717,19718],{"class":98,"line":16767},[96,19719,19692],{"class":165},[96,19721,19722],{"class":98,"line":16780},[96,19723,19724],{"class":165},"\u002F\u002F 地址\n",[96,19726,19727],{"class":98,"line":16785},[96,19728,19729],{"class":165},"\u002F\u002F Person的拷贝构造函数调用\n",[96,19731,19732],{"class":98,"line":16799},[96,19733,19706],{"class":165},[96,19735,19736],{"class":98,"line":16804},[96,19737,19724],{"class":165},[96,19739,19740],{"class":98,"line":16810},[96,19741,19742],{"class":165},"\u002F\u002F (这两次输出的地址也是不同的) \n",[96,19744,19745],{"class":98,"line":16815},[96,19746,19747],{"class":165},"\u002F\u002F Person的析构函数调用     \n",[96,19749,19750,19752,19754],{"class":98,"line":16829},[96,19751,4073],{"class":102},[96,19753,4076],{"class":155},[96,19755,1273],{"class":106},[96,19757,19758],{"class":98,"line":16834},[96,19759,1548],{"class":106},[14,19761,19762],{},"简化版理解",[87,19764,19766],{"className":89,"code":19765,"language":91,"meta":18,"style":18},"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",[93,19767,19768,19776,19780,19786,19799,19810,19814,19826,19839,19847,19851,19867,19880,19889,19893,19898,19904,19917,19921,19925,19932,19936,19940,19945,19953,19957,19973,19986,19999,20003,20008,20016,20020,20024,20029,20034,20050,20058,20065,20071,20075,20079,20084,20092,20096,20100,20123,20130,20134,20138,20146,20150,20160,20182,20186,20190,20194,20202,20206,20211,20216,20222,20226,20236,20240,20248],{"__ignoreMap":18},[96,19769,19770,19772,19774],{"class":98,"line":99},[96,19771,14678],{"class":102},[96,19773,15553],{"class":1946},[96,19775,15556],{"class":106},[96,19777,19778],{"class":98,"line":19},[96,19779,14700],{"class":102},[96,19781,19782,19784],{"class":98,"line":1162},[96,19783,18503],{"class":1946},[96,19785,10837],{"class":106},[96,19787,19788,19790,19792,19795,19797],{"class":98,"line":1177},[96,19789,9653],{"class":106},[96,19791,1151],{"class":102},[96,19793,19794],{"class":211}," \"无参构造函数!\"",[96,19796,1427],{"class":102},[96,19798,8824],{"class":106},[96,19800,19801,19804,19806,19808],{"class":98,"line":1183},[96,19802,19803],{"class":106},"        mAge ",[96,19805,152],{"class":102},[96,19807,4076],{"class":155},[96,19809,1273],{"class":106},[96,19811,19812],{"class":98,"line":1197},[96,19813,2170],{"class":106},[96,19815,19816,19818,19820,19822,19824],{"class":98,"line":1203},[96,19817,18503],{"class":1946},[96,19819,107],{"class":106},[96,19821,110],{"class":102},[96,19823,15673],{"class":5200},[96,19825,12426],{"class":106},[96,19827,19828,19830,19832,19835,19837],{"class":98,"line":1294},[96,19829,9653],{"class":106},[96,19831,1151],{"class":102},[96,19833,19834],{"class":211}," \"有参构造函数!\"",[96,19836,1427],{"class":102},[96,19838,8824],{"class":106},[96,19840,19841,19843,19845],{"class":98,"line":1300},[96,19842,19803],{"class":106},[96,19844,152],{"class":102},[96,19846,7781],{"class":106},[96,19848,19849],{"class":98,"line":1312},[96,19850,2170],{"class":106},[96,19852,19853,19855,19857,19859,19861,19863,19865],{"class":98,"line":1595},[96,19854,18503],{"class":1946},[96,19856,107],{"class":106},[96,19858,6776],{"class":102},[96,19860,15553],{"class":1946},[96,19862,460],{"class":102},[96,19864,6809],{"class":5200},[96,19866,12426],{"class":106},[96,19868,19869,19871,19873,19876,19878],{"class":98,"line":1600},[96,19870,9653],{"class":106},[96,19872,1151],{"class":102},[96,19874,19875],{"class":211}," \"拷贝构造函数!\"",[96,19877,1427],{"class":102},[96,19879,8824],{"class":106},[96,19881,19882,19884,19886],{"class":98,"line":1606},[96,19883,19803],{"class":106},[96,19885,152],{"class":102},[96,19887,19888],{"class":106}," p.mAge;\n",[96,19890,19891],{"class":98,"line":1611},[96,19892,2170],{"class":106},[96,19894,19895],{"class":98,"line":1625},[96,19896,19897],{"class":165},"    \u002F\u002F析构函数在释放内存之前调用\n",[96,19899,19900,19902],{"class":98,"line":1630},[96,19901,18536],{"class":1946},[96,19903,10837],{"class":106},[96,19905,19906,19908,19910,19913,19915],{"class":98,"line":1636},[96,19907,9653],{"class":106},[96,19909,1151],{"class":102},[96,19911,19912],{"class":211}," \"析构函数!\"",[96,19914,1427],{"class":102},[96,19916,8824],{"class":106},[96,19918,19919],{"class":98,"line":1657},[96,19920,2170],{"class":106},[96,19922,19923],{"class":98,"line":1662},[96,19924,14700],{"class":102},[96,19926,19927,19929],{"class":98,"line":1676},[96,19928,1968],{"class":102},[96,19930,19931],{"class":106}," mAge;\n",[96,19933,19934],{"class":98,"line":1681},[96,19935,3978],{"class":106},[96,19937,19938],{"class":98,"line":1710},[96,19939,2383],{"emptyLinePlaceholder":23},[96,19941,19942],{"class":98,"line":1715},[96,19943,19944],{"class":165},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[96,19946,19947,19949,19951],{"class":98,"line":1732},[96,19948,5348],{"class":102},[96,19950,5572],{"class":1946},[96,19952,10837],{"class":106},[96,19954,19955],{"class":98,"line":1737},[96,19956,2383],{"emptyLinePlaceholder":23},[96,19958,19959,19961,19964,19966,19968,19970],{"class":98,"line":1742},[96,19960,19415],{"class":106},[96,19962,19963],{"class":1946},"man",[96,19965,107],{"class":106},[96,19967,418],{"class":155},[96,19969,5950],{"class":106},[96,19971,19972],{"class":165}," \u002F\u002Fp对象已经创建完毕\n",[96,19974,19975,19977,19980,19983],{"class":98,"line":1747},[96,19976,19415],{"class":106},[96,19978,19979],{"class":1946},"newman",[96,19981,19982],{"class":106},"(man);",[96,19984,19985],{"class":165}," \u002F\u002F调用拷贝构造函数\n",[96,19987,19988,19991,19993,19996],{"class":98,"line":1761},[96,19989,19990],{"class":106},"    Person newman2 ",[96,19992,152],{"class":102},[96,19994,19995],{"class":106}," man;",[96,19997,19998],{"class":165}," \u002F\u002F拷贝构造\n",[96,20000,20001],{"class":98,"line":1766},[96,20002,2383],{"emptyLinePlaceholder":23},[96,20004,20005],{"class":98,"line":2560},[96,20006,20007],{"class":165},"    \u002F\u002FPerson newman3;\n",[96,20009,20010,20013],{"class":98,"line":2574},[96,20011,20012],{"class":165},"    \u002F\u002Fnewman3 = man;",[96,20014,20015],{"class":165}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[96,20017,20018],{"class":98,"line":2582},[96,20019,1548],{"class":106},[96,20021,20022],{"class":98,"line":2587},[96,20023,2383],{"emptyLinePlaceholder":23},[96,20025,20026],{"class":98,"line":2593},[96,20027,20028],{"class":165},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[96,20030,20031],{"class":98,"line":2599},[96,20032,20033],{"class":165},"\u002F\u002F相当于Person p1 = p;\n",[96,20035,20036,20038,20040,20042,20044,20047],{"class":98,"line":2604},[96,20037,5348],{"class":102},[96,20039,19470],{"class":1946},[96,20041,107],{"class":106},[96,20043,19030],{"class":1946},[96,20045,20046],{"class":5200}," p1",[96,20048,20049],{"class":106},") {}\n",[96,20051,20052,20054,20056],{"class":98,"line":7932},[96,20053,5348],{"class":102},[96,20055,5641],{"class":1946},[96,20057,10837],{"class":106},[96,20059,20060,20062],{"class":98,"line":7956},[96,20061,18588],{"class":106},[96,20063,20064],{"class":165}," \u002F\u002F无参构造函数\n",[96,20066,20067,20069],{"class":98,"line":7961},[96,20068,19520],{"class":1946},[96,20070,19523],{"class":106},[96,20072,20073],{"class":98,"line":7967},[96,20074,1548],{"class":106},[96,20076,20077],{"class":98,"line":7994},[96,20078,2383],{"emptyLinePlaceholder":23},[96,20080,20081],{"class":98,"line":7999},[96,20082,20083],{"class":165},"\u002F\u002F3. 以值方式返回局部对象\n",[96,20085,20086,20088,20090],{"class":98,"line":8005},[96,20087,19030],{"class":1946},[96,20089,19539],{"class":1946},[96,20091,1959],{"class":106},[96,20093,20094],{"class":98,"line":8017},[96,20095,1529],{"class":106},[96,20097,20098],{"class":98,"line":8029},[96,20099,19020],{"class":106},[96,20101,20102,20104,20106,20108,20110,20112,20114,20116,20119,20121],{"class":98,"line":8041},[96,20103,6513],{"class":106},[96,20105,1151],{"class":102},[96,20107,1641],{"class":106},[96,20109,110],{"class":102},[96,20111,6502],{"class":102},[96,20113,536],{"class":106},[96,20115,460],{"class":102},[96,20117,20118],{"class":106},"p1 ",[96,20120,1151],{"class":102},[96,20122,8824],{"class":106},[96,20124,20125,20127],{"class":98,"line":9700},[96,20126,4073],{"class":102},[96,20128,20129],{"class":106}," p1;\n",[96,20131,20132],{"class":98,"line":9725},[96,20133,1548],{"class":106},[96,20135,20136],{"class":98,"line":9748},[96,20137,2383],{"emptyLinePlaceholder":23},[96,20139,20140,20142,20144],{"class":98,"line":9772},[96,20141,5348],{"class":102},[96,20143,5713],{"class":1946},[96,20145,1959],{"class":106},[96,20147,20148],{"class":98,"line":9777},[96,20149,1529],{"class":106},[96,20151,20152,20154,20156,20158],{"class":98,"line":9782},[96,20153,19605],{"class":106},[96,20155,152],{"class":102},[96,20157,19539],{"class":1946},[96,20159,5620],{"class":106},[96,20161,20162,20164,20166,20168,20170,20172,20174,20176,20178,20180],{"class":98,"line":9787},[96,20163,6513],{"class":106},[96,20165,1151],{"class":102},[96,20167,1641],{"class":106},[96,20169,110],{"class":102},[96,20171,6502],{"class":102},[96,20173,536],{"class":106},[96,20175,460],{"class":102},[96,20177,11432],{"class":106},[96,20179,1151],{"class":102},[96,20181,8824],{"class":106},[96,20183,20184],{"class":98,"line":9796},[96,20185,1548],{"class":106},[96,20187,20188],{"class":98,"line":9801},[96,20189,2383],{"emptyLinePlaceholder":23},[96,20191,20192],{"class":98,"line":9807},[96,20193,2383],{"emptyLinePlaceholder":23},[96,20195,20196,20198,20200],{"class":98,"line":9828},[96,20197,110],{"class":102},[96,20199,1956],{"class":1946},[96,20201,10837],{"class":106},[96,20203,20204],{"class":98,"line":9834},[96,20205,2383],{"emptyLinePlaceholder":23},[96,20207,20208],{"class":98,"line":9848},[96,20209,20210],{"class":165},"    \u002F\u002Ftest01();\n",[96,20212,20213],{"class":98,"line":9854},[96,20214,20215],{"class":165},"    \u002F\u002Ftest02();\n",[96,20217,20218,20220],{"class":98,"line":9881},[96,20219,19675],{"class":1946},[96,20221,5620],{"class":106},[96,20223,20224],{"class":98,"line":9890},[96,20225,2383],{"emptyLinePlaceholder":23},[96,20227,20228,20230,20232,20234],{"class":98,"line":9896},[96,20229,2286],{"class":1946},[96,20231,107],{"class":106},[96,20233,2291],{"class":211},[96,20235,2702],{"class":106},[96,20237,20238],{"class":98,"line":9904},[96,20239,2383],{"emptyLinePlaceholder":23},[96,20241,20242,20244,20246],{"class":98,"line":9909},[96,20243,4073],{"class":102},[96,20245,4076],{"class":155},[96,20247,1273],{"class":106},[96,20249,20250],{"class":98,"line":16588},[96,20251,1548],{"class":106},[67,20253,20255],{"id":20254},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[14,20257,20258],{},"默认情况下，c++编译器至少给一个类添加3个函数",[14,20260,20261],{},"1．默认构造函数(无参，函数体为空)",[14,20263,20264],{},"2．默认析构函数(无参，函数体为空)",[14,20266,20267],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[14,20269,20270],{},"构造函数调用规则如下：",[1114,20272,20273,20276],{},[53,20274,20275],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[53,20277,20278],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[87,20280,20282],{"className":89,"code":20281,"language":91,"meta":18,"style":18},"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",[93,20283,20284,20292,20296,20301,20307,20319,20323,20328,20340,20349,20361,20365,20369,20385,20394,20406,20410,20414,20420,20432,20436,20440,20446,20450,20454,20462,20466,20478,20483,20491,20495,20513,20517,20521,20529,20533,20538,20546,20561,20574,20578,20583,20590,20606,20619,20623,20627,20635,20639,20645,20649,20659,20663,20671],{"__ignoreMap":18},[96,20285,20286,20288,20290],{"class":98,"line":99},[96,20287,14678],{"class":102},[96,20289,15553],{"class":1946},[96,20291,15556],{"class":106},[96,20293,20294],{"class":98,"line":19},[96,20295,14700],{"class":102},[96,20297,20298],{"class":98,"line":1162},[96,20299,20300],{"class":165},"    \u002F\u002F无参（默认）构造函数\n",[96,20302,20303,20305],{"class":98,"line":1177},[96,20304,18503],{"class":1946},[96,20306,10837],{"class":106},[96,20308,20309,20311,20313,20315,20317],{"class":98,"line":1183},[96,20310,9653],{"class":106},[96,20312,1151],{"class":102},[96,20314,19794],{"class":211},[96,20316,1427],{"class":102},[96,20318,8824],{"class":106},[96,20320,20321],{"class":98,"line":1197},[96,20322,2170],{"class":106},[96,20324,20325],{"class":98,"line":1203},[96,20326,20327],{"class":165},"    \u002F\u002F有参构造函数\n",[96,20329,20330,20332,20334,20336,20338],{"class":98,"line":1294},[96,20331,18503],{"class":1946},[96,20333,107],{"class":106},[96,20335,110],{"class":102},[96,20337,1381],{"class":5200},[96,20339,12426],{"class":106},[96,20341,20342,20345,20347],{"class":98,"line":1300},[96,20343,20344],{"class":106},"        age ",[96,20346,152],{"class":102},[96,20348,1415],{"class":106},[96,20350,20351,20353,20355,20357,20359],{"class":98,"line":1312},[96,20352,9653],{"class":106},[96,20354,1151],{"class":102},[96,20356,19834],{"class":211},[96,20358,1427],{"class":102},[96,20360,8824],{"class":106},[96,20362,20363],{"class":98,"line":1595},[96,20364,2170],{"class":106},[96,20366,20367],{"class":98,"line":1600},[96,20368,18858],{"class":165},[96,20370,20371,20373,20375,20377,20379,20381,20383],{"class":98,"line":1606},[96,20372,18503],{"class":1946},[96,20374,107],{"class":106},[96,20376,6776],{"class":102},[96,20378,15553],{"class":1946},[96,20380,460],{"class":102},[96,20382,6809],{"class":5200},[96,20384,12426],{"class":106},[96,20386,20387,20389,20391],{"class":98,"line":1611},[96,20388,20344],{"class":106},[96,20390,152],{"class":102},[96,20392,20393],{"class":106}," p.age;\n",[96,20395,20396,20398,20400,20402,20404],{"class":98,"line":1625},[96,20397,9653],{"class":106},[96,20399,1151],{"class":102},[96,20401,19875],{"class":211},[96,20403,1427],{"class":102},[96,20405,8824],{"class":106},[96,20407,20408],{"class":98,"line":1630},[96,20409,2170],{"class":106},[96,20411,20412],{"class":98,"line":1636},[96,20413,18531],{"class":165},[96,20415,20416,20418],{"class":98,"line":1657},[96,20417,18536],{"class":1946},[96,20419,10837],{"class":106},[96,20421,20422,20424,20426,20428,20430],{"class":98,"line":1662},[96,20423,9653],{"class":106},[96,20425,1151],{"class":102},[96,20427,19912],{"class":211},[96,20429,1427],{"class":102},[96,20431,8824],{"class":106},[96,20433,20434],{"class":98,"line":1676},[96,20435,2170],{"class":106},[96,20437,20438],{"class":98,"line":1681},[96,20439,14700],{"class":102},[96,20441,20442,20444],{"class":98,"line":1710},[96,20443,1968],{"class":102},[96,20445,7781],{"class":106},[96,20447,20448],{"class":98,"line":1715},[96,20449,3978],{"class":106},[96,20451,20452],{"class":98,"line":1732},[96,20453,2383],{"emptyLinePlaceholder":23},[96,20455,20456,20458,20460],{"class":98,"line":1737},[96,20457,5348],{"class":102},[96,20459,5572],{"class":1946},[96,20461,1959],{"class":106},[96,20463,20464],{"class":98,"line":1742},[96,20465,1529],{"class":106},[96,20467,20468,20470,20472,20474,20476],{"class":98,"line":1747},[96,20469,19415],{"class":106},[96,20471,7114],{"class":1946},[96,20473,107],{"class":106},[96,20475,757],{"class":155},[96,20477,2702],{"class":106},[96,20479,20480],{"class":98,"line":1761},[96,20481,20482],{"class":165},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[96,20484,20485,20487,20489],{"class":98,"line":1766},[96,20486,19415],{"class":106},[96,20488,7017],{"class":1946},[96,20490,17499],{"class":106},[96,20492,20493],{"class":98,"line":2560},[96,20494,2383],{"emptyLinePlaceholder":23},[96,20496,20497,20499,20501,20504,20506,20509,20511],{"class":98,"line":2574},[96,20498,6513],{"class":106},[96,20500,1151],{"class":102},[96,20502,20503],{"class":211}," \"p2的年龄为： \"",[96,20505,1427],{"class":102},[96,20507,20508],{"class":106}," p2.age ",[96,20510,1151],{"class":102},[96,20512,8824],{"class":106},[96,20514,20515],{"class":98,"line":2582},[96,20516,1548],{"class":106},[96,20518,20519],{"class":98,"line":2587},[96,20520,2383],{"emptyLinePlaceholder":23},[96,20522,20523,20525,20527],{"class":98,"line":2593},[96,20524,5348],{"class":102},[96,20526,5641],{"class":1946},[96,20528,1959],{"class":106},[96,20530,20531],{"class":98,"line":2599},[96,20532,1529],{"class":106},[96,20534,20535],{"class":98,"line":2604},[96,20536,20537],{"class":165},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[96,20539,20540,20543],{"class":98,"line":7932},[96,20541,20542],{"class":106},"    Person p1;",[96,20544,20545],{"class":165}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[96,20547,20548,20550,20552,20554,20556,20558],{"class":98,"line":7956},[96,20549,19415],{"class":106},[96,20551,7017],{"class":1946},[96,20553,107],{"class":106},[96,20555,553],{"class":155},[96,20557,5950],{"class":106},[96,20559,20560],{"class":165}," \u002F\u002F用户提供的有参\n",[96,20562,20563,20565,20568,20571],{"class":98,"line":7961},[96,20564,19415],{"class":106},[96,20566,20567],{"class":1946},"p3",[96,20569,20570],{"class":106},"(p2);",[96,20572,20573],{"class":165}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[96,20575,20576],{"class":98,"line":7967},[96,20577,2383],{"emptyLinePlaceholder":23},[96,20579,20580],{"class":98,"line":7994},[96,20581,20582],{"class":165},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[96,20584,20585,20588],{"class":98,"line":7999},[96,20586,20587],{"class":106},"    Person p4;",[96,20589,20545],{"class":165},[96,20591,20592,20594,20597,20599,20601,20603],{"class":98,"line":8005},[96,20593,19415],{"class":106},[96,20595,20596],{"class":1946},"p5",[96,20598,107],{"class":106},[96,20600,553],{"class":155},[96,20602,5950],{"class":106},[96,20604,20605],{"class":165}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[96,20607,20608,20610,20613,20616],{"class":98,"line":8017},[96,20609,19415],{"class":106},[96,20611,20612],{"class":1946},"p6",[96,20614,20615],{"class":106},"(p5);",[96,20617,20618],{"class":165}," \u002F\u002F用户自己提供拷贝构造\n",[96,20620,20621],{"class":98,"line":8029},[96,20622,1548],{"class":106},[96,20624,20625],{"class":98,"line":8041},[96,20626,2383],{"emptyLinePlaceholder":23},[96,20628,20629,20631,20633],{"class":98,"line":9700},[96,20630,110],{"class":102},[96,20632,1956],{"class":1946},[96,20634,10837],{"class":106},[96,20636,20637],{"class":98,"line":9725},[96,20638,2383],{"emptyLinePlaceholder":23},[96,20640,20641,20643],{"class":98,"line":9748},[96,20642,5617],{"class":1946},[96,20644,5620],{"class":106},[96,20646,20647],{"class":98,"line":9772},[96,20648,2383],{"emptyLinePlaceholder":23},[96,20650,20651,20653,20655,20657],{"class":98,"line":9777},[96,20652,2286],{"class":1946},[96,20654,107],{"class":106},[96,20656,2291],{"class":211},[96,20658,2702],{"class":106},[96,20660,20661],{"class":98,"line":9782},[96,20662,2383],{"emptyLinePlaceholder":23},[96,20664,20665,20667,20669],{"class":98,"line":9787},[96,20666,4073],{"class":102},[96,20668,4076],{"class":155},[96,20670,1273],{"class":106},[96,20672,20673],{"class":98,"line":9796},[96,20674,1548],{"class":106},[67,20676,20678],{"id":20677},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[14,20680,20681],{},"浅拷贝：简单的赋值拷贝操作",[14,20683,20684],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[87,20686,20688],{"className":89,"code":20687,"language":91,"meta":18,"style":18},"#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",[93,20689,20690,20696,20706,20712,20716,20720,20725,20731,20735,20748,20752,20756,20763,20767,20777,20792,20805,20809,20814,20819,20835,20839,20852,20857,20862,20867,20876,20881,20896,20900,20904,20908,20914,20918,20923,20938,20942,20953,20967,20971,20980,20984,20990,21002,21006,21014,21018,21035,21066,21074,21102,21106,21110,21118,21122,21128],{"__ignoreMap":18},[96,20691,20692,20694],{"class":98,"line":99},[96,20693,1932],{"class":102},[96,20695,1935],{"class":211},[96,20697,20698,20700,20702,20704],{"class":98,"line":19},[96,20699,1940],{"class":102},[96,20701,1943],{"class":102},[96,20703,1947],{"class":1946},[96,20705,1273],{"class":106},[96,20707,20708,20710],{"class":98,"line":1162},[96,20709,14678],{"class":102},[96,20711,15155],{"class":1946},[96,20713,20714],{"class":98,"line":1177},[96,20715,1529],{"class":106},[96,20717,20718],{"class":98,"line":1183},[96,20719,14700],{"class":102},[96,20721,20722],{"class":98,"line":1197},[96,20723,20724],{"class":165},"    \u002F\u002F默认构造函数\n",[96,20726,20727,20729],{"class":98,"line":1203},[96,20728,18503],{"class":1946},[96,20730,1959],{"class":106},[96,20732,20733],{"class":98,"line":1294},[96,20734,2013],{"class":106},[96,20736,20737,20739,20741,20744,20746],{"class":98,"line":1300},[96,20738,3434],{"class":106},[96,20740,1151],{"class":102},[96,20742,20743],{"class":211},"\"默认构造函数\"",[96,20745,1151],{"class":102},[96,20747,1174],{"class":106},[96,20749,20750],{"class":98,"line":1312},[96,20751,2170],{"class":106},[96,20753,20754],{"class":98,"line":1595},[96,20755,20327],{"class":165},[96,20757,20758,20760],{"class":98,"line":1600},[96,20759,18536],{"class":1946},[96,20761,20762],{"class":106},"(int age,int height)\n",[96,20764,20765],{"class":98,"line":1606},[96,20766,2013],{"class":106},[96,20768,20769,20772,20774],{"class":98,"line":1611},[96,20770,20771],{"class":106},"        m_Age",[96,20773,152],{"class":102},[96,20775,20776],{"class":106},"age;\n",[96,20778,20779,20782,20784,20786,20789],{"class":98,"line":1625},[96,20780,20781],{"class":106},"        m_Height",[96,20783,11701],{"class":102},[96,20785,2365],{"class":102},[96,20787,20788],{"class":106},"(height);",[96,20790,20791],{"class":165},"\u002F\u002F放到堆区\n",[96,20793,20794,20796,20798,20801,20803],{"class":98,"line":1630},[96,20795,3434],{"class":106},[96,20797,1151],{"class":102},[96,20799,20800],{"class":211},"\"有参构造函数\"",[96,20802,1151],{"class":102},[96,20804,1174],{"class":106},[96,20806,20807],{"class":98,"line":1636},[96,20808,2170],{"class":106},[96,20810,20811],{"class":98,"line":1657},[96,20812,20813],{"class":165},"    \u002F\u002F深拷贝解决上述问题\n",[96,20815,20816],{"class":98,"line":1662},[96,20817,20818],{"class":165},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[96,20820,20821,20823,20825,20827,20829,20831,20833],{"class":98,"line":1676},[96,20822,18503],{"class":1946},[96,20824,107],{"class":106},[96,20826,6776],{"class":102},[96,20828,15553],{"class":1946},[96,20830,10568],{"class":102},[96,20832,14],{"class":5200},[96,20834,113],{"class":106},[96,20836,20837],{"class":98,"line":1681},[96,20838,2013],{"class":106},[96,20840,20841,20843,20845,20848,20850],{"class":98,"line":1710},[96,20842,3434],{"class":106},[96,20844,1151],{"class":102},[96,20846,20847],{"class":211},"\"拷贝构造函数\"",[96,20849,1151],{"class":102},[96,20851,1174],{"class":106},[96,20853,20854],{"class":98,"line":1715},[96,20855,20856],{"class":165},"        \u002F\u002F编译器默认的写如下注释部分\n",[96,20858,20859],{"class":98,"line":1732},[96,20860,20861],{"class":165},"        \u002F\u002Fm_Age=p.m_Age;\n",[96,20863,20864],{"class":98,"line":1737},[96,20865,20866],{"class":165},"        \u002F\u002Fm_Height=p.m_Height;\n",[96,20868,20869,20871,20873],{"class":98,"line":1742},[96,20870,20771],{"class":106},[96,20872,152],{"class":102},[96,20874,20875],{"class":106},"p.m_Age;\n",[96,20877,20878],{"class":98,"line":1747},[96,20879,20880],{"class":165},"        \u002F\u002F深拷贝操作\n",[96,20882,20883,20885,20887,20889,20891,20893],{"class":98,"line":1761},[96,20884,20781],{"class":106},[96,20886,11701],{"class":102},[96,20888,2365],{"class":102},[96,20890,107],{"class":106},[96,20892,562],{"class":102},[96,20894,20895],{"class":106},"p.m_Height);\n",[96,20897,20898],{"class":98,"line":1766},[96,20899,2170],{"class":106},[96,20901,20902],{"class":98,"line":2560},[96,20903,2383],{"emptyLinePlaceholder":23},[96,20905,20906],{"class":98,"line":2574},[96,20907,18531],{"class":165},[96,20909,20910,20912],{"class":98,"line":2582},[96,20911,18536],{"class":1946},[96,20913,1959],{"class":106},[96,20915,20916],{"class":98,"line":2587},[96,20917,2013],{"class":106},[96,20919,20920],{"class":98,"line":2593},[96,20921,20922],{"class":165},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[96,20924,20925,20927,20930,20933,20936],{"class":98,"line":2599},[96,20926,2480],{"class":102},[96,20928,20929],{"class":106},"(m_Height ",[96,20931,20932],{"class":102},"!=",[96,20934,20935],{"class":155}," NULL",[96,20937,113],{"class":106},[96,20939,20940],{"class":98,"line":2604},[96,20941,2493],{"class":106},[96,20943,20944,20947,20950],{"class":98,"line":7932},[96,20945,20946],{"class":102},"            delete",[96,20948,20949],{"class":106}," m_Height;",[96,20951,20952],{"class":165}," \u002F\u002F释放堆区内存\n",[96,20954,20955,20958,20960,20962,20964],{"class":98,"line":7956},[96,20956,20957],{"class":106},"            m_Height",[96,20959,152],{"class":102},[96,20961,2375],{"class":155},[96,20963,162],{"class":106},[96,20965,20966],{"class":165}," \u002F\u002F防止野指针\n",[96,20968,20969],{"class":98,"line":7961},[96,20970,2512],{"class":106},[96,20972,20973,20975,20977],{"class":98,"line":7967},[96,20974,3434],{"class":106},[96,20976,1151],{"class":102},[96,20978,20979],{"class":211},"\"Person的析构函数调用\"\n",[96,20981,20982],{"class":98,"line":7994},[96,20983,2170],{"class":106},[96,20985,20986,20988],{"class":98,"line":7999},[96,20987,1968],{"class":102},[96,20989,15650],{"class":106},[96,20991,20992,20994,20996,20999],{"class":98,"line":8005},[96,20993,1968],{"class":102},[96,20995,6502],{"class":102},[96,20997,20998],{"class":106},"m_Height;",[96,21000,21001],{"class":165}," \u002F\u002F定义一个指针，指向身高\n",[96,21003,21004],{"class":98,"line":8017},[96,21005,3978],{"class":106},[96,21007,21008,21010,21012],{"class":98,"line":8029},[96,21009,5348],{"class":102},[96,21011,5572],{"class":1946},[96,21013,1959],{"class":106},[96,21015,21016],{"class":98,"line":8041},[96,21017,1529],{"class":106},[96,21019,21020,21022,21024,21026,21028,21030,21033],{"class":98,"line":9700},[96,21021,19415],{"class":106},[96,21023,7114],{"class":1946},[96,21025,107],{"class":106},[96,21027,757],{"class":155},[96,21029,485],{"class":106},[96,21031,21032],{"class":155},"160",[96,21034,2702],{"class":106},[96,21036,21037,21039,21041,21044,21046,21049,21051,21054,21056,21059,21061,21063],{"class":98,"line":9725},[96,21038,1534],{"class":106},[96,21040,1151],{"class":102},[96,21042,21043],{"class":211},"\"p1的年龄为:\"",[96,21045,1151],{"class":102},[96,21047,21048],{"class":106},"p1.m_Age",[96,21050,1151],{"class":102},[96,21052,21053],{"class":211},"\"身高为：\"",[96,21055,6403],{"class":102},[96,21057,21058],{"class":106},"p1.m_Height",[96,21060,1151],{"class":102},[96,21062,1221],{"class":106},[96,21064,21065],{"class":165},"  \u002F\u002F18\n",[96,21067,21068,21070,21072],{"class":98,"line":9748},[96,21069,19415],{"class":106},[96,21071,7017],{"class":1946},[96,21073,17499],{"class":106},[96,21075,21076,21078,21080,21083,21085,21087,21089,21091,21093,21096,21098,21100],{"class":98,"line":9772},[96,21077,1534],{"class":106},[96,21079,1151],{"class":102},[96,21081,21082],{"class":211},"\"p2的年龄为：\"",[96,21084,1151],{"class":102},[96,21086,19445],{"class":106},[96,21088,1151],{"class":102},[96,21090,21053],{"class":211},[96,21092,6403],{"class":102},[96,21094,21095],{"class":106},"p2.m_Height",[96,21097,1151],{"class":102},[96,21099,1221],{"class":106},[96,21101,21065],{"class":165},[96,21103,21104],{"class":98,"line":9777},[96,21105,13194],{"class":106},[96,21107,21108],{"class":98,"line":9782},[96,21109,1548],{"class":106},[96,21111,21112,21114,21116],{"class":98,"line":9787},[96,21113,110],{"class":102},[96,21115,1956],{"class":1946},[96,21117,1959],{"class":106},[96,21119,21120],{"class":98,"line":9796},[96,21121,1529],{"class":106},[96,21123,21124,21126],{"class":98,"line":9801},[96,21125,5617],{"class":1946},[96,21127,5620],{"class":106},[96,21129,21130],{"class":98,"line":9807},[96,21131,1548],{"class":106},[14,21133,21134],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[14,21136,21137],{},"浅拷贝带来的问题是堆区的内存重复释放",[14,21139,21140],{},[1445,21141],{"alt":18,"src":21142},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[14,21144,21145],{},"浅拷贝问题要使用深拷贝来解决",[14,21147,21148],{},[1445,21149],{"alt":18,"src":21150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[14,21152,21153],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[67,21155,21157],{"id":21156},"_826初始化列表","8.2.6初始化列表",[14,21159,21160],{},"作用：初始化属性",[14,21162,5165],{},[87,21164,21167],{"className":21165,"code":21166,"language":5171},[5169],"构造函数():属性1(值1),属性2(值2).....{}\n",[93,21168,21166],{"__ignoreMap":18},[14,21170,21171],{},"例子",[87,21173,21175],{"className":89,"code":21174,"language":91,"meta":18,"style":18},"#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",[93,21176,21177,21183,21193,21199,21203,21208,21212,21217,21222,21227,21232,21237,21242,21246,21251,21256,21299,21308,21326,21344,21362,21366,21370,21377,21384,21391,21395,21399,21407,21411,21415,21435,21444,21448,21452,21462,21466,21474],{"__ignoreMap":18},[96,21178,21179,21181],{"class":98,"line":99},[96,21180,1932],{"class":102},[96,21182,1935],{"class":211},[96,21184,21185,21187,21189,21191],{"class":98,"line":19},[96,21186,1940],{"class":102},[96,21188,1943],{"class":102},[96,21190,1947],{"class":1946},[96,21192,1273],{"class":106},[96,21194,21195,21197],{"class":98,"line":1162},[96,21196,14678],{"class":102},[96,21198,15155],{"class":1946},[96,21200,21201],{"class":98,"line":1177},[96,21202,1529],{"class":106},[96,21204,21205],{"class":98,"line":1183},[96,21206,21207],{"class":102},"    public:\n",[96,21209,21210],{"class":98,"line":1197},[96,21211,2383],{"emptyLinePlaceholder":23},[96,21213,21214],{"class":98,"line":1203},[96,21215,21216],{"class":165},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[96,21218,21219],{"class":98,"line":1294},[96,21220,21221],{"class":165},"    \u002F\u002FPerson(int a, int b, int c) {\n",[96,21223,21224],{"class":98,"line":1300},[96,21225,21226],{"class":165},"    \u002F\u002F  m_A = a;\n",[96,21228,21229],{"class":98,"line":1312},[96,21230,21231],{"class":165},"    \u002F\u002F  m_B = b;\n",[96,21233,21234],{"class":98,"line":1595},[96,21235,21236],{"class":165},"    \u002F\u002F  m_C = c;\n",[96,21238,21239],{"class":98,"line":1600},[96,21240,21241],{"class":165},"    \u002F\u002F}\n",[96,21243,21244],{"class":98,"line":1606},[96,21245,2383],{"emptyLinePlaceholder":23},[96,21247,21248],{"class":98,"line":1611},[96,21249,21250],{"class":165},"    \u002F\u002F初始化列表方式初始化\n",[96,21252,21253],{"class":98,"line":1625},[96,21254,21255],{"class":165},"    \u002F\u002F使用有参构造函数\n",[96,21257,21258,21260,21262,21264,21266,21268,21270,21272,21274,21276,21278,21281,21284,21287,21290,21293,21296],{"class":98,"line":1630},[96,21259,18503],{"class":1946},[96,21261,107],{"class":106},[96,21263,110],{"class":102},[96,21265,1381],{"class":5200},[96,21267,12419],{"class":106},[96,21269,110],{"class":102},[96,21271,2816],{"class":5200},[96,21273,12419],{"class":106},[96,21275,110],{"class":102},[96,21277,2832],{"class":5200},[96,21279,21280],{"class":106},") :",[96,21282,21283],{"class":1946},"m_A",[96,21285,21286],{"class":106},"(a), ",[96,21288,21289],{"class":1946},"m_B",[96,21291,21292],{"class":106},"(b), ",[96,21294,21295],{"class":1946},"m_C",[96,21297,21298],{"class":106},"(c) {}\n",[96,21300,21301,21303,21306],{"class":98,"line":1636},[96,21302,14893],{"class":102},[96,21304,21305],{"class":1946}," PrintPerson",[96,21307,10837],{"class":106},[96,21309,21310,21312,21314,21317,21319,21322,21324],{"class":98,"line":1657},[96,21311,9653],{"class":106},[96,21313,1151],{"class":102},[96,21315,21316],{"class":211}," \"mA:\"",[96,21318,1427],{"class":102},[96,21320,21321],{"class":106}," m_A ",[96,21323,1151],{"class":102},[96,21325,8824],{"class":106},[96,21327,21328,21330,21332,21335,21337,21340,21342],{"class":98,"line":1662},[96,21329,9653],{"class":106},[96,21331,1151],{"class":102},[96,21333,21334],{"class":211}," \"mB:\"",[96,21336,1427],{"class":102},[96,21338,21339],{"class":106}," m_B ",[96,21341,1151],{"class":102},[96,21343,8824],{"class":106},[96,21345,21346,21348,21350,21353,21355,21358,21360],{"class":98,"line":1676},[96,21347,9653],{"class":106},[96,21349,1151],{"class":102},[96,21351,21352],{"class":211}," \"mC:\"",[96,21354,1427],{"class":102},[96,21356,21357],{"class":106}," m_C ",[96,21359,1151],{"class":102},[96,21361,8824],{"class":106},[96,21363,21364],{"class":98,"line":1681},[96,21365,2170],{"class":106},[96,21367,21368],{"class":98,"line":1710},[96,21369,15206],{"class":102},[96,21371,21372,21374],{"class":98,"line":1715},[96,21373,1968],{"class":102},[96,21375,21376],{"class":106}," m_A;\n",[96,21378,21379,21381],{"class":98,"line":1732},[96,21380,1968],{"class":102},[96,21382,21383],{"class":106}," m_B;\n",[96,21385,21386,21388],{"class":98,"line":1737},[96,21387,1968],{"class":102},[96,21389,21390],{"class":106}," m_C;\n",[96,21392,21393],{"class":98,"line":1742},[96,21394,3978],{"class":106},[96,21396,21397],{"class":98,"line":1747},[96,21398,2383],{"emptyLinePlaceholder":23},[96,21400,21401,21403,21405],{"class":98,"line":1761},[96,21402,110],{"class":102},[96,21404,1956],{"class":1946},[96,21406,5962],{"class":106},[96,21408,21409],{"class":98,"line":1766},[96,21410,1529],{"class":106},[96,21412,21413],{"class":98,"line":2560},[96,21414,2383],{"emptyLinePlaceholder":23},[96,21416,21417,21419,21421,21423,21425,21427,21429,21431,21433],{"class":98,"line":2574},[96,21418,19415],{"class":106},[96,21420,14],{"class":1946},[96,21422,107],{"class":106},[96,21424,324],{"class":155},[96,21426,12419],{"class":106},[96,21428,184],{"class":155},[96,21430,12419],{"class":106},[96,21432,178],{"class":155},[96,21434,2702],{"class":106},[96,21436,21437,21439,21442],{"class":98,"line":2582},[96,21438,15850],{"class":106},[96,21440,21441],{"class":1946},"PrintPerson",[96,21443,5620],{"class":106},[96,21445,21446],{"class":98,"line":2587},[96,21447,2383],{"emptyLinePlaceholder":23},[96,21449,21450],{"class":98,"line":2593},[96,21451,2383],{"emptyLinePlaceholder":23},[96,21453,21454,21456,21458,21460],{"class":98,"line":2599},[96,21455,2286],{"class":1946},[96,21457,107],{"class":106},[96,21459,2291],{"class":211},[96,21461,2702],{"class":106},[96,21463,21464],{"class":98,"line":2604},[96,21465,2383],{"emptyLinePlaceholder":23},[96,21467,21468,21470,21472],{"class":98,"line":7932},[96,21469,4073],{"class":102},[96,21471,4076],{"class":155},[96,21473,1273],{"class":106},[96,21475,21476],{"class":98,"line":7956},[96,21477,1548],{"class":106},[14,21479,21480,21481,21484,21485],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[256,21482,21483],{},"参数名就是定义的对象属性","，",[256,21486,21487],{},"属性后面的值为有参构造函数的形参",[87,21489,21491],{"className":89,"code":21490,"language":91,"meta":18,"style":18},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[93,21492,21493],{"__ignoreMap":18},[96,21494,21495,21497,21499,21501,21504,21506,21509,21511,21514,21516,21519,21521,21524,21526],{"class":98,"line":99},[96,21496,19030],{"class":1946},[96,21498,107],{"class":106},[96,21500,110],{"class":102},[96,21502,21503],{"class":106}," a.",[96,21505,110],{"class":102},[96,21507,21508],{"class":106}," b,",[96,21510,110],{"class":102},[96,21512,21513],{"class":106}," b):",[96,21515,21283],{"class":1946},[96,21517,21518],{"class":106},"(a),",[96,21520,21289],{"class":1946},[96,21522,21523],{"class":106},"(c),",[96,21525,21295],{"class":1946},[96,21527,21528],{"class":106},"(b) {}\n",[67,21530,21532],{"id":21531},"_827类对象作为类成员","8.2.7类对象作为类成员",[14,21534,21535],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[14,21537,14617],{},[87,21539,21541],{"className":89,"code":21540,"language":91,"meta":18,"style":18},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[93,21542,21543,21548,21553,21557,21562,21566],{"__ignoreMap":18},[96,21544,21545],{"class":98,"line":99},[96,21546,21547],{"class":106},"A{};\n",[96,21549,21550],{"class":98,"line":19},[96,21551,21552],{"class":106},"B\n",[96,21554,21555],{"class":98,"line":1162},[96,21556,1529],{"class":106},[96,21558,21559],{"class":98,"line":1177},[96,21560,21561],{"class":106},"    A a;\n",[96,21563,21564],{"class":98,"line":1183},[96,21565,1548],{"class":106},[96,21567,21568],{"class":98,"line":1197},[96,21569,21570],{"class":165},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[14,21572,21573],{},"案例",[87,21575,21577],{"className":89,"code":21576,"language":91,"meta":18,"style":18},"\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",[93,21578,21579,21584,21591,21595,21600,21605,21619,21623,21633,21644,21648,21655,21659,21672,21676,21681,21686,21690,21696,21700,21704,21708,21739,21743,21754,21758,21764,21768,21781,21785,21789,21793,21798,21803,21807,21815,21819,21836,21855,21859,21867,21871,21877],{"__ignoreMap":18},[96,21580,21581],{"class":98,"line":99},[96,21582,21583],{"class":165},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[96,21585,21586,21588],{"class":98,"line":19},[96,21587,14678],{"class":102},[96,21589,21590],{"class":1946}," Phone\n",[96,21592,21593],{"class":98,"line":1162},[96,21594,1529],{"class":106},[96,21596,21597],{"class":98,"line":1177},[96,21598,21599],{"class":106},"public：\n",[96,21601,21602],{"class":98,"line":1183},[96,21603,21604],{"class":165},"    \u002F\u002F 赋值(构造函数)\n",[96,21606,21607,21610,21612,21614,21617],{"class":98,"line":1197},[96,21608,21609],{"class":1946},"    Phone",[96,21611,107],{"class":106},[96,21613,14901],{"class":1946},[96,21615,21616],{"class":5200}," pName",[96,21618,113],{"class":106},[96,21620,21621],{"class":98,"line":1203},[96,21622,2013],{"class":106},[96,21624,21625,21628,21630],{"class":98,"line":1294},[96,21626,21627],{"class":106},"        m_pName",[96,21629,152],{"class":102},[96,21631,21632],{"class":106},"pName;\n",[96,21634,21635,21637,21639,21642],{"class":98,"line":1300},[96,21636,3434],{"class":106},[96,21638,1151],{"class":102},[96,21640,21641],{"class":211},"\"Phone的构造函数调用\"",[96,21643,1273],{"class":106},[96,21645,21646],{"class":98,"line":1312},[96,21647,2170],{"class":106},[96,21649,21650,21653],{"class":98,"line":1595},[96,21651,21652],{"class":1946},"    ~Phone",[96,21654,1959],{"class":106},[96,21656,21657],{"class":98,"line":1600},[96,21658,2013],{"class":106},[96,21660,21661,21663,21665,21668,21670],{"class":98,"line":1606},[96,21662,3434],{"class":106},[96,21664,1151],{"class":102},[96,21666,21667],{"class":211},"\"Phone析构函数调用\"",[96,21669,1151],{"class":102},[96,21671,1174],{"class":106},[96,21673,21674],{"class":98,"line":1611},[96,21675,2170],{"class":106},[96,21677,21678],{"class":98,"line":1625},[96,21679,21680],{"class":165},"    \u002F\u002F\n",[96,21682,21683],{"class":98,"line":1630},[96,21684,21685],{"class":106},"    string m_PName;\n",[96,21687,21688],{"class":98,"line":1636},[96,21689,3978],{"class":106},[96,21691,21692,21694],{"class":98,"line":1657},[96,21693,14678],{"class":102},[96,21695,15155],{"class":1946},[96,21697,21698],{"class":98,"line":1662},[96,21699,1529],{"class":106},[96,21701,21702],{"class":98,"line":1676},[96,21703,14700],{"class":102},[96,21705,21706],{"class":98,"line":1681},[96,21707,16978],{"class":165},[96,21709,21710,21712,21714,21716,21718,21720,21722,21725,21728,21730,21733,21736],{"class":98,"line":1710},[96,21711,18503],{"class":1946},[96,21713,107],{"class":106},[96,21715,14901],{"class":1946},[96,21717,14904],{"class":5200},[96,21719,485],{"class":106},[96,21721,14901],{"class":1946},[96,21723,21724],{"class":5200}," pname",[96,21726,21727],{"class":106},"):",[96,21729,14994],{"class":1946},[96,21731,21732],{"class":106},"(name),m_phone.",[96,21734,21735],{"class":1946},"m_PName",[96,21737,21738],{"class":106},"(pname) \n",[96,21740,21741],{"class":98,"line":1715},[96,21742,2013],{"class":106},[96,21744,21745,21747,21749,21752],{"class":98,"line":1732},[96,21746,3434],{"class":106},[96,21748,1151],{"class":102},[96,21750,21751],{"class":211},"\"Person的构造函数调用\"",[96,21753,1273],{"class":106},[96,21755,21756],{"class":98,"line":1737},[96,21757,2170],{"class":106},[96,21759,21760,21762],{"class":98,"line":1742},[96,21761,18536],{"class":1946},[96,21763,1959],{"class":106},[96,21765,21766],{"class":98,"line":1747},[96,21767,2013],{"class":106},[96,21769,21770,21772,21774,21777,21779],{"class":98,"line":1761},[96,21771,3434],{"class":106},[96,21773,1151],{"class":102},[96,21775,21776],{"class":211},"\"Person析构函数调用\"",[96,21778,1151],{"class":102},[96,21780,1174],{"class":106},[96,21782,21783],{"class":98,"line":1766},[96,21784,2170],{"class":106},[96,21786,21787],{"class":98,"line":2560},[96,21788,7764],{"class":165},[96,21790,21791],{"class":98,"line":2574},[96,21792,14876],{"class":106},[96,21794,21795],{"class":98,"line":2582},[96,21796,21797],{"class":165},"    \u002F\u002F手机\n",[96,21799,21800],{"class":98,"line":2587},[96,21801,21802],{"class":106},"    Phone m_Phone;\n",[96,21804,21805],{"class":98,"line":2593},[96,21806,3978],{"class":106},[96,21808,21809,21811,21813],{"class":98,"line":2599},[96,21810,5348],{"class":102},[96,21812,5572],{"class":1946},[96,21814,1959],{"class":106},[96,21816,21817],{"class":98,"line":2604},[96,21818,1529],{"class":106},[96,21820,21821,21823,21825,21827,21829,21831,21834],{"class":98,"line":7932},[96,21822,19415],{"class":106},[96,21824,14],{"class":1946},[96,21826,107],{"class":106},[96,21828,7900],{"class":211},[96,21830,485],{"class":106},[96,21832,21833],{"class":211},"\"安卓\"",[96,21835,2702],{"class":106},[96,21837,21838,21840,21842,21845,21847,21850,21852],{"class":98,"line":7956},[96,21839,1534],{"class":106},[96,21841,1151],{"class":102},[96,21843,21844],{"class":106},"p.Name",[96,21846,1151],{"class":102},[96,21848,21849],{"class":211},"\"拿着：\"",[96,21851,1151],{"class":102},[96,21853,21854],{"class":106},"p.m_phone.m_PName;\n",[96,21856,21857],{"class":98,"line":7961},[96,21858,1548],{"class":106},[96,21860,21861,21863,21865],{"class":98,"line":7967},[96,21862,110],{"class":102},[96,21864,1956],{"class":1946},[96,21866,1959],{"class":106},[96,21868,21869],{"class":98,"line":7994},[96,21870,1529],{"class":106},[96,21872,21873,21875],{"class":98,"line":7999},[96,21874,5617],{"class":1946},[96,21876,5620],{"class":106},[96,21878,21879],{"class":98,"line":8005},[96,21880,1548],{"class":106},[14,21882,9009],{},[87,21884,21886],{"className":89,"code":21885,"language":91,"meta":18,"style":18},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[93,21887,21888,21893],{"__ignoreMap":18},[96,21889,21890],{"class":98,"line":99},[96,21891,21892],{"class":165},"    \u002F\u002F不需要写这个：\n",[96,21894,21895],{"class":98,"line":19},[96,21896,21897],{"class":165},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[14,21899,21900],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[87,21902,21904],{"className":89,"code":21903,"language":91,"meta":18,"style":18},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[93,21905,21906],{"__ignoreMap":18},[96,21907,21908,21910,21913,21915,21918,21921],{"class":98,"line":99},[96,21909,19030],{"class":1946},[96,21911,21912],{"class":106},"(string name.string pname):",[96,21914,14994],{"class":1946},[96,21916,21917],{"class":106},"(name),",[96,21919,21920],{"class":1946},"m_phone",[96,21922,21923],{"class":106},"(pname) {}\n",[14,21925,21926,21927,152,21930],{},"采用的是隐式转换法，实际为如下：\n",[93,21928,21929],{},"m_phone(pname)",[93,21931,21932],{},"Phone m_phone=pname",[14,21934,21935,21938],{},[256,21936,21937],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[14,21940,21941],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[67,21943,21945],{"id":21944},"_828静态对象","8.2.8静态对象",[14,21947,21948],{},"静态对象在成员对象前static，称为静态对象",[14,21950,21951],{},"静态对象分为两类：",[50,21953,21954],{},[53,21955,21956],{},"静态成员变量",[1114,21958,21959,21962,21965],{},[53,21960,21961],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[53,21963,21964],{},"②在编译阶段分配内存",[53,21966,21967],{},"③类内声明，类外初始化",[50,21969,21970],{"start":19},[53,21971,21972],{},"静态成员函数",[1114,21974,21975,21978],{},[53,21976,21977],{},"①所有对象共享同一个函数",[53,21979,21980],{},"②静态成员函数只能访问静态成员变量",[21982,21983,21985],"h4",{"id":21984},"_8281静态成员变量","8.2.8.1静态成员变量",[87,21987,21989],{"className":89,"code":21988,"language":91,"meta":18,"style":18},"#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",[93,21990,21991,21997,22007,22013,22017,22021,22026,22031,22036,22044,22048,22052,22056,22064,22068,22072,22077,22090,22094,22102,22106,22112],{"__ignoreMap":18},[96,21992,21993,21995],{"class":98,"line":99},[96,21994,1932],{"class":102},[96,21996,1935],{"class":211},[96,21998,21999,22001,22003,22005],{"class":98,"line":19},[96,22000,1940],{"class":102},[96,22002,1943],{"class":102},[96,22004,1947],{"class":1946},[96,22006,1273],{"class":106},[96,22008,22009,22011],{"class":98,"line":1162},[96,22010,14678],{"class":102},[96,22012,15155],{"class":1946},[96,22014,22015],{"class":98,"line":1177},[96,22016,1529],{"class":106},[96,22018,22019],{"class":98,"line":1183},[96,22020,14700],{"class":102},[96,22022,22023],{"class":98,"line":1197},[96,22024,22025],{"class":165},"    \u002F\u002F非静态成员变量\n",[96,22027,22028],{"class":98,"line":1203},[96,22029,22030],{"class":165},"    \u002F\u002F int m_A;\n",[96,22032,22033],{"class":98,"line":1294},[96,22034,22035],{"class":165},"    \u002F\u002F定义静态成员变量\n",[96,22037,22038,22040,22042],{"class":98,"line":1300},[96,22039,11004],{"class":102},[96,22041,2365],{"class":102},[96,22043,21376],{"class":106},[96,22045,22046],{"class":98,"line":1312},[96,22047,2383],{"emptyLinePlaceholder":23},[96,22049,22050],{"class":98,"line":1595},[96,22051,2383],{"emptyLinePlaceholder":23},[96,22053,22054],{"class":98,"line":1600},[96,22055,3978],{"class":106},[96,22057,22058,22060,22062],{"class":98,"line":1606},[96,22059,5348],{"class":102},[96,22061,5572],{"class":1946},[96,22063,1959],{"class":106},[96,22065,22066],{"class":98,"line":1611},[96,22067,1529],{"class":106},[96,22069,22070],{"class":98,"line":1625},[96,22071,15297],{"class":106},[96,22073,22074],{"class":98,"line":1630},[96,22075,22076],{"class":165},"    \u002F\u002F输出类成员变量这块内存\n",[96,22078,22079,22081,22083,22086,22088],{"class":98,"line":1636},[96,22080,1534],{"class":106},[96,22082,1151],{"class":102},[96,22084,22085],{"class":106},"p.m_A",[96,22087,1151],{"class":102},[96,22089,1174],{"class":106},[96,22091,22092],{"class":98,"line":1657},[96,22093,1548],{"class":106},[96,22095,22096,22098,22100],{"class":98,"line":1662},[96,22097,110],{"class":102},[96,22099,1956],{"class":1946},[96,22101,1959],{"class":106},[96,22103,22104],{"class":98,"line":1676},[96,22105,1529],{"class":106},[96,22107,22108,22110],{"class":98,"line":1681},[96,22109,5617],{"class":1946},[96,22111,1959],{"class":106},[96,22113,22114],{"class":98,"line":1710},[96,22115,1548],{"class":106},[14,22117,22118],{},"此时输出是报错的：无法解析外部命令",[14,22120,22121],{},"解决这一问题：必须用到类内声明，类外初始化操作",[87,22123,22125],{"className":89,"code":22124,"language":91,"meta":18,"style":18},"#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",[93,22126,22127,22133,22143,22149,22153,22157,22162,22170,22174,22179,22194,22202,22206,22210,22215,22220,22232,22237,22248,22253,22258,22271,22275,22283,22287,22293],{"__ignoreMap":18},[96,22128,22129,22131],{"class":98,"line":99},[96,22130,1932],{"class":102},[96,22132,1935],{"class":211},[96,22134,22135,22137,22139,22141],{"class":98,"line":19},[96,22136,1940],{"class":102},[96,22138,1943],{"class":102},[96,22140,1947],{"class":1946},[96,22142,1273],{"class":106},[96,22144,22145,22147],{"class":98,"line":1162},[96,22146,14678],{"class":102},[96,22148,15155],{"class":1946},[96,22150,22151],{"class":98,"line":1177},[96,22152,1529],{"class":106},[96,22154,22155],{"class":98,"line":1183},[96,22156,14700],{"class":102},[96,22158,22159],{"class":98,"line":1197},[96,22160,22161],{"class":165},"    \u002F\u002F类内声明\n",[96,22163,22164,22166,22168],{"class":98,"line":1203},[96,22165,11004],{"class":102},[96,22167,2365],{"class":102},[96,22169,21376],{"class":106},[96,22171,22172],{"class":98,"line":1294},[96,22173,3978],{"class":106},[96,22175,22176],{"class":98,"line":1300},[96,22177,22178],{"class":165},"\u002F\u002F类外初始化\n",[96,22180,22181,22183,22185,22188,22190,22192],{"class":98,"line":1312},[96,22182,110],{"class":102},[96,22184,15553],{"class":1946},[96,22186,22187],{"class":106},"::m_A",[96,22189,152],{"class":102},[96,22191,553],{"class":155},[96,22193,1273],{"class":106},[96,22195,22196,22198,22200],{"class":98,"line":1595},[96,22197,5348],{"class":102},[96,22199,5572],{"class":1946},[96,22201,1959],{"class":106},[96,22203,22204],{"class":98,"line":1600},[96,22205,1529],{"class":106},[96,22207,22208],{"class":98,"line":1606},[96,22209,15297],{"class":106},[96,22211,22212],{"class":98,"line":1611},[96,22213,22214],{"class":165},"    \u002F\u002F访问变量的原内存空间\n",[96,22216,22217],{"class":98,"line":1625},[96,22218,22219],{"class":165},"    \u002F\u002F100\n",[96,22221,22222,22224,22226,22228,22230],{"class":98,"line":1630},[96,22223,1534],{"class":106},[96,22225,1151],{"class":102},[96,22227,22085],{"class":106},[96,22229,1151],{"class":102},[96,22231,1174],{"class":106},[96,22233,22234],{"class":98,"line":1636},[96,22235,22236],{"class":106},"    Person p2;\n",[96,22238,22239,22242,22244,22246],{"class":98,"line":1657},[96,22240,22241],{"class":106},"    p2.m_A",[96,22243,152],{"class":102},[96,22245,1705],{"class":155},[96,22247,1273],{"class":106},[96,22249,22250],{"class":98,"line":1662},[96,22251,22252],{"class":165},"    \u002F\u002F继续访问这片空间\n",[96,22254,22255],{"class":98,"line":1676},[96,22256,22257],{"class":165},"    \u002F\u002F200\n",[96,22259,22260,22262,22264,22267,22269],{"class":98,"line":1681},[96,22261,1534],{"class":106},[96,22263,1151],{"class":102},[96,22265,22266],{"class":106},"p2.m_A",[96,22268,1151],{"class":102},[96,22270,1174],{"class":106},[96,22272,22273],{"class":98,"line":1710},[96,22274,1548],{"class":106},[96,22276,22277,22279,22281],{"class":98,"line":1715},[96,22278,110],{"class":102},[96,22280,1956],{"class":1946},[96,22282,1959],{"class":106},[96,22284,22285],{"class":98,"line":1732},[96,22286,1529],{"class":106},[96,22288,22289,22291],{"class":98,"line":1737},[96,22290,5617],{"class":1946},[96,22292,5620],{"class":106},[96,22294,22295],{"class":98,"line":1742},[96,22296,1548],{"class":106},[14,22298,22299],{},[256,22300,22301],{},"静态变量的访问",[87,22303,22305],{"className":89,"code":22304,"language":91,"meta":18,"style":18},"#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",[93,22306,22307,22313,22323,22329,22333,22337,22341,22349,22353,22358,22366,22370,22374,22388,22403,22411,22415,22420,22425,22430,22435,22447,22452,22457,22471,22488,22492,22500,22504,22510],{"__ignoreMap":18},[96,22308,22309,22311],{"class":98,"line":99},[96,22310,1932],{"class":102},[96,22312,1935],{"class":211},[96,22314,22315,22317,22319,22321],{"class":98,"line":19},[96,22316,1940],{"class":102},[96,22318,1943],{"class":102},[96,22320,1947],{"class":1946},[96,22322,1273],{"class":106},[96,22324,22325,22327],{"class":98,"line":1162},[96,22326,14678],{"class":102},[96,22328,15155],{"class":1946},[96,22330,22331],{"class":98,"line":1177},[96,22332,1529],{"class":106},[96,22334,22335],{"class":98,"line":1183},[96,22336,14700],{"class":102},[96,22338,22339],{"class":98,"line":1197},[96,22340,22161],{"class":165},[96,22342,22343,22345,22347],{"class":98,"line":1203},[96,22344,11004],{"class":102},[96,22346,2365],{"class":102},[96,22348,21376],{"class":106},[96,22350,22351],{"class":98,"line":1294},[96,22352,15206],{"class":102},[96,22354,22355],{"class":98,"line":1300},[96,22356,22357],{"class":165},"    \u002F\u002F静态成员变量也是有访问权限的\n",[96,22359,22360,22362,22364],{"class":98,"line":1312},[96,22361,11004],{"class":102},[96,22363,2365],{"class":102},[96,22365,21383],{"class":106},[96,22367,22368],{"class":98,"line":1595},[96,22369,3978],{"class":106},[96,22371,22372],{"class":98,"line":1600},[96,22373,22178],{"class":165},[96,22375,22376,22378,22380,22382,22384,22386],{"class":98,"line":1606},[96,22377,110],{"class":102},[96,22379,15553],{"class":1946},[96,22381,22187],{"class":106},[96,22383,152],{"class":102},[96,22385,553],{"class":155},[96,22387,1273],{"class":106},[96,22389,22390,22392,22394,22397,22399,22401],{"class":98,"line":1611},[96,22391,110],{"class":102},[96,22393,15553],{"class":1946},[96,22395,22396],{"class":106},"::m_B",[96,22398,152],{"class":102},[96,22400,807],{"class":155},[96,22402,1273],{"class":106},[96,22404,22405,22407,22409],{"class":98,"line":1625},[96,22406,5348],{"class":102},[96,22408,5641],{"class":1946},[96,22410,1959],{"class":106},[96,22412,22413],{"class":98,"line":1630},[96,22414,1529],{"class":106},[96,22416,22417],{"class":98,"line":1636},[96,22418,22419],{"class":165},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[96,22421,22422],{"class":98,"line":1657},[96,22423,22424],{"class":165},"    \u002F\u002F静态成员变量有两种访问方式：\n",[96,22426,22427],{"class":98,"line":1662},[96,22428,22429],{"class":165},"    \u002F\u002F1.通过对象进行访问\n",[96,22431,22432],{"class":98,"line":1676},[96,22433,22434],{"class":106},"    Person p;  \n",[96,22436,22437,22439,22441,22443,22445],{"class":98,"line":1681},[96,22438,1534],{"class":106},[96,22440,1151],{"class":102},[96,22442,22085],{"class":106},[96,22444,1151],{"class":102},[96,22446,1174],{"class":106},[96,22448,22449],{"class":98,"line":1710},[96,22450,22451],{"class":165},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[96,22453,22454],{"class":98,"line":1715},[96,22455,22456],{"class":165},"    \u002F\u002F2.通过类名进行访问\n",[96,22458,22459,22461,22463,22465,22467,22469],{"class":98,"line":1732},[96,22460,1534],{"class":106},[96,22462,1151],{"class":102},[96,22464,19030],{"class":1946},[96,22466,22187],{"class":106},[96,22468,1151],{"class":102},[96,22470,1174],{"class":106},[96,22472,22473,22475,22477,22479,22481,22483,22485],{"class":98,"line":1737},[96,22474,1534],{"class":106},[96,22476,1151],{"class":102},[96,22478,19030],{"class":1946},[96,22480,22396],{"class":106},[96,22482,1151],{"class":102},[96,22484,1221],{"class":106},[96,22486,22487],{"class":165}," \u002F\u002F没有访问权限，报错\n",[96,22489,22490],{"class":98,"line":1742},[96,22491,1548],{"class":106},[96,22493,22494,22496,22498],{"class":98,"line":1747},[96,22495,110],{"class":102},[96,22497,1956],{"class":1946},[96,22499,1959],{"class":106},[96,22501,22502],{"class":98,"line":1761},[96,22503,1529],{"class":106},[96,22505,22506,22508],{"class":98,"line":1766},[96,22507,5686],{"class":1946},[96,22509,5620],{"class":106},[96,22511,22512],{"class":98,"line":2560},[96,22513,1548],{"class":106},[21982,22515,22517],{"id":22516},"_8282静态成员函数","8.2.8.2静态成员函数",[14,22519,22520],{},"1.静态成员函数定义与访问",[87,22522,22524],{"className":89,"code":22523,"language":91,"meta":18,"style":18},"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",[93,22525,22526,22532,22536,22540,22545,22556,22560,22574,22578,22582,22590,22594,22599,22604,22608,22616,22621,22631],{"__ignoreMap":18},[96,22527,22528,22530],{"class":98,"line":99},[96,22529,14678],{"class":102},[96,22531,15155],{"class":1946},[96,22533,22534],{"class":98,"line":19},[96,22535,1529],{"class":106},[96,22537,22538],{"class":98,"line":1162},[96,22539,14700],{"class":102},[96,22541,22542],{"class":98,"line":1177},[96,22543,22544],{"class":165},"    \u002F\u002F在公共权限下定义静态成员函数\n",[96,22546,22547,22549,22552,22554],{"class":98,"line":1183},[96,22548,11004],{"class":102},[96,22550,22551],{"class":102}," void",[96,22553,11369],{"class":1946},[96,22555,1959],{"class":106},[96,22557,22558],{"class":98,"line":1197},[96,22559,2013],{"class":106},[96,22561,22562,22565,22567,22570,22572],{"class":98,"line":1203},[96,22563,22564],{"class":106},"        coout",[96,22566,1151],{"class":102},[96,22568,22569],{"class":211},"\"静态成员函数的调用\"",[96,22571,1151],{"class":102},[96,22573,1174],{"class":106},[96,22575,22576],{"class":98,"line":1294},[96,22577,2170],{"class":106},[96,22579,22580],{"class":98,"line":1300},[96,22581,3978],{"class":106},[96,22583,22584,22586,22588],{"class":98,"line":1312},[96,22585,5348],{"class":102},[96,22587,5572],{"class":1946},[96,22589,1959],{"class":106},[96,22591,22592],{"class":98,"line":1595},[96,22593,1529],{"class":106},[96,22595,22596],{"class":98,"line":1600},[96,22597,22598],{"class":165},"    \u002F\u002F静态成员函数的调用方式:\n",[96,22600,22601],{"class":98,"line":1606},[96,22602,22603],{"class":165},"    \u002F\u002F1.通过对象访问\n",[96,22605,22606],{"class":98,"line":1611},[96,22607,15297],{"class":106},[96,22609,22610,22612,22614],{"class":98,"line":1625},[96,22611,15850],{"class":106},[96,22613,11535],{"class":1946},[96,22615,5620],{"class":106},[96,22617,22618],{"class":98,"line":1630},[96,22619,22620],{"class":165},"    \u002F\u002F2.通过类名访问\n",[96,22622,22623,22625,22627,22629],{"class":98,"line":1636},[96,22624,18503],{"class":1946},[96,22626,17716],{"class":106},[96,22628,11535],{"class":1946},[96,22630,5620],{"class":106},[96,22632,22633],{"class":98,"line":1657},[96,22634,1548],{"class":106},[50,22636,22637],{"start":19},[53,22638,22639],{},"静态成员函数只能访问静态成员变量",[87,22641,22643],{"className":89,"code":22642,"language":91,"meta":18,"style":18},"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",[93,22644,22645,22651,22655,22659,22663,22673,22677,22691,22696,22708,22712,22723,22733,22737,22741,22745,22755,22759,22772,22776,22780,22784,22788,22802,22810,22814,22818,22822,22826,22834,22838,22848,22853,22857,22865,22869,22875],{"__ignoreMap":18},[96,22646,22647,22649],{"class":98,"line":99},[96,22648,14678],{"class":102},[96,22650,15155],{"class":1946},[96,22652,22653],{"class":98,"line":19},[96,22654,1529],{"class":106},[96,22656,22657],{"class":98,"line":1162},[96,22658,14700],{"class":102},[96,22660,22661],{"class":98,"line":1177},[96,22662,22544],{"class":165},[96,22664,22665,22667,22669,22671],{"class":98,"line":1183},[96,22666,11004],{"class":102},[96,22668,22551],{"class":102},[96,22670,11369],{"class":1946},[96,22672,1959],{"class":106},[96,22674,22675],{"class":98,"line":1197},[96,22676,2013],{"class":106},[96,22678,22679,22682,22684,22686,22688],{"class":98,"line":1203},[96,22680,22681],{"class":106},"        m_A",[96,22683,152],{"class":102},[96,22685,418],{"class":155},[96,22687,162],{"class":106},[96,22689,22690],{"class":165}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[96,22692,22693],{"class":98,"line":1294},[96,22694,22695],{"class":165},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[96,22697,22698,22700,22702,22704,22706],{"class":98,"line":1300},[96,22699,22564],{"class":106},[96,22701,1151],{"class":102},[96,22703,22569],{"class":211},[96,22705,1151],{"class":102},[96,22707,1174],{"class":106},[96,22709,22710],{"class":98,"line":1312},[96,22711,2170],{"class":106},[96,22713,22714,22716,22718,22720],{"class":98,"line":1595},[96,22715,11004],{"class":102},[96,22717,2365],{"class":102},[96,22719,15432],{"class":106},[96,22721,22722],{"class":165}," \u002F\u002F静态成员变量\n",[96,22724,22725,22727,22730],{"class":98,"line":1600},[96,22726,1968],{"class":102},[96,22728,22729],{"class":106}," m_B;",[96,22731,22732],{"class":165}," \u002F\u002F非静态成员变量\n",[96,22734,22735],{"class":98,"line":1606},[96,22736,2383],{"emptyLinePlaceholder":23},[96,22738,22739],{"class":98,"line":1611},[96,22740,15206],{"class":102},[96,22742,22743],{"class":98,"line":1625},[96,22744,22357],{"class":165},[96,22746,22747,22749,22751,22753],{"class":98,"line":1630},[96,22748,11004],{"class":102},[96,22750,22551],{"class":102},[96,22752,13602],{"class":1946},[96,22754,1959],{"class":106},[96,22756,22757],{"class":98,"line":1636},[96,22758,2013],{"class":106},[96,22760,22761,22763,22765,22768,22770],{"class":98,"line":1657},[96,22762,3434],{"class":106},[96,22764,1151],{"class":102},[96,22766,22767],{"class":211},"\"这是私有权限下的静态函数调用\"",[96,22769,1151],{"class":102},[96,22771,1174],{"class":106},[96,22773,22774],{"class":98,"line":1662},[96,22775,2170],{"class":106},[96,22777,22778],{"class":98,"line":1676},[96,22779,2383],{"emptyLinePlaceholder":23},[96,22781,22782],{"class":98,"line":1681},[96,22783,2383],{"emptyLinePlaceholder":23},[96,22785,22786],{"class":98,"line":1710},[96,22787,3978],{"class":106},[96,22789,22790,22792,22794,22796,22798,22800],{"class":98,"line":1715},[96,22791,110],{"class":102},[96,22793,15553],{"class":1946},[96,22795,22187],{"class":106},[96,22797,152],{"class":102},[96,22799,298],{"class":155},[96,22801,1273],{"class":106},[96,22803,22804,22806,22808],{"class":98,"line":1732},[96,22805,5348],{"class":102},[96,22807,5572],{"class":1946},[96,22809,1959],{"class":106},[96,22811,22812],{"class":98,"line":1737},[96,22813,1529],{"class":106},[96,22815,22816],{"class":98,"line":1742},[96,22817,22598],{"class":165},[96,22819,22820],{"class":98,"line":1747},[96,22821,22603],{"class":165},[96,22823,22824],{"class":98,"line":1761},[96,22825,15297],{"class":106},[96,22827,22828,22830,22832],{"class":98,"line":1766},[96,22829,15850],{"class":106},[96,22831,11535],{"class":1946},[96,22833,5620],{"class":106},[96,22835,22836],{"class":98,"line":2560},[96,22837,22620],{"class":165},[96,22839,22840,22842,22844,22846],{"class":98,"line":2574},[96,22841,18503],{"class":1946},[96,22843,17716],{"class":106},[96,22845,11535],{"class":1946},[96,22847,5620],{"class":106},[96,22849,22850],{"class":98,"line":2582},[96,22851,22852],{"class":165},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[96,22854,22855],{"class":98,"line":2587},[96,22856,1548],{"class":106},[96,22858,22859,22861,22863],{"class":98,"line":2593},[96,22860,110],{"class":102},[96,22862,1956],{"class":1946},[96,22864,1959],{"class":106},[96,22866,22867],{"class":98,"line":2599},[96,22868,1529],{"class":106},[96,22870,22871,22873],{"class":98,"line":2604},[96,22872,5617],{"class":1946},[96,22874,5620],{"class":106},[96,22876,22877],{"class":98,"line":7932},[96,22878,1548],{"class":106},[67,22880,22882],{"id":22881},"_83c对象模型和this指针","8.3C++对象模型和this指针",[21982,22884,22886],{"id":22885},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[14,22888,22889],{},"在c++中，类内的成员变量和成员函数分开存储",[14,22891,22892],{},"只有非静态成员变量才属于类的对象上",[22894,22895,22897],"h5",{"id":22896},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[87,22899,22901],{"className":89,"code":22900,"language":91,"meta":18,"style":18},"#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",[93,22902,22903,22910,22920,22926,22930,22934,22938,22946,22950,22954,22977,22981,22989,22993,22999],{"__ignoreMap":18},[96,22904,22905,22907],{"class":98,"line":99},[96,22906,1932],{"class":102},[96,22908,22909],{"class":211},"\u003Ciostraem>\n",[96,22911,22912,22914,22916,22918],{"class":98,"line":19},[96,22913,1940],{"class":102},[96,22915,1943],{"class":102},[96,22917,1947],{"class":1946},[96,22919,1273],{"class":106},[96,22921,22922,22924],{"class":98,"line":1162},[96,22923,14678],{"class":102},[96,22925,15155],{"class":1946},[96,22927,22928],{"class":98,"line":1177},[96,22929,1529],{"class":106},[96,22931,22932],{"class":98,"line":1183},[96,22933,2383],{"emptyLinePlaceholder":23},[96,22935,22936],{"class":98,"line":1197},[96,22937,3978],{"class":106},[96,22939,22940,22942,22944],{"class":98,"line":1203},[96,22941,5348],{"class":102},[96,22943,5572],{"class":1946},[96,22945,1959],{"class":106},[96,22947,22948],{"class":98,"line":1294},[96,22949,1529],{"class":106},[96,22951,22952],{"class":98,"line":1300},[96,22953,15297],{"class":106},[96,22955,22956,22958,22960,22963,22965,22968,22970,22972,22974],{"class":98,"line":1312},[96,22957,1534],{"class":106},[96,22959,1151],{"class":102},[96,22961,22962],{"class":211},"\"size of p=\"",[96,22964,1151],{"class":102},[96,22966,22967],{"class":1946},"sizeoif",[96,22969,6523],{"class":106},[96,22971,1151],{"class":102},[96,22973,1221],{"class":106},[96,22975,22976],{"class":165}," \u002F\u002F查看这个空类的占用的内存空间\n",[96,22978,22979],{"class":98,"line":1595},[96,22980,1548],{"class":106},[96,22982,22983,22985,22987],{"class":98,"line":1600},[96,22984,110],{"class":102},[96,22986,1956],{"class":1946},[96,22988,1959],{"class":106},[96,22990,22991],{"class":98,"line":1606},[96,22992,1529],{"class":106},[96,22994,22995,22997],{"class":98,"line":1611},[96,22996,5617],{"class":1946},[96,22998,5620],{"class":106},[96,23000,23001],{"class":98,"line":1625},[96,23002,1548],{"class":106},[14,23004,23005],{},"输出结果为：size of p=1",[14,23007,23008],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[14,23010,23011],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[22894,23013,23015],{"id":23014},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[87,23017,23019],{"className":89,"code":23018,"language":91,"meta":18,"style":18},"#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",[93,23020,23021,23027,23037,23045,23049,23058,23062,23070,23074,23078,23097,23101,23105,23113,23117,23123],{"__ignoreMap":18},[96,23022,23023,23025],{"class":98,"line":99},[96,23024,1932],{"class":102},[96,23026,1935],{"class":211},[96,23028,23029,23031,23033,23035],{"class":98,"line":19},[96,23030,1940],{"class":102},[96,23032,1943],{"class":102},[96,23034,1947],{"class":1946},[96,23036,1273],{"class":106},[96,23038,23039,23041,23043],{"class":98,"line":1162},[96,23040,14678],{"class":102},[96,23042,15553],{"class":1946},[96,23044,2657],{"class":106},[96,23046,23047],{"class":98,"line":1177},[96,23048,1529],{"class":106},[96,23050,23051,23053,23055],{"class":98,"line":1183},[96,23052,1968],{"class":102},[96,23054,15432],{"class":106},[96,23056,23057],{"class":165},"\u002F\u002F非静态成员变量\n",[96,23059,23060],{"class":98,"line":1197},[96,23061,3978],{"class":106},[96,23063,23064,23066,23068],{"class":98,"line":1203},[96,23065,5348],{"class":102},[96,23067,5572],{"class":1946},[96,23069,1959],{"class":106},[96,23071,23072],{"class":98,"line":1294},[96,23073,1529],{"class":106},[96,23075,23076],{"class":98,"line":1300},[96,23077,15297],{"class":106},[96,23079,23080,23082,23084,23086,23088,23090,23092,23094],{"class":98,"line":1312},[96,23081,1534],{"class":106},[96,23083,1151],{"class":102},[96,23085,22962],{"class":211},[96,23087,1355],{"class":102},[96,23089,6523],{"class":106},[96,23091,1151],{"class":102},[96,23093,1221],{"class":106},[96,23095,23096],{"class":165}," \u002F\u002F查看不是空对象时占用多少内存\n",[96,23098,23099],{"class":98,"line":1595},[96,23100,2383],{"emptyLinePlaceholder":23},[96,23102,23103],{"class":98,"line":1600},[96,23104,1548],{"class":106},[96,23106,23107,23109,23111],{"class":98,"line":1606},[96,23108,110],{"class":102},[96,23110,1956],{"class":1946},[96,23112,1959],{"class":106},[96,23114,23115],{"class":98,"line":1611},[96,23116,1529],{"class":106},[96,23118,23119,23121],{"class":98,"line":1625},[96,23120,5617],{"class":1946},[96,23122,5620],{"class":106},[96,23124,23125],{"class":98,"line":1630},[96,23126,1548],{"class":106},[14,23128,23129],{},"输出结果：size of p=4",[14,23131,23132],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[50,23134,23135],{},[53,23136,23137],{},"如果加上非静态成员变量，Person类修改如下",[87,23139,23141],{"className":89,"code":23140,"language":91,"meta":18,"style":18},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[93,23142,23143,23149,23153,23159,23167,23171,23176],{"__ignoreMap":18},[96,23144,23145,23147],{"class":98,"line":99},[96,23146,14678],{"class":102},[96,23148,15155],{"class":1946},[96,23150,23151],{"class":98,"line":19},[96,23152,1529],{"class":106},[96,23154,23155,23157],{"class":98,"line":1162},[96,23156,1968],{"class":102},[96,23158,21376],{"class":106},[96,23160,23161,23163,23165],{"class":98,"line":1177},[96,23162,11004],{"class":102},[96,23164,2365],{"class":102},[96,23166,21383],{"class":106},[96,23168,23169],{"class":98,"line":1183},[96,23170,3978],{"class":106},[96,23172,23173],{"class":98,"line":1197},[96,23174,23175],{"class":165},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[96,23177,23178,23180,23182,23184,23186,23188],{"class":98,"line":1203},[96,23179,110],{"class":102},[96,23181,15553],{"class":1946},[96,23183,22396],{"class":106},[96,23185,152],{"class":102},[96,23187,298],{"class":155},[96,23189,1273],{"class":106},[14,23191,23192],{},"输出结果：4",[14,23194,23195],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[50,23197,23198],{"start":19},[53,23199,23200],{},"加上非静态成员函数",[87,23202,23204],{"className":89,"code":23203,"language":91,"meta":18,"style":18},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[93,23205,23206,23213,23217,23223,23231,23235,23239,23243],{"__ignoreMap":18},[96,23207,23208,23210],{"class":98,"line":99},[96,23209,14678],{"class":102},[96,23211,23212],{"class":1946},"  Person\n",[96,23214,23215],{"class":98,"line":19},[96,23216,1529],{"class":106},[96,23218,23219,23221],{"class":98,"line":1162},[96,23220,1968],{"class":102},[96,23222,21376],{"class":106},[96,23224,23225,23227,23229],{"class":98,"line":1177},[96,23226,14893],{"class":102},[96,23228,11369],{"class":1946},[96,23230,1959],{"class":106},[96,23232,23233],{"class":98,"line":1183},[96,23234,2013],{"class":106},[96,23236,23237],{"class":98,"line":1197},[96,23238,2383],{"emptyLinePlaceholder":23},[96,23240,23241],{"class":98,"line":1203},[96,23242,2170],{"class":106},[96,23244,23245],{"class":98,"line":1294},[96,23246,3978],{"class":106},[14,23248,23249],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[50,23251,23252],{"start":1162},[53,23253,23254],{},"加上静态成员函数",[87,23256,23258],{"className":89,"code":23257,"language":91,"meta":18,"style":18},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[93,23259,23260,23266,23270,23276,23284,23288,23292,23296,23307,23311,23315,23319],{"__ignoreMap":18},[96,23261,23262,23264],{"class":98,"line":99},[96,23263,14678],{"class":102},[96,23265,23212],{"class":1946},[96,23267,23268],{"class":98,"line":19},[96,23269,1529],{"class":106},[96,23271,23272,23274],{"class":98,"line":1162},[96,23273,1968],{"class":102},[96,23275,21376],{"class":106},[96,23277,23278,23280,23282],{"class":98,"line":1177},[96,23279,14893],{"class":102},[96,23281,11369],{"class":1946},[96,23283,1959],{"class":106},[96,23285,23286],{"class":98,"line":1183},[96,23287,2013],{"class":106},[96,23289,23290],{"class":98,"line":1197},[96,23291,2383],{"emptyLinePlaceholder":23},[96,23293,23294],{"class":98,"line":1203},[96,23295,2170],{"class":106},[96,23297,23298,23300,23302,23305],{"class":98,"line":1294},[96,23299,11004],{"class":102},[96,23301,22551],{"class":102},[96,23303,23304],{"class":1946}," func1",[96,23306,1959],{"class":106},[96,23308,23309],{"class":98,"line":1300},[96,23310,2013],{"class":106},[96,23312,23313],{"class":98,"line":1312},[96,23314,2383],{"emptyLinePlaceholder":23},[96,23316,23317],{"class":98,"line":1595},[96,23318,2170],{"class":106},[96,23320,23321],{"class":98,"line":1600},[96,23322,3978],{"class":106},[14,23324,23192],{},[14,23326,23327],{},"解释：静态成员函数也不属于类上",[5110,23329,7658],{},{"title":18,"searchDepth":19,"depth":19,"links":23331},[23332,23338],{"id":14629,"depth":19,"text":14630,"children":23333},[23334,23335,23336,23337],{"id":14633,"depth":1162,"text":14634},{"id":15358,"depth":1162,"text":15359},{"id":15530,"depth":1162,"text":15531},{"id":15989,"depth":1162,"text":15990},{"id":18361,"depth":19,"text":18362,"children":23339},[23340,23341,23342,23343,23344,23345,23346,23347,23348],{"id":18373,"depth":1162,"text":18374},{"id":18666,"depth":1162,"text":18667},{"id":19157,"depth":1162,"text":19158},{"id":20254,"depth":1162,"text":20255},{"id":20677,"depth":1162,"text":20678},{"id":21156,"depth":1162,"text":21157},{"id":21531,"depth":1162,"text":21532},{"id":21944,"depth":1162,"text":21945},{"id":22881,"depth":1162,"text":22882},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14594,"description":23349},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23356,"title":91,"body":23357,"description":23361,"extension":21,"meta":23362,"navigation":23,"path":23364,"seo":23365,"stem":23366,"__hash__":23367},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23358,"toc":23359},[],{"title":18,"searchDepth":19,"depth":19,"links":23360},[],null,{"category":23363},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":91,"description":23361},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23369,"title":23370,"body":23371,"description":18,"extension":21,"meta":23962,"navigation":23,"path":23963,"seo":23964,"stem":23965,"__hash__":23966},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23372,"toc":23944},[23373,23376,23380,23383,23386,23389,23407,23412,23415,23418,23421,23424,23429,23432,23437,23440,23443,23447,23450,23453,23459,23462,23480,23484,23488,23491,23496,23499,23503,23506,23519,23522,23526,23529,23532,23535,23560,23563,23572,23583,23598,23630,23634,23641,23649,23653,23656,23659,23664,23668,23671,23674,23679,23682,23686,23689,23692,23697,23700,23704,23709,23713,23780,23784,23787,23790,23793,23796,23799,23805,23826,23829,23843,23852,23856,23859,23862,23867,23870,23875,23880,23883,23886,23891,23896,23899,23904,23909,23912,23917,23922,23925,23928,23933,23936,23941],[10,23374,23370],{"id":23375},"_1强化学习基本认识",[38,23377,23379],{"id":23378},"_11什么是强化学习","1.1.什么是强化学习",[14,23381,23382],{},"强化学习有两部分组成：智能体和环境；",[14,23384,23385],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[14,23387,23388],{},"强化学习与监督学习的区别:",[50,23390,23391,23394,23397,23400],{},[53,23392,23393],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[53,23395,23396],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[53,23398,23399],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[53,23401,23402,23403,23406],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[256,23404,23405],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[14,23408,23409],{},[1445,23410],{"alt":18,"src":23411},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[14,23413,23414],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[14,23416,23417],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[14,23419,23420],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[14,23422,23423],{},"获取奖励",[14,23425,23426],{},[1445,23427],{"alt":18,"src":23428},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[14,23430,23431],{},"强化学习可以分成标准强化学习和深度强化学习",[14,23433,23434],{},[1445,23435],{"alt":18,"src":23436},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[14,23438,23439],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[14,23441,23442],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[38,23444,23446],{"id":23445},"_12强化学习应用场景","1.2.强化学习应用场景",[14,23448,23449],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[14,23451,23452],{},"具身智能中的应用",[14,23454,23455,23458],{},[256,23456,23457],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[14,23460,23461],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[14,23463,23464,23465,23468,23469,23472,23473,23476,23477],{},"机器人是",[256,23466,23467],{},"躯体","，深度学习是",[256,23470,23471],{},"神经元****网络","，VLA是",[256,23474,23475],{},"通用的行为逻辑","，而强化学习是",[256,23478,23479],{},"教练",[38,23481,23483],{"id":23482},"_13序列决策","1.3.序列决策",[67,23485,23487],{"id":23486},"_131智能体与环境","1.3.1.智能体与环境",[14,23489,23490],{},"强化学习研究的问题是智能体agent与环境交互的问题",[14,23492,23493],{},[1445,23494],{"alt":18,"src":23495},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[14,23497,23498],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[67,23500,23502],{"id":23501},"_132奖励","1.3.2.奖励",[14,23504,23505],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[14,23507,23508,23509,23518],{},"取某个策略的表现如何。强化学习的目的就是",[256,23510,23511,23512,23517],{},"最大化",[256,23513,23514],{},[256,23515,23516],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[14,23520,23521],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[67,23523,23525],{"id":23524},"_133序列决策","1.3.3.序列决策",[14,23527,23528],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[14,23530,23531],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[14,23533,23534],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[14,23536,23537,23541,23542,23544,23545,23547,23548,23550,23551,13779,23554,13779,23557],{},[23538,23539,23540],"em",{},"Ht"," = ",[23538,23543,703],{},"1*, a",[23538,23546,324],{},", r",[23538,23549,324],{},", . . . ,* ",[23538,23552,23553],{},"ot",[23538,23555,23556],{},", at ,",[23538,23558,23559],{},"rt",[14,23561,23562],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[14,23564,23565,23541,23568,1641,23570,536],{},[23538,23566,23567],{},"st",[23538,23569,159],{},[23538,23571,23540],{},[14,23573,23574,23575,23578,23579,23582],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[256,23576,23577],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[256,23580,23581],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[14,23584,23585,23586,23589,23590,23593,23594,23597],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[256,23587,23588],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[256,23591,23592],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23538,23595,23596],{},"S, A, T, R, Ω, O, γ",")。",[14,23599,23600,23601,23603,23604,23606,23607,107,23609,23612,23613,23615,23616,107,23619,23622,23623,23625,23626,23629],{},"其中 ",[23538,23602,796],{}," 表示状态空间，为隐变量，",[23538,23605,339],{}," 为动作空间，",[23538,23608,821],{},[23538,23610,23611],{},"s ′ |s, a",") 为状态转移概率，",[23538,23614,771],{}," 为奖励函数，",[23538,23617,23618],{},"Ω",[23538,23620,23621],{},"o|s, a",") 为观测概率，",[23538,23624,697],{}," 为观测空间，",[23538,23627,23628],{},"γ"," 为折扣因子。",[38,23631,23633],{"id":23632},"_14动作空间","1.4.动作空间",[14,23635,23636,23637,23640],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[256,23638,23639],{},"动作空间"," ，动作空间分为:",[50,23642,23643,23646],{},[53,23644,23645],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[53,23647,23648],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[38,23650,23652],{"id":23651},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[14,23654,23655],{},"由策略、价值函数、模型三部分组成",[14,23657,23658],{},"这三者组成马尔可夫决策过程",[14,23660,23661],{},[1445,23662],{"alt":18,"src":23663},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[67,23665,23667],{"id":23666},"_151策略","1.5.1.策略",[14,23669,23670],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[14,23672,23673],{},"策略可分为两种：",[14,23675,23676],{},[1445,23677],{"alt":18,"src":23678},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[14,23680,23681],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[67,23683,23685],{"id":23684},"_152价值函数","1.5.2.价值函数",[14,23687,23688],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[14,23690,23691],{},"价值函数中有一个折扣因子，类似于存款利息",[14,23693,23694],{},[1445,23695],{"alt":18,"src":23696},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[14,23698,23699],{},"进入某个状态采取的最优动作可以通过Q函数得到",[67,23701,23703],{"id":23702},"_153模型","1.5.3.模型",[14,23705,23706],{},[1445,23707],{"alt":18,"src":23708},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[38,23710,23712],{"id":23711},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[244,23714,23715,23726],{},[247,23716,23717],{},[250,23718,23719,23723],{},[253,23720,23722],{"align":23721},"left","类型",[253,23724,23725],{"align":23721},"特点",[291,23727,23728,23738,23748,23758,23770],{},[250,23729,23730,23735],{},[296,23731,23732],{"align":23721},[256,23733,23734],{},"基于价值的智能体",[296,23736,23737],{"align":23721},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[250,23739,23740,23745],{},[296,23741,23742],{"align":23721},[256,23743,23744],{},"基于策略的智能体",[296,23746,23747],{"align":23721},"直接学习策略，没有学习价值函数",[250,23749,23750,23755],{},[296,23751,23752],{"align":23721},[256,23753,23754],{},"演员-评论员智能体",[296,23756,23757],{"align":23721},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[250,23759,23760,23765],{},[296,23761,23762],{"align":23721},[256,23763,23764],{},"有模型强化学习智能体",[296,23766,23767],{"align":23721},[1445,23768],{"alt":18,"src":23769},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[250,23771,23772,23777],{},[296,23773,23774],{"align":23721},[256,23775,23776],{},"免模型强化学习智能体",[296,23778,23779],{"align":23721},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[38,23781,23783],{"id":23782},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[14,23785,23786],{},"学习和规划是序列决策的两个基本问题",[14,23788,23789],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[14,23791,23792],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[14,23794,23795],{},"强化学习用到的库：Gym",[14,23797,23798],{},"Gym可以检验强化学习算法的优劣",[14,23800,23801,23804],{},[256,23802,23803],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[87,23806,23810],{"className":23807,"code":23808,"language":23809,"meta":18,"style":18},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[93,23811,23812],{"__ignoreMap":18},[96,23813,23814,23817,23820,23823],{"class":98,"line":99},[96,23815,23816],{"class":1946},"pip",[96,23818,23819],{"class":211}," install",[96,23821,23822],{"class":211}," gym==",[96,23824,23825],{"class":155},"0.25.2\n",[14,23827,23828],{},"显示图形界面需要",[87,23830,23832],{"className":23807,"code":23831,"language":23809,"meta":18,"style":18},"pip install pygame\n",[93,23833,23834],{"__ignoreMap":18},[96,23835,23836,23838,23840],{"class":98,"line":99},[96,23837,23816],{"class":1946},[96,23839,23819],{"class":211},[96,23841,23842],{"class":211}," pygame\n",[14,23844,23845,23846],{},"有关Gym库的相关文档介绍：",[345,23847,23851],{"href":23848,"rel":23849},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[23850],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[38,23853,23855],{"id":23854},"_18一些补充基础概念","1.8.一些补充基础概念",[14,23857,23858],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[14,23860,23861],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[14,23863,23864],{},[1445,23865],{"alt":18,"src":23866},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[14,23868,23869],{},"折扣率需要自己来设定",[14,23871,23872],{},[1445,23873],{"alt":18,"src":23874},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[50,23876,23877],{},[53,23878,23879],{},"状态转移函数：",[14,23881,23882],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[14,23884,23885],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[14,23887,23888],{},[1445,23889],{"alt":18,"src":23890},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[50,23892,23893],{"start":19},[53,23894,23895],{},"动作价值函数：",[14,23897,23898],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[14,23900,23901],{},[1445,23902],{"alt":18,"src":23903},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[50,23905,23906],{"start":1162},[53,23907,23908],{},"最优动作价值函数：",[14,23910,23911],{},"这个函数是对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,23913,23914],{},[1445,23915],{"alt":18,"src":23916},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[50,23918,23919],{"start":1177},[53,23920,23921],{},"状态价值函数:",[14,23923,23924],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[14,23926,23927],{},"它衡量的是“一个具体动作”的长期价值",[14,23929,23930],{},[1445,23931],{"alt":18,"src":23932},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[14,23934,23935],{},"几个价值函数之间的比较：",[14,23937,23938],{},[1445,23939],{"alt":18,"src":23940},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[5110,23942,23943],{},"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":18,"searchDepth":19,"depth":19,"links":23945},[23946,23947,23948,23953,23954,23959,23960,23961],{"id":23378,"depth":19,"text":23379},{"id":23445,"depth":19,"text":23446},{"id":23482,"depth":19,"text":23483,"children":23949},[23950,23951,23952],{"id":23486,"depth":1162,"text":23487},{"id":23501,"depth":1162,"text":23502},{"id":23524,"depth":1162,"text":23525},{"id":23632,"depth":19,"text":23633},{"id":23651,"depth":19,"text":23652,"children":23955},[23956,23957,23958],{"id":23666,"depth":1162,"text":23667},{"id":23684,"depth":1162,"text":23685},{"id":23702,"depth":1162,"text":23703},{"id":23711,"depth":19,"text":23712},{"id":23782,"depth":19,"text":23783},{"id":23854,"depth":19,"text":23855},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23370,"description":18},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":23968,"title":23969,"body":23970,"description":23977,"extension":21,"meta":23988,"navigation":23,"path":23989,"seo":23990,"stem":23991,"__hash__":23992},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":23971,"toc":23986},[23972,23975,23978,23983],[10,23973,23969],{"id":23974},"_2马尔可夫决策过程",[14,23976,23977],{},"这是强化学习的基本框架",[14,23979,23980],{},[1445,23981],{"alt":18,"src":23982},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[14,23984,23985],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":18,"searchDepth":19,"depth":19,"links":23987},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":23969,"description":23977},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":23994,"title":23995,"body":23996,"description":18,"extension":21,"meta":24112,"navigation":23,"path":24113,"seo":24114,"stem":24115,"__hash__":24116},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":23997,"toc":24107},[23998,24001,24005,24008,24013,24018,24021,24026,24029,24034,24037,24041,24046,24049,24054,24059,24064,24067,24071,24076,24079,24084,24089,24094,24099,24102],[10,23999,23995],{"id":24000},"_3动作价值函数",[38,24002,24004],{"id":24003},"_31dqn","3.1.DQN",[14,24006,24007],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[14,24009,24010],{},[1445,24011],{"alt":18,"src":24012},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[14,24014,24015],{},[1445,24016],{"alt":18,"src":24017},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[14,24019,24020],{},"DQN算法的描述：",[14,24022,24023],{},[1445,24024],{"alt":18,"src":24025},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[14,24027,24028],{},"这里的Dense指的是全连接层",[14,24030,24031],{},[1445,24032],{"alt":18,"src":24033},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[14,24035,24036],{},"当前观测的状态为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算法",[38,24038,24040],{"id":24039},"_32dqn的举例","3.2.DQN的举例",[14,24042,24043],{},[1445,24044],{"alt":18,"src":24045},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[14,24047,24048],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[14,24050,24051],{},[1445,24052],{"alt":18,"src":24053},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[14,24055,24056],{},[1445,24057],{"alt":18,"src":24058},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[14,24060,24061],{},[1445,24062],{"alt":18,"src":24063},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[14,24065,24066],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[38,24068,24070],{"id":24069},"_33td算法","3.3.TD算法",[14,24072,24073],{},[1445,24074],{"alt":18,"src":24075},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[14,24077,24078],{},"强化学习TD算法公式的粗略解释：",[14,24080,24081],{},[1445,24082],{"alt":18,"src":24083},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[14,24085,24086],{},[1445,24087],{"alt":18,"src":24088},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[14,24090,24091],{},[1445,24092],{"alt":18,"src":24093},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[14,24095,24096],{},[1445,24097],{"alt":18,"src":24098},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[14,24100,24101],{},"TD算法总结：",[14,24103,24104],{},[1445,24105],{"alt":18,"src":24106},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":18,"searchDepth":19,"depth":19,"links":24108},[24109,24110,24111],{"id":24003,"depth":19,"text":24004},{"id":24039,"depth":19,"text":24040},{"id":24069,"depth":19,"text":24070},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":23995,"description":18},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24118,"title":24119,"body":24120,"description":18,"extension":21,"meta":24353,"navigation":23,"path":24354,"seo":24355,"stem":24356,"__hash__":24357},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24121,"toc":24349},[24122,24125,24129,24132,24135,24140,24145,24148,24153,24158,24161,24166,24169,24174,24177,24182,24185,24190,24193,24198,24203,24206,24211,24214,24217,24222,24225,24230,24235,24239,24242,24245,24250,24255,24258,24263,24268,24271,24276,24279,24282,24287,24290,24295,24298,24303,24308,24311,24316,24321,24324,24329,24332,24337,24340],[10,24123,24119],{"id":24124},"_4策略学习",[38,24126,24128],{"id":24127},"_41概念描述","4.1.概念描述",[14,24130,24131],{},"用神经网络（策略网络）近似策略函数",[14,24133,24134],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[14,24136,24137],{},[1445,24138],{"alt":18,"src":24139},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[14,24141,24142],{},[1445,24143],{"alt":18,"src":24144},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[14,24146,24147],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[14,24149,24150],{},[1445,24151],{"alt":18,"src":24152},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[14,24154,24155],{},[1445,24156],{"alt":18,"src":24157},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[14,24159,24160],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[14,24162,24163],{},[1445,24164],{"alt":18,"src":24165},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[14,24167,24168],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[14,24170,24171],{},[1445,24172],{"alt":18,"src":24173},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[14,24175,24176],{},"改进theta要用到策略梯度算法",[14,24178,24179],{},[1445,24180],{"alt":18,"src":24181},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[14,24183,24184],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[14,24186,24187],{},[1445,24188],{"alt":18,"src":24189},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[14,24191,24192],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[14,24194,24195],{},[1445,24196],{"alt":18,"src":24197},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[14,24199,24200],{},[1445,24201],{"alt":18,"src":24202},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[14,24204,24205],{},"梯度公式总结：",[14,24207,24208],{},[1445,24209],{"alt":18,"src":24210},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[14,24212,24213],{},"两个公式的分别应用场景：",[14,24215,24216],{},"对于离散的动作：",[14,24218,24219],{},[1445,24220],{"alt":18,"src":24221},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[14,24223,24224],{},"对于连续的动作：",[14,24226,24227],{},[1445,24228],{"alt":18,"src":24229},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[14,24231,24232],{},[1445,24233],{"alt":18,"src":24234},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[38,24236,24238],{"id":24237},"_42概率梯度算法总结","4.2.概率梯度算法总结",[14,24240,24241],{},"使用蒙特卡洛来近似计算策略梯度",[14,24243,24244],{},"蒙特卡洛法的解释如下：",[14,24246,24247],{},[1445,24248],{"alt":18,"src":24249},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[14,24251,24252],{},[1445,24253],{"alt":18,"src":24254},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[14,24256,24257],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[50,24259,24260],{},[53,24261,24262],{},"方法一：reinforce算法",[14,24264,24265],{},[1445,24266],{"alt":18,"src":24267},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[14,24269,24270],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[50,24272,24273],{"start":19},[53,24274,24275],{},"方法二：actor-critic算法",[14,24277,24278],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[14,24280,24281],{},"两个网络的构建：",[14,24283,24284],{},[1445,24285],{"alt":18,"src":24286},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[14,24288,24289],{},"actor网路：",[14,24291,24292],{},[1445,24293],{"alt":18,"src":24294},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[14,24296,24297],{},"critic网络",[14,24299,24300],{},[1445,24301],{"alt":18,"src":24302},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[50,24304,24305],{"start":1162},[53,24306,24307],{},"网络的训练",[14,24309,24310],{},"网络描述",[14,24312,24313],{},[1445,24314],{"alt":18,"src":24315},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[14,24317,24318],{},[1445,24319],{"alt":18,"src":24320},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[14,24322,24323],{},"TD算法更新梯度：",[14,24325,24326],{},[1445,24327],{"alt":18,"src":24328},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[14,24330,24331],{},"策略网络更新梯度：",[14,24333,24334],{},[1445,24335],{"alt":18,"src":24336},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[14,24338,24339],{},"训练整个流程的具体描述：",[14,24341,24342,24345,24346],{},[1445,24343],{"alt":18,"src":24344},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[1445,24347],{"alt":18,"src":24348},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":18,"searchDepth":19,"depth":19,"links":24350},[24351,24352],{"id":24127,"depth":19,"text":24128},{"id":24237,"depth":19,"text":24238},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24119,"description":18},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24359,"title":24360,"body":24361,"description":24368,"extension":21,"meta":24418,"navigation":23,"path":24419,"seo":24420,"stem":24421,"__hash__":24422},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24362,"toc":24414},[24363,24366,24369,24373,24376,24381,24385,24388,24393,24396,24401,24406,24409],[10,24364,24360],{"id":24365},"_5alphago算法",[14,24367,24368],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[38,24370,24372],{"id":24371},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[14,24374,24375],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[14,24377,24378],{},[1445,24379],{"alt":18,"src":24380},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[38,24382,24384],{"id":24383},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[14,24386,24387],{},"采用强化学习的方式训练策略网络",[14,24389,24390],{},[1445,24391],{"alt":18,"src":24392},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[14,24394,24395],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[14,24397,24398],{},[1445,24399],{"alt":18,"src":24400},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[14,24402,24403],{},[1445,24404],{"alt":18,"src":24405},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[14,24407,24408],{},"强化学习训练策略网络的总结：",[14,24410,24411],{},[1445,24412],{"alt":18,"src":24413},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":18,"searchDepth":19,"depth":19,"links":24415},[24416,24417],{"id":24371,"depth":19,"text":24372},{"id":24383,"depth":19,"text":24384},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24360,"description":24368},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":4,"title":5,"body":24424,"description":16,"extension":21,"meta":24432,"navigation":23,"path":24,"seo":24433,"stem":26,"__hash__":27},{"type":7,"value":24425,"toc":24430},[24426,24428],[10,24427,5],{"id":12},[14,24429,16],{},{"title":18,"searchDepth":19,"depth":19,"links":24431},[],{},{"title":5,"description":16},{"id":24435,"title":24436,"body":24437,"description":24441,"extension":21,"meta":24442,"navigation":23,"path":24443,"seo":24444,"stem":24445,"__hash__":24446},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24438,"toc":24439},[],{"title":18,"searchDepth":19,"depth":19,"links":24440},[],"记录自己的强化学习笔记。",{"category":23363},"\u002Fwiki\u002F2025-12-04",{"title":24436,"description":24441},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24448,"title":24449,"body":24450,"description":23361,"extension":21,"meta":24489,"navigation":23,"path":24490,"seo":24491,"stem":24492,"__hash__":24493},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24451,"toc":24487},[24452,24455,24458,24464,24467,24473,24476,24481,24484],[10,24453,24449],{"id":24454},"_1-项目概览与官方资源",[14,24456,24457],{},"官方文档：",[14,24459,24460],{},[345,24461,24462],{"href":24462,"rel":24463},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[23850],[14,24465,24466],{},"官方代码仓库：",[14,24468,24469],{},[345,24470,24471],{"href":24471,"rel":24472},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[23850],[14,24474,24475],{},"复现大体流程：",[14,24477,24478],{},[1445,24479],{"alt":18,"src":24480},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[14,24482,24483],{},"本教程的目标是打通这条链路：",[14,24485,24486],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":18,"searchDepth":19,"depth":19,"links":24488},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24449,"description":23361},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24495,"title":24496,"body":24497,"description":23361,"extension":21,"meta":24613,"navigation":23,"path":24614,"seo":24615,"stem":24616,"__hash__":24617},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24498,"toc":24608},[24499,24502,24506,24509,24516,24520,24523,24532,24542,24546,24576,24579,24605],[10,24500,24496],{"id":24501},"_2-环境准备与设备连接",[38,24503,24505],{"id":24504},"_21-系统与环境","2.1 系统与环境",[14,24507,24508],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[14,24510,24511,24512,24515],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[93,24513,24514],{},"lerobot"," 依赖。",[38,24517,24519],{"id":24518},"_22-机械臂串口识别","2.2 机械臂串口识别",[14,24521,24522],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[87,24524,24526],{"className":23807,"code":24525,"language":23809,"meta":18,"style":18},"lerobot-find-out\n",[93,24527,24528],{"__ignoreMap":18},[96,24529,24530],{"class":98,"line":99},[96,24531,24525],{"class":1946},[14,24533,24534,24535,319,24538,24541],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[93,24536,24537],{},"\u002Fdev\u002FttyACM0",[93,24539,24540],{},"\u002Fdev\u002FttyACM1","）。",[38,24543,24545],{"id":24544},"_23-串口授权","2.3 串口授权",[87,24547,24549],{"className":23807,"code":24548,"language":23809,"meta":18,"style":18},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[93,24550,24551,24565],{"__ignoreMap":18},[96,24552,24553,24556,24559,24562],{"class":98,"line":99},[96,24554,24555],{"class":1946},"sudo",[96,24557,24558],{"class":211}," chmod",[96,24560,24561],{"class":155}," 666",[96,24563,24564],{"class":211}," \u002Fdev\u002FttyACM0\n",[96,24566,24567,24569,24571,24573],{"class":98,"line":19},[96,24568,24555],{"class":1946},[96,24570,24558],{"class":211},[96,24572,24561],{"class":155},[96,24574,24575],{"class":211}," \u002Fdev\u002FttyACM1\n",[14,24577,24578],{},"说明：",[1114,24580,24581,24586,24592,24602],{},[53,24582,24583,24585],{},[93,24584,24555],{},"：以 root 权限执行命令。",[53,24587,24588,24591],{},[93,24589,24590],{},"chmod","：修改设备节点权限。",[53,24593,24594,24597,24598,24601],{},[93,24595,24596],{},"666","：",[93,24599,24600],{},"rw-rw-rw-","，所有用户可读写。",[53,24603,24604],{},"串口号必须替换为你机器上的真实端口。",[5110,24606,24607],{},"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":18,"searchDepth":19,"depth":19,"links":24609},[24610,24611,24612],{"id":24504,"depth":19,"text":24505},{"id":24518,"depth":19,"text":24519},{"id":24544,"depth":19,"text":24545},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24496,"description":23361},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24619,"title":24620,"body":24621,"description":23361,"extension":21,"meta":24782,"navigation":23,"path":24783,"seo":24784,"stem":24785,"__hash__":24786},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24622,"toc":24778},[24623,24627,24631,24637,24640,24697,24700,24704,24707,24775],[10,24624,24626],{"id":24625},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[38,24628,24630],{"id":24629},"_31-配置电机-id","3.1 配置电机 ID",[14,24632,24633,24634,24636],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[93,24635,324],{},"，需要改成机械臂链路里不冲突的编号。",[14,24638,24639],{},"方式一：用 LeRobot 命令逐步写入。",[87,24641,24643],{"className":23807,"code":24642,"language":23809,"meta":18,"style":18},"# 主臂舵机配置 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",[93,24644,24645,24650,24658,24665,24670,24674,24679,24685,24692],{"__ignoreMap":18},[96,24646,24647],{"class":98,"line":99},[96,24648,24649],{"class":165},"# 主臂舵机配置 ID\n",[96,24651,24652,24655],{"class":98,"line":19},[96,24653,24654],{"class":1946},"lerobot-setup-motors",[96,24656,24657],{"class":155}," \\\n",[96,24659,24660,24663],{"class":98,"line":1162},[96,24661,24662],{"class":155},"  --teleop.type=so101_leader",[96,24664,24657],{"class":155},[96,24666,24667],{"class":98,"line":1177},[96,24668,24669],{"class":155},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[96,24671,24672],{"class":98,"line":1183},[96,24673,2383],{"emptyLinePlaceholder":23},[96,24675,24676],{"class":98,"line":1197},[96,24677,24678],{"class":165},"# 从臂舵机配置 ID\n",[96,24680,24681,24683],{"class":98,"line":1203},[96,24682,24654],{"class":1946},[96,24684,24657],{"class":155},[96,24686,24687,24690],{"class":98,"line":1294},[96,24688,24689],{"class":155},"  --robot.type=so101_follower",[96,24691,24657],{"class":155},[96,24693,24694],{"class":98,"line":1300},[96,24695,24696],{"class":155},"  --robot.port=\u002Fdev\u002FttyACM1\n",[14,24698,24699],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[38,24701,24703],{"id":24702},"_32-机械臂校准","3.2 机械臂校准",[14,24705,24706],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[87,24708,24710],{"className":23807,"code":24709,"language":23809,"meta":18,"style":18},"# 主臂校准\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",[93,24711,24712,24717,24724,24730,24737,24742,24746,24751,24757,24763,24770],{"__ignoreMap":18},[96,24713,24714],{"class":98,"line":99},[96,24715,24716],{"class":165},"# 主臂校准\n",[96,24718,24719,24722],{"class":98,"line":19},[96,24720,24721],{"class":1946},"lerobot-calibrate",[96,24723,24657],{"class":155},[96,24725,24726,24728],{"class":98,"line":1162},[96,24727,24662],{"class":155},[96,24729,24657],{"class":155},[96,24731,24732,24735],{"class":98,"line":1177},[96,24733,24734],{"class":155},"  --teleop.port=\u002Fdev\u002FttyACM0",[96,24736,24657],{"class":155},[96,24738,24739],{"class":98,"line":1183},[96,24740,24741],{"class":155},"  --teleop.id=my_awesome_leader_arm\n",[96,24743,24744],{"class":98,"line":1197},[96,24745,2383],{"emptyLinePlaceholder":23},[96,24747,24748],{"class":98,"line":1203},[96,24749,24750],{"class":165},"# 从臂校准\n",[96,24752,24753,24755],{"class":98,"line":1294},[96,24754,24721],{"class":1946},[96,24756,24657],{"class":155},[96,24758,24759,24761],{"class":98,"line":1300},[96,24760,24689],{"class":155},[96,24762,24657],{"class":155},[96,24764,24765,24768],{"class":98,"line":1312},[96,24766,24767],{"class":155},"  --robot.port=\u002Fdev\u002FttyACM1",[96,24769,24657],{"class":155},[96,24771,24772],{"class":98,"line":1595},[96,24773,24774],{"class":155},"  --robot.id=my_awesome_follower_arm\n",[5110,24776,24777],{},"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":18,"searchDepth":19,"depth":19,"links":24779},[24780,24781],{"id":24629,"depth":19,"text":24630},{"id":24702,"depth":19,"text":24703},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24620,"description":23361},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24788,"title":24789,"body":24790,"description":23361,"extension":21,"meta":24981,"navigation":23,"path":24982,"seo":24983,"stem":24984,"__hash__":24985},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24791,"toc":24977},[24792,24795,24799,24846,24850,24863,24926,24929,24974],[10,24793,24789],{"id":24794},"_4-遥操与相机接入",[38,24796,24798],{"id":24797},"_41-不带相机遥操","4.1 不带相机遥操",[87,24800,24802],{"className":23807,"code":24801,"language":23809,"meta":18,"style":18},"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",[93,24803,24804,24811,24817,24823,24830,24836,24842],{"__ignoreMap":18},[96,24805,24806,24809],{"class":98,"line":99},[96,24807,24808],{"class":1946},"lerobot-teleoperate",[96,24810,24657],{"class":155},[96,24812,24813,24815],{"class":98,"line":19},[96,24814,24689],{"class":155},[96,24816,24657],{"class":155},[96,24818,24819,24821],{"class":98,"line":1162},[96,24820,24767],{"class":155},[96,24822,24657],{"class":155},[96,24824,24825,24828],{"class":98,"line":1177},[96,24826,24827],{"class":155},"  --robot.id=my_awesome_follower_arm",[96,24829,24657],{"class":155},[96,24831,24832,24834],{"class":98,"line":1183},[96,24833,24662],{"class":155},[96,24835,24657],{"class":155},[96,24837,24838,24840],{"class":98,"line":1197},[96,24839,24734],{"class":155},[96,24841,24657],{"class":155},[96,24843,24844],{"class":98,"line":1203},[96,24845,24741],{"class":155},[38,24847,24849],{"id":24848},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[87,24851,24853],{"className":23807,"code":24852,"language":23809,"meta":18,"style":18},"lerobot-find-cameras opencv\n",[93,24854,24855],{"__ignoreMap":18},[96,24856,24857,24860],{"class":98,"line":99},[96,24858,24859],{"class":1946},"lerobot-find-cameras",[96,24861,24862],{"class":211}," opencv\n",[87,24864,24866],{"className":23807,"code":24865,"language":23809,"meta":18,"style":18},"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",[93,24867,24868,24874,24880,24886,24892,24902,24908,24914,24921],{"__ignoreMap":18},[96,24869,24870,24872],{"class":98,"line":99},[96,24871,24808],{"class":1946},[96,24873,24657],{"class":155},[96,24875,24876,24878],{"class":98,"line":19},[96,24877,24689],{"class":155},[96,24879,24657],{"class":155},[96,24881,24882,24884],{"class":98,"line":1162},[96,24883,24767],{"class":155},[96,24885,24657],{"class":155},[96,24887,24888,24890],{"class":98,"line":1177},[96,24889,24827],{"class":155},[96,24891,24657],{"class":155},[96,24893,24894,24897,24900],{"class":98,"line":1183},[96,24895,24896],{"class":155},"  --robot.cameras=",[96,24898,24899],{"class":211},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[96,24901,24657],{"class":155},[96,24903,24904,24906],{"class":98,"line":1197},[96,24905,24662],{"class":155},[96,24907,24657],{"class":155},[96,24909,24910,24912],{"class":98,"line":1203},[96,24911,24734],{"class":155},[96,24913,24657],{"class":155},[96,24915,24916,24919],{"class":98,"line":1294},[96,24917,24918],{"class":155},"  --teleop.id=my_awesome_leader_arm",[96,24920,24657],{"class":155},[96,24922,24923],{"class":98,"line":1300},[96,24924,24925],{"class":155},"  --display_data=true\n",[14,24927,24928],{},"相机参数说明：",[1114,24930,24931,24937,24943,24952,24962,24968],{},[53,24932,24933,24936],{},[93,24934,24935],{},"front","：相机名称。",[53,24938,24939,24942],{},[93,24940,24941],{},"type: opencv","：相机驱动类型。",[53,24944,24945,24948,24949,24541],{},[93,24946,24947],{},"index_or_path","：设备编号或设备路径（如 ",[93,24950,24951],{},"\u002Fdev\u002Fvideo4",[53,24953,24954,24957,24958,24961],{},[93,24955,24956],{},"width"," \u002F ",[93,24959,24960],{},"height","：图像分辨率。",[53,24963,24964,24967],{},[93,24965,24966],{},"fps","：采样帧率。",[53,24969,24970,24973],{},[93,24971,24972],{},"--display_data=true","：启用实时可视化。",[5110,24975,24976],{},"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":18,"searchDepth":19,"depth":19,"links":24978},[24979,24980],{"id":24797,"depth":19,"text":24798},{"id":24848,"depth":19,"text":24849},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24789,"description":23361},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":24987,"title":24988,"body":24989,"description":23361,"extension":21,"meta":25161,"navigation":23,"path":25162,"seo":25163,"stem":25164,"__hash__":25165},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":24990,"toc":25156},[24991,24995,24999,25004,25009,25012,25054,25060,25064,25113,25118,25122,25125,25133,25138,25143,25148,25153],[10,24992,24994],{"id":24993},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[38,24996,24998],{"id":24997},"_51-生成访问令牌","5.1 生成访问令牌",[14,25000,25001],{},[1445,25002],{"alt":18,"src":25003},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[14,25005,25006],{},[1445,25007],{"alt":18,"src":25008},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[14,25010,25011],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[87,25013,25015],{"className":23807,"code":25014,"language":23809,"meta":18,"style":18},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[93,25016,25017,25030],{"__ignoreMap":18},[96,25018,25019,25022,25025,25027],{"class":98,"line":99},[96,25020,25021],{"class":102},"export",[96,25023,25024],{"class":106}," HF_TOKEN",[96,25026,152],{"class":102},[96,25028,25029],{"class":211},"\"your_huggingface_token\"\n",[96,25031,25032,25035,25038,25041,25044,25046,25049,25051],{"class":98,"line":19},[96,25033,25034],{"class":1946},"hf",[96,25036,25037],{"class":211}," auth",[96,25039,25040],{"class":211}," login",[96,25042,25043],{"class":155}," --token",[96,25045,9708],{"class":211},[96,25047,25048],{"class":106},"$HF_TOKEN",[96,25050,358],{"class":211},[96,25052,25053],{"class":155}," --add-to-git-credential\n",[14,25055,25056,25059],{},[93,25057,25058],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[38,25061,25063],{"id":25062},"_52-验证登录","5.2 验证登录",[87,25065,25067],{"className":23807,"code":25066,"language":23809,"meta":18,"style":18},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[93,25068,25069,25100],{"__ignoreMap":18},[96,25070,25071,25074,25076,25079,25081,25083,25086,25089,25092,25095,25098],{"class":98,"line":99},[96,25072,25073],{"class":106},"HF_USER",[96,25075,152],{"class":102},[96,25077,25078],{"class":106},"$(",[96,25080,25034],{"class":1946},[96,25082,25037],{"class":211},[96,25084,25085],{"class":211}," whoami",[96,25087,25088],{"class":102}," |",[96,25090,25091],{"class":1946}," head",[96,25093,25094],{"class":155}," -n",[96,25096,25097],{"class":155}," 1",[96,25099,113],{"class":106},[96,25101,25102,25105,25107,25110],{"class":98,"line":19},[96,25103,25104],{"class":155},"echo",[96,25106,9708],{"class":211},[96,25108,25109],{"class":106},"$HF_USER",[96,25111,25112],{"class":211},"\"\n",[14,25114,25115],{},[1445,25116],{"alt":18,"src":25117},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[38,25119,25121],{"id":25120},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[14,25123,25124],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1114,25126,25127,25130],{},[53,25128,25129],{},"Dataset Repo（用于上传演示数据）",[53,25131,25132],{},"Model Repo（用于上传训练后的 ACT 权重）",[14,25134,25135],{},[1445,25136],{"alt":18,"src":25137},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[14,25139,25140],{},[1445,25141],{"alt":18,"src":25142},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[14,25144,25145],{},[1445,25146],{"alt":18,"src":25147},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[14,25149,25150],{},[1445,25151],{"alt":18,"src":25152},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[5110,25154,25155],{},"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":18,"searchDepth":19,"depth":19,"links":25157},[25158,25159,25160],{"id":24997,"depth":19,"text":24998},{"id":25062,"depth":19,"text":25063},{"id":25120,"depth":19,"text":25121},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":24988,"description":23361},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25167,"title":25168,"body":25169,"description":23361,"extension":21,"meta":25366,"navigation":23,"path":25367,"seo":25368,"stem":25369,"__hash__":25370},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25170,"toc":25361},[25171,25175,25179,25275,25283,25288,25292,25308,25311,25315,25358],[10,25172,25174],{"id":25173},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[38,25176,25178],{"id":25177},"_61-录制示教数据","6.1 录制示教数据",[87,25180,25182],{"className":23807,"code":25181,"language":23809,"meta":18,"style":18},"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",[93,25183,25184,25191,25197,25203,25209,25218,25224,25230,25236,25243,25253,25260,25270],{"__ignoreMap":18},[96,25185,25186,25189],{"class":98,"line":99},[96,25187,25188],{"class":1946},"lerobot-record",[96,25190,24657],{"class":155},[96,25192,25193,25195],{"class":98,"line":19},[96,25194,24689],{"class":155},[96,25196,24657],{"class":155},[96,25198,25199,25201],{"class":98,"line":1162},[96,25200,24767],{"class":155},[96,25202,24657],{"class":155},[96,25204,25205,25207],{"class":98,"line":1177},[96,25206,24827],{"class":155},[96,25208,24657],{"class":155},[96,25210,25211,25213,25216],{"class":98,"line":1183},[96,25212,24896],{"class":155},[96,25214,25215],{"class":211},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[96,25217,24657],{"class":155},[96,25219,25220,25222],{"class":98,"line":1197},[96,25221,24662],{"class":155},[96,25223,24657],{"class":155},[96,25225,25226,25228],{"class":98,"line":1203},[96,25227,24734],{"class":155},[96,25229,24657],{"class":155},[96,25231,25232,25234],{"class":98,"line":1294},[96,25233,24918],{"class":155},[96,25235,24657],{"class":155},[96,25237,25238,25241],{"class":98,"line":1300},[96,25239,25240],{"class":155},"  --display_data=true",[96,25242,24657],{"class":155},[96,25244,25245,25248,25251],{"class":98,"line":1312},[96,25246,25247],{"class":155},"  --dataset.repo_id=",[96,25249,25250],{"class":211},"\"Embodied-AI-6\u002Fso101_test\"",[96,25252,24657],{"class":155},[96,25254,25255,25258],{"class":98,"line":1595},[96,25256,25257],{"class":155},"  --dataset.num_episodes=10",[96,25259,24657],{"class":155},[96,25261,25262,25265,25268],{"class":98,"line":1600},[96,25263,25264],{"class":155},"  --dataset.single_task=",[96,25266,25267],{"class":211},"\"Grab the green cube\"",[96,25269,24657],{"class":155},[96,25271,25272],{"class":98,"line":1606},[96,25273,25274],{"class":155},"  --resume=true\n",[1114,25276,25277],{},[53,25278,25279,25282],{},[93,25280,25281],{},"--resume=true","：已有同一数据集时继续追加 episode。",[14,25284,25285],{},[1445,25286],{"alt":18,"src":25287},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[38,25289,25291],{"id":25290},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[87,25293,25295],{"className":23807,"code":25294,"language":23809,"meta":18,"style":18},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[93,25296,25297],{"__ignoreMap":18},[96,25298,25299,25302,25305],{"class":98,"line":99},[96,25300,25301],{"class":1946},"rm",[96,25303,25304],{"class":155}," -rf",[96,25306,25307],{"class":211}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[14,25309,25310],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[38,25312,25314],{"id":25313},"_63-回放指定-episode","6.3 回放指定 episode",[87,25316,25318],{"className":23807,"code":25317,"language":23809,"meta":18,"style":18},"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",[93,25319,25320,25327,25333,25339,25345,25353],{"__ignoreMap":18},[96,25321,25322,25325],{"class":98,"line":99},[96,25323,25324],{"class":1946},"lerobot-replay",[96,25326,24657],{"class":155},[96,25328,25329,25331],{"class":98,"line":19},[96,25330,24689],{"class":155},[96,25332,24657],{"class":155},[96,25334,25335,25337],{"class":98,"line":1162},[96,25336,24767],{"class":155},[96,25338,24657],{"class":155},[96,25340,25341,25343],{"class":98,"line":1177},[96,25342,24827],{"class":155},[96,25344,24657],{"class":155},[96,25346,25347,25349,25351],{"class":98,"line":1183},[96,25348,25247],{"class":155},[96,25350,25250],{"class":211},[96,25352,24657],{"class":155},[96,25354,25355],{"class":98,"line":1197},[96,25356,25357],{"class":155},"  --dataset.episode=0\n",[5110,25359,25360],{},"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":18,"searchDepth":19,"depth":19,"links":25362},[25363,25364,25365],{"id":25177,"depth":19,"text":25178},{"id":25290,"depth":19,"text":25291},{"id":25313,"depth":19,"text":25314},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25168,"description":23361},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25372,"title":25373,"body":25374,"description":23361,"extension":21,"meta":25502,"navigation":23,"path":25503,"seo":25504,"stem":25505,"__hash__":25506},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25375,"toc":25500},[25376,25380,25443,25446,25493,25498],[10,25377,25379],{"id":25378},"_7-act-模型训练","7. ACT 模型训练",[87,25381,25383],{"className":23807,"code":25382,"language":23809,"meta":18,"style":18},"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",[93,25384,25385,25392,25400,25407,25414,25421,25428,25435],{"__ignoreMap":18},[96,25386,25387,25390],{"class":98,"line":99},[96,25388,25389],{"class":1946},"lerobot-train",[96,25391,24657],{"class":155},[96,25393,25394,25396,25398],{"class":98,"line":19},[96,25395,25247],{"class":155},[96,25397,25250],{"class":211},[96,25399,24657],{"class":155},[96,25401,25402,25405],{"class":98,"line":1162},[96,25403,25404],{"class":155},"  --policy.type=act",[96,25406,24657],{"class":155},[96,25408,25409,25412],{"class":98,"line":1177},[96,25410,25411],{"class":155},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[96,25413,24657],{"class":155},[96,25415,25416,25419],{"class":98,"line":1183},[96,25417,25418],{"class":155},"  --job_name=act_so101_test",[96,25420,24657],{"class":155},[96,25422,25423,25426],{"class":98,"line":1197},[96,25424,25425],{"class":155},"  --policy.device=cuda",[96,25427,24657],{"class":155},[96,25429,25430,25433],{"class":98,"line":1203},[96,25431,25432],{"class":155},"  --wandb.enable=false",[96,25434,24657],{"class":155},[96,25436,25437,25440],{"class":98,"line":1294},[96,25438,25439],{"class":155},"  --policy.repo_id=",[96,25441,25442],{"class":211},"\"Embodied-AI-6\u002Flerobot_new\"\n",[14,25444,25445],{},"参数说明：",[1114,25447,25448,25454,25460,25466,25472,25481,25487],{},[53,25449,25450,25453],{},[93,25451,25452],{},"--dataset.repo_id","：训练数据集仓库。",[53,25455,25456,25459],{},[93,25457,25458],{},"--policy.type=act","：策略模型类型为 ACT。",[53,25461,25462,25465],{},[93,25463,25464],{},"--output_dir","：本地训练输出目录。",[53,25467,25468,25471],{},[93,25469,25470],{},"--job_name","：训练任务名称。",[53,25473,25474,25477,25478,24541],{},[93,25475,25476],{},"--policy.device","：训练设备（如 ",[93,25479,25480],{},"cuda",[53,25482,25483,25486],{},[93,25484,25485],{},"--wandb.enable","：是否启用 WandB 可视化。",[53,25488,25489,25492],{},[93,25490,25491],{},"--policy.repo_id","：训练后模型推送目标仓库。",[14,25494,25495],{},[1445,25496],{"alt":18,"src":25497},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[5110,25499,25360],{},{"title":18,"searchDepth":19,"depth":19,"links":25501},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25373,"description":23361},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25508,"title":25509,"body":25510,"description":23361,"extension":21,"meta":25597,"navigation":23,"path":25598,"seo":25599,"stem":25600,"__hash__":25601},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25511,"toc":25595},[25512,25515,25518,25585,25593],[10,25513,25509],{"id":25514},"_8-策略部署与自动采集",[14,25516,25517],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[87,25519,25521],{"className":23807,"code":25520,"language":23809,"meta":18,"style":18},"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",[93,25522,25523,25529,25535,25541,25549,25555,25562,25570,25578],{"__ignoreMap":18},[96,25524,25525,25527],{"class":98,"line":99},[96,25526,25188],{"class":1946},[96,25528,24657],{"class":155},[96,25530,25531,25533],{"class":98,"line":19},[96,25532,24689],{"class":155},[96,25534,24657],{"class":155},[96,25536,25537,25539],{"class":98,"line":1162},[96,25538,24767],{"class":155},[96,25540,24657],{"class":155},[96,25542,25543,25545,25547],{"class":98,"line":1177},[96,25544,24896],{"class":155},[96,25546,25215],{"class":211},[96,25548,24657],{"class":155},[96,25550,25551,25553],{"class":98,"line":1183},[96,25552,24827],{"class":155},[96,25554,24657],{"class":155},[96,25556,25557,25560],{"class":98,"line":1197},[96,25558,25559],{"class":155},"  --display_data=false",[96,25561,24657],{"class":155},[96,25563,25564,25566,25568],{"class":98,"line":1203},[96,25565,25247],{"class":155},[96,25567,25250],{"class":211},[96,25569,24657],{"class":155},[96,25571,25572,25574,25576],{"class":98,"line":1294},[96,25573,25264],{"class":155},[96,25575,25267],{"class":211},[96,25577,24657],{"class":155},[96,25579,25580,25583],{"class":98,"line":1300},[96,25581,25582],{"class":155},"  --policy.path=",[96,25584,25442],{"class":211},[1114,25586,25587],{},[53,25588,25589,25592],{},[93,25590,25591],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[5110,25594,25360],{},{"title":18,"searchDepth":19,"depth":19,"links":25596},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25509,"description":23361},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25603,"title":25604,"body":25605,"description":23361,"extension":21,"meta":25634,"navigation":23,"path":25635,"seo":25636,"stem":25637,"__hash__":25638},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25606,"toc":25632},[25607,25611,25614,25620,25623,25629],[10,25608,25610],{"id":25609},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[14,25612,25613],{},"项目地址：",[14,25615,25616],{},[345,25617,25618],{"href":25618,"rel":25619},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[23850],[14,25621,25622],{},"参考教程：",[14,25624,25625],{},[345,25626,25627],{"href":25627,"rel":25628},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[23850],[14,25630,25631],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":18,"searchDepth":19,"depth":19,"links":25633},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25604,"description":23361},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25640,"title":25641,"body":25642,"description":25646,"extension":21,"meta":25647,"navigation":23,"path":25648,"seo":25649,"stem":25650,"__hash__":25651},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25643,"toc":25644},[],{"title":18,"searchDepth":19,"depth":19,"links":25645},[],"act复现",{"category":23363},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25641,"description":25646},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25653,"title":25654,"body":25655,"description":18,"extension":21,"meta":25957,"navigation":23,"path":25958,"seo":25959,"stem":25960,"__hash__":25961},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25656,"toc":25949},[25657,25660,25664,25674,25681,25688,25691,25698,25701,25704,25708,25720,25724,25770,25773,25776,25779,25782,25785,25789,25827,25833,25837,25891,25896,25899,25902,25907,25910,25915,25918,25921,25925,25928,25931,25935],[10,25658,25654],{"id":25659},"_1简介",[67,25661,25663],{"id":25662},"_11什么是-docker","1.1什么是 Docker？",[14,25665,25666,25667,25670,25671],{},"Docker 是一个开源的 ",[256,25668,25669],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[256,25672,25673],{},"一次构建，到处运行。",[14,25675,25676,25677,25680],{},"“ ",[256,25678,25679],{},"一次构建，到处运行"," ”也就是说：",[50,25682,25683],{},[53,25684,25685],{},[256,25686,25687],{},"之前：",[14,25689,25690],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[50,25692,25693],{},[53,25694,25695],{},[256,25696,25697],{},"使用docker后：",[14,25699,25700],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[14,25702,25703],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[67,25705,25707],{"id":25706},"_12它是怎么工作的","1.2.它是怎么工作的？",[1114,25709,25710,25713],{},[53,25711,25712],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[53,25714,25715,25716,25719],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[256,25717,25718],{},"无论在哪运行都一样稳定"," 。",[67,25721,25723],{"id":25722},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[244,25725,25726,25736],{},[247,25727,25728],{},[250,25729,25730,25733],{},[253,25731,25732],{"align":23721},"概念",[253,25734,25735],{"align":23721},"解释",[291,25737,25738,25746,25754,25762],{},[250,25739,25740,25743],{},[296,25741,25742],{"align":23721},"镜像",[296,25744,25745],{"align":23721},"Image，运行容器的模板，像是一个应用快照",[250,25747,25748,25751],{},[296,25749,25750],{"align":23721},"容器",[296,25752,25753],{"align":23721},"Container，运行中的镜像实例，有自己的文件系统、网络等",[250,25755,25756,25759],{},[296,25757,25758],{"align":23721},"Dockerfile",[296,25760,25761],{"align":23721},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[250,25763,25764,25767],{},[296,25765,25766],{"align":23721},"仓库",[296,25768,25769],{"align":23721},"Registry，存放镜像的地方，比如 Docker Hub",[14,25771,25772],{},"抽象化理解:",[14,25774,25775],{},"Docker镜像≈C++类",[14,25777,25778],{},"Docker容器≈C++类实例(即对象)",[14,25780,25781],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[14,25783,25784],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[67,25786,25788],{"id":25787},"_14类比理解","1.4.类比理解",[244,25790,25791,25801],{},[247,25792,25793],{},[250,25794,25795,25798],{},[253,25796,25797],{"align":23721},"传统部署",[253,25799,25800],{"align":23721},"Docker部署",[291,25802,25803,25811,25819],{},[250,25804,25805,25808],{},[296,25806,25807],{"align":23721},"手动安装依赖、调试版本不一致问题",[296,25809,25810],{"align":23721},"一次打包环境和代码",[250,25812,25813,25816],{},[296,25814,25815],{"align":23721},"程序“裸奔”跑在系统上",[296,25817,25818],{"align":23721},"程序“穿着容器”隔离运行",[250,25820,25821,25824],{},[296,25822,25823],{"align":23721},"容易“在我电脑上能跑”",[296,25825,25826],{"align":23721},"保证“无论在哪都能跑”",[14,25828,25829,25830],{},"就像快递包裹： ",[256,25831,25832],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[67,25834,25836],{"id":25835},"_15docker-的核心优势","1.5.Docker 的核心优势",[244,25838,25839,25849],{},[247,25840,25841],{},[250,25842,25843,25846],{},[253,25844,25845],{"align":23721},"优势",[253,25847,25848],{"align":23721},"说明",[291,25850,25851,25859,25867,25875,25883],{},[250,25852,25853,25856],{},[296,25854,25855],{"align":23721},"轻量级",[296,25857,25858],{"align":23721},"基于系统内核共享，启动速度快，占资源少",[250,25860,25861,25864],{},[296,25862,25863],{"align":23721},"跨平台",[296,25865,25866],{"align":23721},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[250,25868,25869,25872],{},[296,25870,25871],{"align":23721},"易于迁移部署",[296,25873,25874],{"align":23721},"应用和环境一起封装，不怕依赖不一致",[250,25876,25877,25880],{},[296,25878,25879],{"align":23721},"易于版本控制",[296,25881,25882],{"align":23721},"镜像版本可控，支持回滚",[250,25884,25885,25888],{},[296,25886,25887],{"align":23721},"生态丰富",[296,25889,25890],{"align":23721},"Docker Hub 上有成千上万的现成镜像可用",[50,25892,25893],{},[53,25894,25895],{},"在Linux上可以几乎实现无性能损失。",[14,25897,25898],{},"docker里的发行版和本机共用Linux内核。",[14,25900,25901],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[50,25903,25904],{},[53,25905,25906],{},"可以快速部署在绝大多数Linux发行版",[14,25908,25909],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[50,25911,25912],{},[53,25913,25914],{},"配置环境简单",[14,25916,25917],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[14,25919,25920],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[50,25922,25923],{},[53,25924,25887],{},[14,25926,25927],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[14,25929,25930],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[67,25932,25934],{"id":25933},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1114,25936,25937,25940,25943,25946],{},[53,25938,25939],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[53,25941,25942],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[53,25944,25945],{},"微服务架构：每个服务一个容器，灵活组合",[53,25947,25948],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":18,"searchDepth":19,"depth":19,"links":25950},[25951,25952,25953,25954,25955,25956],{"id":25662,"depth":1162,"text":25663},{"id":25706,"depth":1162,"text":25707},{"id":25722,"depth":1162,"text":25723},{"id":25787,"depth":1162,"text":25788},{"id":25835,"depth":1162,"text":25836},{"id":25933,"depth":1162,"text":25934},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25654,"description":18},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":25963,"title":25964,"body":25965,"description":18,"extension":21,"meta":26698,"navigation":23,"path":26699,"seo":26700,"stem":26701,"__hash__":26702},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":25966,"toc":26693},[25967,25970,25974,25977,25980,25986,25992,25996,26005,26008,26065,26068,26119,26122,26205,26208,26245,26249,26260,26273,26280,26283,26363,26366,26416,26419,26442,26446,26453,26456,26472,26478,26481,26497,26503,26506,26522,26536,26542,26562,26568,26571,26583,26589,26592,26606,26612,26615,26635,26640,26643,26646,26650,26653,26656,26659,26666,26669,26672,26675,26680,26685,26690],[10,25968,25964],{"id":25969},"_2安装docker",[67,25971,25973],{"id":25972},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[14,25975,25976],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[14,25978,25979],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[14,25981,25982],{},[345,25983,25984],{"href":25984,"rel":25985},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[23850],[14,25987,25988],{},[345,25989,25990],{"href":25990,"rel":25991},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[23850],[21982,25993,25995],{"id":25994},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[14,25997,25998,25999,26004],{},"以下内容根据 ",[345,26000,26003],{"href":26001,"rel":26002},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[23850],"官方文档"," 修改而来。",[14,26006,26007],{},"如果你过去安装过 docker，先删掉：",[87,26009,26011],{"className":23807,"code":26010,"language":23809,"meta":18,"style":18},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[93,26012,26013],{"__ignoreMap":18},[96,26014,26015,26017,26020,26023,26026,26029,26032,26035,26038,26041,26044,26047,26050,26053,26056,26059,26062],{"class":98,"line":99},[96,26016,3008],{"class":102},[96,26018,26019],{"class":106}," pkg ",[96,26021,26022],{"class":102},"in",[96,26024,26025],{"class":211}," docker.io",[96,26027,26028],{"class":211}," docker-doc",[96,26030,26031],{"class":211}," docker-compose",[96,26033,26034],{"class":211}," docker-compose-v2",[96,26036,26037],{"class":211}," podman-docker",[96,26039,26040],{"class":211}," containerd",[96,26042,26043],{"class":211}," runc",[96,26045,26046],{"class":106},"; ",[96,26048,26049],{"class":102},"do",[96,26051,26052],{"class":1946}," sudo",[96,26054,26055],{"class":211}," apt-get",[96,26057,26058],{"class":211}," remove",[96,26060,26061],{"class":106}," $pkg; ",[96,26063,26064],{"class":102},"done\n",[14,26066,26067],{},"首先安装依赖和GPG：",[87,26069,26073],{"className":26070,"code":26071,"language":26072,"meta":18,"style":18},"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",[93,26074,26075,26080,26085,26090,26095,26100,26105,26109,26114],{"__ignoreMap":18},[96,26076,26077],{"class":98,"line":99},[96,26078,26079],{},"# Add Docker's official GPG key:\n",[96,26081,26082],{"class":98,"line":19},[96,26083,26084],{},"sudo apt-get update\n",[96,26086,26087],{"class":98,"line":1162},[96,26088,26089],{},"sudo apt-get install ca-certificates curl\n",[96,26091,26092],{"class":98,"line":1177},[96,26093,26094],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[96,26096,26097],{"class":98,"line":1183},[96,26098,26099],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[96,26101,26102],{"class":98,"line":1197},[96,26103,26104],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[96,26106,26107],{"class":98,"line":1203},[96,26108,2383],{"emptyLinePlaceholder":23},[96,26110,26111],{"class":98,"line":1294},[96,26112,26113],{},"# 如果上面这行报错就弄下面这行\n",[96,26115,26116],{"class":98,"line":1300},[96,26117,26118],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[14,26120,26121],{},"信任 Docker 的 GPG 公钥并添加仓库：",[87,26123,26125],{"className":23807,"code":26124,"language":23809,"meta":18,"style":18},"# 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",[93,26126,26127,26132,26138,26155,26188],{"__ignoreMap":18},[96,26128,26129],{"class":98,"line":99},[96,26130,26131],{"class":165},"# Add the repository to Apt sources:\n",[96,26133,26134,26136],{"class":98,"line":19},[96,26135,25104],{"class":155},[96,26137,24657],{"class":155},[96,26139,26140,26143,26146,26149,26152],{"class":98,"line":1162},[96,26141,26142],{"class":211},"  \"deb [arch=$(",[96,26144,26145],{"class":1946},"dpkg",[96,26147,26148],{"class":155}," --print-architecture",[96,26150,26151],{"class":211},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[96,26153,26154],{"class":155},"\\\n",[96,26156,26157,26160,26162,26164,26167,26170,26172,26174,26177,26179,26181,26184,26186],{"class":98,"line":1177},[96,26158,26159],{"class":211},"  \"",[96,26161,25078],{"class":106},[96,26163,665],{"class":155},[96,26165,26166],{"class":211}," \u002Fetc\u002Fos-release",[96,26168,26169],{"class":106}," && ",[96,26171,25104],{"class":155},[96,26173,9708],{"class":211},[96,26175,26176],{"class":106},"$VERSION_CODENAME",[96,26178,358],{"class":211},[96,26180,536],{"class":106},[96,26182,26183],{"class":211},"\" stable\"",[96,26185,25088],{"class":102},[96,26187,24657],{"class":155},[96,26189,26190,26193,26196,26199,26202],{"class":98,"line":1183},[96,26191,26192],{"class":1946},"  sudo",[96,26194,26195],{"class":211}," tee",[96,26197,26198],{"class":211}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[96,26200,26201],{"class":102}," >",[96,26203,26204],{"class":211}," \u002Fdev\u002Fnull\n",[14,26206,26207],{},"最后安装",[87,26209,26211],{"className":23807,"code":26210,"language":23809,"meta":18,"style":18},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[93,26212,26213,26222],{"__ignoreMap":18},[96,26214,26215,26217,26219],{"class":98,"line":99},[96,26216,24555],{"class":1946},[96,26218,26055],{"class":211},[96,26220,26221],{"class":211}," update\n",[96,26223,26224,26226,26228,26230,26233,26236,26239,26242],{"class":98,"line":19},[96,26225,24555],{"class":1946},[96,26227,26055],{"class":211},[96,26229,23819],{"class":211},[96,26231,26232],{"class":211}," docker-ce",[96,26234,26235],{"class":211}," docker-ce-cli",[96,26237,26238],{"class":211}," containerd.io",[96,26240,26241],{"class":211}," docker-buildx-plugin",[96,26243,26244],{"class":211}," docker-compose-plugin\n",[21982,26246,26248],{"id":26247},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[14,26250,26251,26252,26255,26256,26259],{},"查看自己自己包管理工具版本（dnf是 ",[256,26253,26254],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[256,26257,26258],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[87,26261,26263],{"className":23807,"code":26262,"language":23809,"meta":18,"style":18},"dnf --version\n",[93,26264,26265],{"__ignoreMap":18},[96,26266,26267,26270],{"class":98,"line":99},[96,26268,26269],{"class":1946},"dnf",[96,26271,26272],{"class":155}," --version\n",[14,26274,25998,26275,26279],{},[345,26276,26003],{"href":26277,"rel":26278},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[23850]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[14,26281,26282],{},"如果你之前安装过 docker，请先删掉",[87,26284,26286],{"className":23807,"code":26285,"language":23809,"meta":18,"style":18},"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",[93,26287,26288,26302,26309,26316,26323,26330,26337,26344,26351,26358],{"__ignoreMap":18},[96,26289,26290,26292,26295,26297,26300],{"class":98,"line":99},[96,26291,24555],{"class":1946},[96,26293,26294],{"class":211}," dnf",[96,26296,26058],{"class":211},[96,26298,26299],{"class":211}," docker",[96,26301,24657],{"class":155},[96,26303,26304,26307],{"class":98,"line":19},[96,26305,26306],{"class":211},"                  docker-client",[96,26308,24657],{"class":155},[96,26310,26311,26314],{"class":98,"line":1162},[96,26312,26313],{"class":211},"                  docker-client-latest",[96,26315,24657],{"class":155},[96,26317,26318,26321],{"class":98,"line":1177},[96,26319,26320],{"class":211},"                  docker-common",[96,26322,24657],{"class":155},[96,26324,26325,26328],{"class":98,"line":1183},[96,26326,26327],{"class":211},"                  docker-latest",[96,26329,24657],{"class":155},[96,26331,26332,26335],{"class":98,"line":1197},[96,26333,26334],{"class":211},"                  docker-latest-logrotate",[96,26336,24657],{"class":155},[96,26338,26339,26342],{"class":98,"line":1203},[96,26340,26341],{"class":211},"                  docker-logrotate",[96,26343,24657],{"class":155},[96,26345,26346,26349],{"class":98,"line":1294},[96,26347,26348],{"class":211},"                  docker-selinux",[96,26350,24657],{"class":155},[96,26352,26353,26356],{"class":98,"line":1300},[96,26354,26355],{"class":211},"                  docker-engine-selinux",[96,26357,24657],{"class":155},[96,26359,26360],{"class":98,"line":1312},[96,26361,26362],{"class":211},"                  docker-engine\n",[14,26364,26365],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[87,26367,26369],{"className":23807,"code":26368,"language":23809,"meta":18,"style":18},"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",[93,26370,26371,26385,26400],{"__ignoreMap":18},[96,26372,26373,26375,26377,26380,26382],{"class":98,"line":99},[96,26374,24555],{"class":1946},[96,26376,26294],{"class":211},[96,26378,26379],{"class":155}," -y",[96,26381,23819],{"class":211},[96,26383,26384],{"class":211}," dnf-plugins-core\n",[96,26386,26387,26389,26391,26394,26397],{"class":98,"line":19},[96,26388,24555],{"class":1946},[96,26390,26294],{"class":211},[96,26392,26393],{"class":211}," config-manager",[96,26395,26396],{"class":211}," addrepo",[96,26398,26399],{"class":155}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[96,26401,26402,26404,26407,26410,26413],{"class":98,"line":1162},[96,26403,24555],{"class":1946},[96,26405,26406],{"class":211}," sed",[96,26408,26409],{"class":155}," -i",[96,26411,26412],{"class":211}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[96,26414,26415],{"class":211}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[14,26417,26418],{},"最后安装：",[87,26420,26422],{"className":23807,"code":26421,"language":23809,"meta":18,"style":18},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[93,26423,26424],{"__ignoreMap":18},[96,26425,26426,26428,26430,26432,26434,26436,26438,26440],{"class":98,"line":99},[96,26427,24555],{"class":1946},[96,26429,26294],{"class":211},[96,26431,23819],{"class":211},[96,26433,26232],{"class":211},[96,26435,26235],{"class":211},[96,26437,26238],{"class":211},[96,26439,26241],{"class":211},[96,26441,26244],{"class":211},[67,26443,26445],{"id":26444},"_22配置环境","2.2.配置环境",[21982,26447,26449,26452],{"id":26448},"_221检查-docker-服务状态",[256,26450,26451],{},"2.2.1.检查 Docker 服务状态"," ：",[14,26454,26455],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[87,26457,26459],{"className":23807,"code":26458,"language":23809,"meta":18,"style":18},"systemctl status docker\n",[93,26460,26461],{"__ignoreMap":18},[96,26462,26463,26466,26469],{"class":98,"line":99},[96,26464,26465],{"class":1946},"systemctl",[96,26467,26468],{"class":211}," status",[96,26470,26471],{"class":211}," docker\n",[21982,26473,26475,26452],{"id":26474},"_222启动-docker-服务",[256,26476,26477],{},"2.2.2.启动 Docker 服务",[14,26479,26480],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[87,26482,26484],{"className":23807,"code":26483,"language":23809,"meta":18,"style":18},"sudo systemctl start docker\n",[93,26485,26486],{"__ignoreMap":18},[96,26487,26488,26490,26493,26495],{"class":98,"line":99},[96,26489,24555],{"class":1946},[96,26491,26492],{"class":211}," systemctl",[96,26494,4167],{"class":211},[96,26496,26471],{"class":211},[21982,26498,26500,26452],{"id":26499},"_223设置-docker-开机自启",[256,26501,26502],{},"2.2.3.设置 Docker 开机自启",[14,26504,26505],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[87,26507,26509],{"className":23807,"code":26508,"language":23809,"meta":18,"style":18},"sudo systemctl enable docker\n",[93,26510,26511],{"__ignoreMap":18},[96,26512,26513,26515,26517,26520],{"class":98,"line":99},[96,26514,24555],{"class":1946},[96,26516,26492],{"class":211},[96,26518,26519],{"class":211}," enable",[96,26521,26471],{"class":211},[21982,26523,26525,13779,26528,13779,26533,26452],{"id":26524},"_224将用户添加到-docker-组",[256,26526,26527],{},"2.2.4.将用户添加到",[256,26529,26530],{},[93,26531,26532],{},"docker",[256,26534,26535],{},"组",[14,26537,26538,26539,26541],{},"使用以下命令将当前用户添加到 ",[93,26540,26532],{}," 组：",[87,26543,26545],{"className":23807,"code":26544,"language":23809,"meta":18,"style":18},"sudo usermod -aG docker $USER\n",[93,26546,26547],{"__ignoreMap":18},[96,26548,26549,26551,26554,26557,26559],{"class":98,"line":99},[96,26550,24555],{"class":1946},[96,26552,26553],{"class":211}," usermod",[96,26555,26556],{"class":155}," -aG",[96,26558,26299],{"class":211},[96,26560,26561],{"class":106}," $USER\n",[21982,26563,26565,26452],{"id":26564},"_225退出并重新登录",[256,26566,26567],{},"2.2.5.退出并重新登录",[14,26569,26570],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[87,26572,26574],{"className":23807,"code":26573,"language":23809,"meta":18,"style":18},"newgrp docker\n",[93,26575,26576],{"__ignoreMap":18},[96,26577,26578,26581],{"class":98,"line":99},[96,26579,26580],{"class":1946},"newgrp",[96,26582,26471],{"class":211},[21982,26584,26586,26452],{"id":26585},"_226重新启动-docker-服务如果需要",[256,26587,26588],{},"2.2.6.重新启动 Docker 服务（如果需要）",[14,26590,26591],{},"确保 Docker 服务正在运行，可以使用以下命令：",[87,26593,26594],{"className":23807,"code":26483,"language":23809,"meta":18,"style":18},[93,26595,26596],{"__ignoreMap":18},[96,26597,26598,26600,26602,26604],{"class":98,"line":99},[96,26599,24555],{"class":1946},[96,26601,26492],{"class":211},[96,26603,4167],{"class":211},[96,26605,26471],{"class":211},[21982,26607,26609,26452],{"id":26608},"_227重启电脑后检查-docker-服务状态",[256,26610,26611],{},"2.2.7.重启电脑后检查 Docker 服务状态",[14,26613,26614],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[87,26616,26618],{"className":23807,"code":26617,"language":23809,"meta":18,"style":18},"sudo reboot\nsystemctl status docker\n",[93,26619,26620,26627],{"__ignoreMap":18},[96,26621,26622,26624],{"class":98,"line":99},[96,26623,24555],{"class":1946},[96,26625,26626],{"class":211}," reboot\n",[96,26628,26629,26631,26633],{"class":98,"line":19},[96,26630,26465],{"class":1946},[96,26632,26468],{"class":211},[96,26634,26471],{"class":211},[14,26636,26637],{},[1445,26638],{"alt":18,"src":26639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[14,26641,26642],{},"第三行显示enabled说明开机自启动成功",[14,26644,26645],{},"按q退出",[67,26647,26649],{"id":26648},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[14,26651,26652],{},"优先使用linux来使用docker是比较好的",[14,26654,26655],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[14,26657,26658],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[14,26660,26661,26662],{},"官方下载安装:",[345,26663,26664],{"href":26664,"rel":26665},"https:\u002F\u002Fwww.docker.com\u002F",[23850],[14,26667,26668],{},"Windows的Docker显卡直通与USB直通:",[14,26670,26671],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[14,26673,26674],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[14,26676,26677],{},[1445,26678],{"alt":18,"src":26679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[14,26681,26682],{},[1445,26683],{"alt":18,"src":26684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[14,26686,26687],{},[1445,26688],{"alt":18,"src":26689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[5110,26691,26692],{},"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":18,"searchDepth":19,"depth":19,"links":26694},[26695,26696,26697],{"id":25972,"depth":1162,"text":25973},{"id":26444,"depth":1162,"text":26445},{"id":26648,"depth":1162,"text":26649},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":25964,"description":18},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26704,"title":26705,"body":26706,"description":26713,"extension":21,"meta":27406,"navigation":23,"path":27407,"seo":27408,"stem":27409,"__hash__":27410},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26707,"toc":27400},[26708,26711,26714,26718,26723,26728,26731,26759,26764,26773,26776,26781,26785,26792,26797,26803,26807,26810,26814,26819,26911,26916,26934,26939,26960,26965,26981,26985,26990,27019,27024,27070,27075,27119,27127,27144,27149,27165,27170,27184,27187,27190,27193,27196,27225,27228,27233,27237,27240,27243,27249,27252,27255,27258,27320,27327,27332,27335,27353,27357,27360,27377,27380,27383,27397],[10,26709,26705],{"id":26710},"_3docker直通",[14,26712,26713],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[67,26715,26717],{"id":26716},"_31usb直通","3.1.USB直通",[14,26719,26720],{},[1445,26721],{"alt":18,"src":26722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[50,26724,26725],{},[53,26726,26727],{},"方法一(不是很推荐新手)：",[14,26729,26730],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[87,26732,26734],{"className":23807,"code":26733,"language":23809,"meta":18,"style":18},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[93,26735,26736,26744,26749],{"__ignoreMap":18},[96,26737,26738,26741],{"class":98,"line":99},[96,26739,26740],{"class":1946},"ls",[96,26742,26743],{"class":211}," \u002Fdev\n",[96,26745,26746],{"class":98,"line":19},[96,26747,26748],{"class":165},"#例如\n",[96,26750,26751,26754,26756],{"class":98,"line":1162},[96,26752,26753],{"class":106},"--device",[96,26755,152],{"class":102},[96,26757,26758],{"class":211},"\u002Fdev\u002Ftty_USB0\n",[50,26760,26761],{"start":19},[53,26762,26763],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[87,26765,26767],{"className":23807,"code":26766,"language":23809,"meta":18,"style":18},"--privileged\n",[93,26768,26769],{"__ignoreMap":18},[96,26770,26771],{"class":98,"line":99},[96,26772,26766],{"class":1946},[14,26774,26775],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[14,26777,26778],{},[1445,26779],{"alt":18,"src":26780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[67,26782,26784],{"id":26783},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[14,26786,26787,26788,26791],{},"NVIDIA Container Toolkit使用户 ",[256,26789,26790],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[14,26793,26794],{},[1445,26795],{"alt":18,"src":26796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[14,26798,26799],{},[345,26800,26801],{"href":26801,"rel":26802},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[23850],[21982,26804,26806],{"id":26805},"_321安装","3.2.1.安装",[14,26808,26809],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[22894,26811,26813],{"id":26812},"_3211ubuntu","3.2.1.1.Ubuntu",[50,26815,26816],{},[53,26817,26818],{},"配置存储库 并更新",[87,26820,26822],{"className":23807,"code":26821,"language":23809,"meta":18,"style":18},"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",[93,26823,26824,26853,26873,26885,26897,26903],{"__ignoreMap":18},[96,26825,26826,26829,26832,26835,26837,26839,26842,26845,26848,26851],{"class":98,"line":99},[96,26827,26828],{"class":1946},"curl",[96,26830,26831],{"class":155}," -fsSL",[96,26833,26834],{"class":211}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[96,26836,25088],{"class":102},[96,26838,26052],{"class":1946},[96,26840,26841],{"class":211}," gpg",[96,26843,26844],{"class":155}," --dearmor",[96,26846,26847],{"class":155}," -o",[96,26849,26850],{"class":211}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[96,26852,24657],{"class":155},[96,26854,26855,26858,26860,26863,26866,26869,26871],{"class":98,"line":19},[96,26856,26857],{"class":106},"  && ",[96,26859,26828],{"class":1946},[96,26861,26862],{"class":155}," -s",[96,26864,26865],{"class":155}," -L",[96,26867,26868],{"class":211}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[96,26870,25088],{"class":102},[96,26872,24657],{"class":155},[96,26874,26875,26878,26881,26883],{"class":98,"line":1162},[96,26876,26877],{"class":1946},"    sed",[96,26879,26880],{"class":211}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[96,26882,25088],{"class":102},[96,26884,24657],{"class":155},[96,26886,26887,26890,26892,26895],{"class":98,"line":1177},[96,26888,26889],{"class":1946},"    sudo",[96,26891,26195],{"class":211},[96,26893,26894],{"class":211}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[96,26896,24657],{"class":155},[96,26898,26899,26901],{"class":98,"line":1183},[96,26900,26857],{"class":106},[96,26902,26154],{"class":155},[96,26904,26905,26907,26909],{"class":98,"line":1197},[96,26906,26889],{"class":1946},[96,26908,26055],{"class":211},[96,26910,26221],{"class":211},[50,26912,26913],{"start":19},[53,26914,26915],{},"安装nvidia-docker2",[87,26917,26919],{"className":23807,"code":26918,"language":23809,"meta":18,"style":18},"sudo apt-get install -y nvidia-docker2\n",[93,26920,26921],{"__ignoreMap":18},[96,26922,26923,26925,26927,26929,26931],{"class":98,"line":99},[96,26924,24555],{"class":1946},[96,26926,26055],{"class":211},[96,26928,23819],{"class":211},[96,26930,26379],{"class":155},[96,26932,26933],{"class":211}," nvidia-docker2\n",[50,26935,26936],{"start":1162},[53,26937,26938],{},"使用nvidia-ctk命令配置container runtime",[87,26940,26942],{"className":23807,"code":26941,"language":23809,"meta":18,"style":18},"sudo nvidia-ctk runtime configure --runtime=docker\n",[93,26943,26944],{"__ignoreMap":18},[96,26945,26946,26948,26951,26954,26957],{"class":98,"line":99},[96,26947,24555],{"class":1946},[96,26949,26950],{"class":211}," nvidia-ctk",[96,26952,26953],{"class":211}," runtime",[96,26955,26956],{"class":211}," configure",[96,26958,26959],{"class":155}," --runtime=docker\n",[50,26961,26962],{"start":1177},[53,26963,26964],{},"重启docker服务:",[87,26966,26968],{"className":23807,"code":26967,"language":23809,"meta":18,"style":18},"sudo systemctl restart docker\n",[93,26969,26970],{"__ignoreMap":18},[96,26971,26972,26974,26976,26979],{"class":98,"line":99},[96,26973,24555],{"class":1946},[96,26975,26492],{"class":211},[96,26977,26978],{"class":211}," restart",[96,26980,26471],{"class":211},[22894,26982,26984],{"id":26983},"_3212fedora","3.2.1.2.Fedora",[50,26986,26987],{},[53,26988,26989],{},"配置存储库",[87,26991,26993],{"className":23807,"code":26992,"language":23809,"meta":18,"style":18},"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",[93,26994,26995,27010],{"__ignoreMap":18},[96,26996,26997,26999,27001,27003,27006,27008],{"class":98,"line":99},[96,26998,26828],{"class":1946},[96,27000,26862],{"class":155},[96,27002,26865],{"class":155},[96,27004,27005],{"class":211}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[96,27007,25088],{"class":102},[96,27009,24657],{"class":155},[96,27011,27012,27014,27016],{"class":98,"line":19},[96,27013,24555],{"class":1946},[96,27015,26195],{"class":211},[96,27017,27018],{"class":211}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[50,27020,27021],{"start":19},[53,27022,27023],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[87,27025,27027],{"className":23807,"code":27026,"language":23809,"meta":18,"style":18},"# 如果是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",[93,27028,27029,27034,27048,27052,27057],{"__ignoreMap":18},[96,27030,27031],{"class":98,"line":99},[96,27032,27033],{"class":165},"# 如果是RHEL或者Rocky（DNF4）\n",[96,27035,27036,27038,27040,27042,27045],{"class":98,"line":19},[96,27037,24555],{"class":1946},[96,27039,26294],{"class":211},[96,27041,26393],{"class":211},[96,27043,27044],{"class":155}," --add-repo",[96,27046,27047],{"class":211}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[96,27049,27050],{"class":98,"line":1162},[96,27051,2383],{"emptyLinePlaceholder":23},[96,27053,27054],{"class":98,"line":1177},[96,27055,27056],{"class":165},"# 如果是Feodra41+（DNF5）\n",[96,27058,27059,27061,27063,27065,27067],{"class":98,"line":1183},[96,27060,24555],{"class":1946},[96,27062,26294],{"class":211},[96,27064,26393],{"class":211},[96,27066,26396],{"class":211},[96,27068,27069],{"class":155}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[50,27071,27072],{"start":1162},[53,27073,27074],{},"安装NVIDIA Container Toolki包",[87,27076,27078],{"className":23807,"code":27077,"language":23809,"meta":18,"style":18},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[93,27079,27080,27085,27098,27102,27107],{"__ignoreMap":18},[96,27081,27082],{"class":98,"line":99},[96,27083,27084],{"class":165},"# 如果是RHEL或者Rocky\n",[96,27086,27087,27089,27091,27093,27095],{"class":98,"line":19},[96,27088,24555],{"class":1946},[96,27090,26294],{"class":211},[96,27092,23819],{"class":211},[96,27094,26379],{"class":155},[96,27096,27097],{"class":211}," nvidia-container-toolkit\n",[96,27099,27100],{"class":98,"line":1162},[96,27101,2383],{"emptyLinePlaceholder":23},[96,27103,27104],{"class":98,"line":1177},[96,27105,27106],{"class":165},"# 如果是Fedora\n",[96,27108,27109,27111,27113,27115,27117],{"class":98,"line":1183},[96,27110,24555],{"class":1946},[96,27112,26294],{"class":211},[96,27114,23819],{"class":211},[96,27116,26379],{"class":155},[96,27118,27097],{"class":211},[50,27120,27121],{"start":1177},[53,27122,27123,27124,27126],{},"安装nvidia-docker2 ： 在Fedora上使用",[93,27125,26269],{},"进行安装",[87,27128,27130],{"className":23807,"code":27129,"language":23809,"meta":18,"style":18},"sudo dnf install -y nvidia-docker2\n",[93,27131,27132],{"__ignoreMap":18},[96,27133,27134,27136,27138,27140,27142],{"class":98,"line":99},[96,27135,24555],{"class":1946},[96,27137,26294],{"class":211},[96,27139,23819],{"class":211},[96,27141,26379],{"class":155},[96,27143,26933],{"class":211},[50,27145,27146],{"start":1183},[53,27147,27148],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[87,27150,27151],{"className":23807,"code":26941,"language":23809,"meta":18,"style":18},[93,27152,27153],{"__ignoreMap":18},[96,27154,27155,27157,27159,27161,27163],{"class":98,"line":99},[96,27156,24555],{"class":1946},[96,27158,26950],{"class":211},[96,27160,26953],{"class":211},[96,27162,26956],{"class":211},[96,27164,26959],{"class":155},[50,27166,27167],{"start":1197},[53,27168,27169],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[87,27171,27172],{"className":23807,"code":26967,"language":23809,"meta":18,"style":18},[93,27173,27174],{"__ignoreMap":18},[96,27175,27176,27178,27180,27182],{"class":98,"line":99},[96,27177,24555],{"class":1946},[96,27179,26492],{"class":211},[96,27181,26978],{"class":211},[96,27183,26471],{"class":211},[14,27185,27186],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[14,27188,27189],{},"方法：",[14,27191,27192],{},"1️⃣nvidia-smi",[14,27194,27195],{},"2️⃣运行nvidia cuda 容器进行测试",[87,27197,27199],{"className":23807,"code":27198,"language":23809,"meta":18,"style":18},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[93,27200,27201],{"__ignoreMap":18},[96,27202,27203,27205,27207,27210,27213,27216,27219,27222],{"class":98,"line":99},[96,27204,24555],{"class":1946},[96,27206,26299],{"class":211},[96,27208,27209],{"class":211}," run",[96,27211,27212],{"class":155}," --rm",[96,27214,27215],{"class":155}," --gpus",[96,27217,27218],{"class":211}," all",[96,27220,27221],{"class":211}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[96,27223,27224],{"class":211}," nvidia-smi\n",[14,27226,27227],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[14,27229,27230],{},[1445,27231],{"alt":18,"src":27232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[67,27234,27236],{"id":27235},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[14,27238,27239],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[14,27241,27242],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[14,27244,27245],{},[345,27246,27247],{"href":27247,"rel":27248},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[23850],[14,27250,27251],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[14,27253,27254],{},"我们只需要找到对应的Docker镜像当底包即可。",[14,27256,27257],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[244,27259,27260,27276],{},[247,27261,27262],{},[250,27263,27264,27267,27270,27273],{},[253,27265,27266],{"align":23721},"镜像类型",[253,27268,27269],{"align":23721},"适用场景",[253,27271,27272],{"align":23721},"示例标签",[253,27274,27275],{"align":23721},"大小",[291,27277,27278,27292,27306],{},[250,27279,27280,27283,27286,27289],{},[296,27281,27282],{"align":23721},"base",[296,27284,27285],{"align":23721},"仅需 CUDA 运行时库",[296,27287,27288],{"align":23721},"12.4.0-base-ubuntu22.04",[296,27290,27291],{"align":23721},"~240MB",[250,27293,27294,27297,27300,27303],{},[296,27295,27296],{"align":23721},"runtime",[296,27298,27299],{"align":23721},"部署编译后的应用（含数学库）",[296,27301,27302],{"align":23721},"12.4.0-runtime-ubuntu22.04",[296,27304,27305],{"align":23721},"~2GB",[250,27307,27308,27311,27314,27317],{},[296,27309,27310],{"align":23721},"devel",[296,27312,27313],{"align":23721},"开发环境（含编译工具）",[296,27315,27316],{"align":23721},"12.4.0-devel-ubuntu22.04",[296,27318,27319],{"align":23721},"~3GB",[14,27321,27322,27323,27326],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[93,27324,27325],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[14,27328,27329],{},[1445,27330],{"alt":18,"src":27331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[14,27333,27334],{},"在dockerfile里就可以开头这么写：",[87,27336,27338],{"className":23807,"code":27337,"language":23809,"meta":18,"style":18},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[93,27339,27340,27345],{"__ignoreMap":18},[96,27341,27342],{"class":98,"line":99},[96,27343,27344],{"class":165},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[96,27346,27347,27350],{"class":98,"line":19},[96,27348,27349],{"class":1946},"FROM",[96,27351,27352],{"class":211}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[67,27354,27356],{"id":27355},"_34配置以太网","3.4.配置以太网",[14,27358,27359],{},"指定网络模式",[87,27361,27363],{"className":23807,"code":27362,"language":23809,"meta":18,"style":18},"--net=host \\\n",[93,27364,27365],{"__ignoreMap":18},[96,27366,27367,27370,27372,27375],{"class":98,"line":99},[96,27368,27369],{"class":106},"--net",[96,27371,152],{"class":102},[96,27373,27374],{"class":211},"host",[96,27376,24657],{"class":1946},[14,27378,27379],{},"启动参数里加上这行即可。具体在下方",[14,27381,27382],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1114,27384,27385,27388,27391,27394],{},[53,27386,27387],{},"--net=bridge:默认选项，表示连接到默认的网桥",[53,27389,27390],{},"--net=host:容器使用宿主机的网络",[53,27392,27393],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[53,27395,27396],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[5110,27398,27399],{},"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":18,"searchDepth":19,"depth":19,"links":27401},[27402,27403,27404,27405],{"id":26716,"depth":1162,"text":26717},{"id":26783,"depth":1162,"text":26784},{"id":27235,"depth":1162,"text":27236},{"id":27355,"depth":1162,"text":27356},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26705,"description":26713},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27412,"title":27413,"body":27414,"description":27421,"extension":21,"meta":27427,"navigation":23,"path":27428,"seo":27429,"stem":27430,"__hash__":27431},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27415,"toc":27425},[27416,27419,27422],[10,27417,27413],{"id":27418},"_4dockerhub换源",[14,27420,27421],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[14,27423,27424],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":18,"searchDepth":19,"depth":19,"links":27426},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27413,"description":27421},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27433,"title":27434,"body":27435,"description":18,"extension":21,"meta":28447,"navigation":23,"path":28448,"seo":28449,"stem":28450,"__hash__":28451},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27436,"toc":28442},[27437,27440,27444,27450,27454,27457,27797,27800,27803,27806,27811,27816,27819,27822,27825,27828,27847,27850,27861,27867,28049,28059,28075,28338,28340,28365,28380,28389,28439],[10,27438,27434],{"id":27439},"_5docker命令学习",[67,27441,27443],{"id":27442},"_51参考文档","5.1.参考文档",[14,27445,27446],{},[345,27447,27448],{"href":27448,"rel":27449},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[23850],[67,27451,27453],{"id":27452},"_52常用命令","5.2.常用命令",[14,27455,27456],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[244,27458,27459,27472],{},[247,27460,27461],{},[250,27462,27463,27466,27469],{},[253,27464,27465],{"align":23721},"命令",[253,27467,27468],{"align":23721},"描述",[253,27470,27471],{"align":23721},"示例",[291,27473,27474,27485,27496,27507,27518,27529,27540,27551,27561,27572,27583,27594,27604,27615,27626,27637,27647,27657,27667,27677,27688,27699,27710,27721,27732,27743,27753,27764,27775,27786],{},[250,27475,27476,27479,27482],{},[296,27477,27478],{"align":23721},"docker run",[296,27480,27481],{"align":23721},"创建并启动一个新的容器。",[296,27483,27484],{"align":23721},"docker run -it ubuntu bash",[250,27486,27487,27490,27493],{},[296,27488,27489],{"align":23721},"docker build",[296,27491,27492],{"align":23721},"通过指定的 Dockerfile 创建一个新的镜像。",[296,27494,27495],{"align":23721},"docker build -t myimage .",[250,27497,27498,27501,27504],{},[296,27499,27500],{"align":23721},"docker pull",[296,27502,27503],{"align":23721},"从 Docker 仓库拉取镜像。",[296,27505,27506],{"align":23721},"docker pull ubuntu",[250,27508,27509,27512,27515],{},[296,27510,27511],{"align":23721},"docker push",[296,27513,27514],{"align":23721},"将本地镜像推送到 Docker 仓库。",[296,27516,27517],{"align":23721},"docker push myimage",[250,27519,27520,27523,27526],{},[296,27521,27522],{"align":23721},"docker stop",[296,27524,27525],{"align":23721},"停止一个正在运行的容器。",[296,27527,27528],{"align":23721},"docker stop container_id",[250,27530,27531,27534,27537],{},[296,27532,27533],{"align":23721},"docker start",[296,27535,27536],{"align":23721},"启动一个已经存在的容器。",[296,27538,27539],{"align":23721},"docker start container_id",[250,27541,27542,27545,27548],{},[296,27543,27544],{"align":23721},"docker restart",[296,27546,27547],{"align":23721},"重新启动容器。",[296,27549,27550],{"align":23721},"docker restart container_id",[250,27552,27553,27556,27559],{},[296,27554,27555],{"align":23721},"docker ps",[296,27557,27558],{"align":23721},"列出当前正在运行的容器。",[296,27560,27555],{"align":23721},[250,27562,27563,27566,27569],{},[296,27564,27565],{"align":23721},"docker rm",[296,27567,27568],{"align":23721},"删除一个或多个停止的容器。",[296,27570,27571],{"align":23721},"docker rm container_id",[250,27573,27574,27577,27580],{},[296,27575,27576],{"align":23721},"docker exec",[296,27578,27579],{"align":23721},"在一个正在运行的容器中执行命令。",[296,27581,27582],{"align":23721},"docker exec -it container_id bash",[250,27584,27585,27588,27591],{},[296,27586,27587],{"align":23721},"docker logs",[296,27589,27590],{"align":23721},"查看容器的日志输出。",[296,27592,27593],{"align":23721},"docker logs container_id",[250,27595,27596,27599,27602],{},[296,27597,27598],{"align":23721},"docker images",[296,27600,27601],{"align":23721},"列出本地所有镜像。",[296,27603,27598],{"align":23721},[250,27605,27606,27609,27612],{},[296,27607,27608],{"align":23721},"docker rmi",[296,27610,27611],{"align":23721},"删除一个或多个镜像。",[296,27613,27614],{"align":23721},"docker rmi myimage",[250,27616,27617,27620,27623],{},[296,27618,27619],{"align":23721},"docker network",[296,27621,27622],{"align":23721},"管理 Docker 网络。",[296,27624,27625],{"align":23721},"docker network ls",[250,27627,27628,27631,27634],{},[296,27629,27630],{"align":23721},"docker volume",[296,27632,27633],{"align":23721},"管理 Docker 数据卷。",[296,27635,27636],{"align":23721},"docker volume ls",[250,27638,27639,27642,27645],{},[296,27640,27641],{"align":23721},"docker-compose up",[296,27643,27644],{"align":23721},"启动 docker-compose.yml 中定义的所有服务。",[296,27646,27641],{"align":23721},[250,27648,27649,27652,27655],{},[296,27650,27651],{"align":23721},"docker-compose down",[296,27653,27654],{"align":23721},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[296,27656,27651],{"align":23721},[250,27658,27659,27662,27665],{},[296,27660,27661],{"align":23721},"docker info",[296,27663,27664],{"align":23721},"显示 Docker 系统的详细信息。",[296,27666,27661],{"align":23721},[250,27668,27669,27672,27675],{},[296,27670,27671],{"align":23721},"docker stats",[296,27673,27674],{"align":23721},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[296,27676,27671],{"align":23721},[250,27678,27679,27682,27685],{},[296,27680,27681],{"align":23721},"docker inspect",[296,27683,27684],{"align":23721},"查看容器或镜像的详细信息（JSON 格式）。",[296,27686,27687],{"align":23721},"docker inspect container_id",[250,27689,27690,27693,27696],{},[296,27691,27692],{"align":23721},"docker save",[296,27694,27695],{"align":23721},"将一个镜像保存为 tar 文件。",[296,27697,27698],{"align":23721},"docker save -o myimage.tar myimage",[250,27700,27701,27704,27707],{},[296,27702,27703],{"align":23721},"docker load",[296,27705,27706],{"align":23721},"从 tar 文件中加载镜像。",[296,27708,27709],{"align":23721},"docker load -i myimage.tar",[250,27711,27712,27715,27718],{},[296,27713,27714],{"align":23721},"docker tag",[296,27716,27717],{"align":23721},"为镜像添加标签（tag）。",[296,27719,27720],{"align":23721},"docker tag myimage myimage:v1",[250,27722,27723,27726,27729],{},[296,27724,27725],{"align":23721},"docker buildx build",[296,27727,27728],{"align":23721},"使用 Buildx 构建多架构镜像。",[296,27730,27731],{"align":23721},"docker buildx build -t myimage .",[250,27733,27734,27737,27740],{},[296,27735,27736],{"align":23721},"docker buildx create",[296,27738,27739],{"align":23721},"创建一个新的 Buildx 构建实例。",[296,27741,27742],{"align":23721},"docker buildx create –use",[250,27744,27745,27748,27751],{},[296,27746,27747],{"align":23721},"docker buildx ls",[296,27749,27750],{"align":23721},"列出所有可用的 Buildx 构建实例。",[296,27752,27747],{"align":23721},[250,27754,27755,27758,27761],{},[296,27756,27757],{"align":23721},"docker buildx use",[296,27759,27760],{"align":23721},"设置当前的 Buildx 构建实例。",[296,27762,27763],{"align":23721},"docker buildx use mybuilder",[250,27765,27766,27769,27772],{},[296,27767,27768],{"align":23721},"docker buildx bake",[296,27770,27771],{"align":23721},"使用 Bake 文件批量构建镜像。",[296,27773,27774],{"align":23721},"docker buildx bake -f bake.hcl",[250,27776,27777,27780,27783],{},[296,27778,27779],{"align":23721},"docker buildx build –push",[296,27781,27782],{"align":23721},"构建镜像并推送到镜像仓库。",[296,27784,27785],{"align":23721},"docker buildx build –push -t myimage .",[250,27787,27788,27791,27794],{},[296,27789,27790],{"align":23721},"docker buildx build –platform",[296,27792,27793],{"align":23721},"构建镜像并为多个平台生成支持。",[296,27795,27796],{"align":23721},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[14,27798,27799],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[14,27801,27802],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[14,27804,27805],{},"docker images 可以查看已经下载的镜像",[14,27807,27808],{},[1445,27809],{"alt":18,"src":27810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[14,27812,27813],{},[256,27814,27815],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[14,27817,27818],{},"docker rmi $(docker images -q) 删除所有的镜像",[14,27820,27821],{},"docker container logs 查看容器日志",[14,27823,27824],{},"docker top 查看容器里的进程",[14,27826,27827],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[87,27829,27831],{"className":23807,"code":27830,"language":23809,"meta":18,"style":18},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[93,27832,27833],{"__ignoreMap":18},[96,27834,27835,27838,27841,27844],{"class":98,"line":99},[96,27836,27837],{"class":1946},"如：docker",[96,27839,27840],{"class":211}," cp",[96,27842,27843],{"class":211}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[96,27845,27846],{"class":211}," \u002Fmydata\u002Fnginx\n",[14,27848,27849],{},"docker run时在启动容器的时候会有几个常用的选项：",[1114,27851,27852,27855,27858],{},[53,27853,27854],{},"-d选项：表示后台运行",[53,27856,27857],{},"-P选项：随机端口映射",[53,27859,27860],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[67,27862,27864],{"id":27863},"_53run命令的参数非常重要",[256,27865,27866],{},"5.3.run命令的参数（非常重要）",[244,27868,27869,27882],{},[247,27870,27871],{},[250,27872,27873,27876,27879],{},[253,27874,27875],{"align":23721},"参数\u002F配置",[253,27877,27878],{"align":23721},"功能说明",[253,27880,27881],{"align":23721},"重要性与参考依据",[291,27883,27884,27895,27906,27917,27928,27939,27950,27961,27972,27983,27994,28005,28016,28027,28038],{},[250,27885,27886,27889,27892],{},[296,27887,27888],{"align":23721},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[296,27890,27891],{"align":23721},"指定容器名称，便于后续管理",[296,27893,27894],{"align":23721},"替代随机生成的容器名。",[250,27896,27897,27900,27903],{},[296,27898,27899],{"align":23721},"–gpus all",[296,27901,27902],{"align":23721},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[296,27904,27905],{"align":23721},"用于CUDA加速等GPU依赖任务。",[250,27907,27908,27911,27914],{},[296,27909,27910],{"align":23721},"-e NVIDIA_DRIVER_CAPABILITIES=all",[296,27912,27913],{"align":23721},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[296,27915,27916],{"align":23721},"确保容器内GPU功能完整67。",[250,27918,27919,27922,27925],{},[296,27920,27921],{"align":23721},"-dit",[296,27923,27924],{"align":23721},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[296,27926,27927],{"align":23721},"允许容器在后台运行并支持交互操作。",[250,27929,27930,27933,27936],{},[296,27931,27932],{"align":23721},"–privileged",[296,27934,27935],{"align":23721},"赋予容器完全主机权限（可访问设备、内核模块等）",[296,27937,27938],{"align":23721},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[250,27940,27941,27944,27947],{},[296,27942,27943],{"align":23721},"–net=host",[296,27945,27946],{"align":23721},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[296,27948,27949],{"align":23721},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[250,27951,27952,27955,27958],{},[296,27953,27954],{"align":23721},"–group-add audio–group-add video–group-add dialout",[296,27956,27957],{"align":23721},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[296,27959,27960],{"align":23721},"避免权限问题（如避免无法调用摄像头、麦克风）。",[250,27962,27963,27966,27969],{},[296,27964,27965],{"align":23721},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[296,27967,27968],{"align":23721},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[296,27970,27971],{"align":23721},"支持容器内运行图形界面应用（如OpenCV可视化）。",[250,27973,27974,27977,27980],{},[296,27975,27976],{"align":23721},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[296,27978,27979],{"align":23721},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[296,27981,27982],{"align":23721},"实现容器内图形显示。",[250,27984,27985,27988,27991],{},[296,27986,27987],{"align":23721},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[296,27989,27990],{"align":23721},"挂载X11认证文件（只读）",[296,27992,27993],{"align":23721},"确保容器有权连接宿主机显示服务。",[250,27995,27996,27999,28002],{},[296,27997,27998],{"align":23721},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[296,28000,28001],{"align":23721},"挂载Wayland显示协议相关目录",[296,28003,28004],{"align":23721},"支持Wayland协议的图形显示。",[250,28006,28007,28010,28013],{},[296,28008,28009],{"align":23721},"–ulimit nofile=1024:524288",[296,28011,28012],{"align":23721},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[296,28014,28015],{"align":23721},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[250,28017,28018,28021,28024],{},[296,28019,28020],{"align":23721},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[296,28022,28023],{"align":23721},"挂载宿主机用户目录到容器内同名路径",[296,28025,28026],{"align":23721},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[250,28028,28029,28032,28035],{},[296,28030,28031],{"align":23721},"-w \u002Fhome\u002Ftungchiahui",[296,28033,28034],{"align":23721},"设置容器启动后的默认工作目录",[296,28036,28037],{"align":23721},"直接进入项目路径，方便执行命令2324。",[250,28039,28040,28043,28046],{},[296,28041,28042],{"align":23721},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[296,28044,28045],{"align":23721},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[296,28047,28048],{"align":23721},"提供预配置的深度学习与机器人开发环境。",[14,28050,28051,28052,28054,28055,28058],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[93,28053,24555],{},"加不加",[93,28056,28057],{},"sudo -E","都无所谓。",[14,28060,28061,28062,28064,28065,28067,28068,28071,28072,28074],{},"用户已经被加到docker组了，不用",[93,28063,24555],{},"也行跑，其次，",[93,28066,24555],{},"运行的话，你的",[93,28069,28070],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[93,28073,28070],{},"更不可能变了。",[87,28076,28078],{"className":23807,"code":28077,"language":23809,"meta":18,"style":18},"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",[93,28079,28080,28093,28103,28113,28125,28132,28139,28146,28156,28165,28174,28188,28200,28212,28221,28231,28240,28255,28288,28315,28326,28333],{"__ignoreMap":18},[96,28081,28082,28084,28086,28088,28091],{"class":98,"line":99},[96,28083,24555],{"class":1946},[96,28085,26299],{"class":211},[96,28087,27209],{"class":211},[96,28089,28090],{"class":155}," --name=ros_opencv_cuda",[96,28092,24657],{"class":155},[96,28094,28095,28098,28101],{"class":98,"line":19},[96,28096,28097],{"class":106},"--gpus ",[96,28099,28100],{"class":211},"all",[96,28102,24657],{"class":155},[96,28104,28105,28108,28111],{"class":98,"line":1162},[96,28106,28107],{"class":106},"-e ",[96,28109,28110],{"class":211},"NVIDIA_DRIVER_CAPABILITIES=all",[96,28112,24657],{"class":155},[96,28114,28115,28117,28120,28123],{"class":98,"line":1177},[96,28116,28107],{"class":106},[96,28118,28119],{"class":211},"DISPLAY=",[96,28121,28122],{"class":106},"$DISPLAY ",[96,28124,26154],{"class":155},[96,28126,28127,28130],{"class":98,"line":1183},[96,28128,28129],{"class":106},"-dit ",[96,28131,26154],{"class":155},[96,28133,28134,28137],{"class":98,"line":1197},[96,28135,28136],{"class":106},"--privileged ",[96,28138,26154],{"class":155},[96,28140,28141,28144],{"class":98,"line":1203},[96,28142,28143],{"class":106},"--net=host ",[96,28145,26154],{"class":155},[96,28147,28148,28151,28154],{"class":98,"line":1294},[96,28149,28150],{"class":106},"--group-add ",[96,28152,28153],{"class":211},"audio",[96,28155,24657],{"class":155},[96,28157,28158,28160,28163],{"class":98,"line":1300},[96,28159,28150],{"class":106},[96,28161,28162],{"class":211},"video",[96,28164,24657],{"class":155},[96,28166,28167,28169,28172],{"class":98,"line":1312},[96,28168,28150],{"class":106},[96,28170,28171],{"class":211},"dialout",[96,28173,24657],{"class":155},[96,28175,28176,28178,28181,28183,28186],{"class":98,"line":1595},[96,28177,28107],{"class":106},[96,28179,28180],{"class":211},"XAUTHORITY=",[96,28182,28070],{"class":106},[96,28184,28185],{"class":211},"\u002F.Xauthority",[96,28187,24657],{"class":155},[96,28189,28190,28192,28195,28198],{"class":98,"line":1600},[96,28191,28107],{"class":106},[96,28193,28194],{"class":211},"WAYLAND_DISPLAY=",[96,28196,28197],{"class":106},"$WAYLAND_DISPLAY ",[96,28199,26154],{"class":155},[96,28201,28202,28204,28207,28210],{"class":98,"line":1606},[96,28203,28107],{"class":106},[96,28205,28206],{"class":211},"XDG_RUNTIME_DIR=",[96,28208,28209],{"class":106},"$XDG_RUNTIME_DIR ",[96,28211,26154],{"class":155},[96,28213,28214,28216,28219],{"class":98,"line":1611},[96,28215,28107],{"class":106},[96,28217,28218],{"class":211},"QT_QPA_PLATFORM=xcb",[96,28220,24657],{"class":155},[96,28222,28223,28226,28229],{"class":98,"line":1625},[96,28224,28225],{"class":106},"-v ",[96,28227,28228],{"class":211},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[96,28230,24657],{"class":155},[96,28232,28233,28235,28238],{"class":98,"line":1630},[96,28234,28225],{"class":106},[96,28236,28237],{"class":211},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[96,28239,24657],{"class":155},[96,28241,28242,28245,28248,28250,28253],{"class":98,"line":1636},[96,28243,28244],{"class":106},"-v $HOME",[96,28246,28247],{"class":211},"\u002F.Xauthority:",[96,28249,28070],{"class":106},[96,28251,28252],{"class":211},"\u002F.Xauthority:ro",[96,28254,24657],{"class":155},[96,28256,28257,28259,28262,28264,28267,28270,28272,28275,28277,28279,28281,28283,28286],{"class":98,"line":1657},[96,28258,28225],{"class":106},[96,28260,28261],{"class":211},"\u002Frun\u002Fuser\u002F",[96,28263,25078],{"class":106},[96,28265,28266],{"class":1946},"id",[96,28268,28269],{"class":155}," -u",[96,28271,536],{"class":106},[96,28273,28274],{"class":211},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[96,28276,25078],{"class":106},[96,28278,28266],{"class":1946},[96,28280,28269],{"class":155},[96,28282,536],{"class":106},[96,28284,28285],{"class":211},"\u002Fwayland-0",[96,28287,24657],{"class":155},[96,28289,28290,28292,28294,28296,28298,28300,28302,28305,28307,28309,28311,28313],{"class":98,"line":1662},[96,28291,28225],{"class":106},[96,28293,28261],{"class":211},[96,28295,25078],{"class":106},[96,28297,28266],{"class":1946},[96,28299,28269],{"class":155},[96,28301,536],{"class":106},[96,28303,28304],{"class":211},":\u002Frun\u002Fuser\u002F",[96,28306,25078],{"class":106},[96,28308,28266],{"class":1946},[96,28310,28269],{"class":155},[96,28312,13698],{"class":106},[96,28314,26154],{"class":155},[96,28316,28317,28319,28321,28324],{"class":98,"line":1676},[96,28318,28244],{"class":106},[96,28320,966],{"class":211},[96,28322,28323],{"class":106},"$HOME ",[96,28325,26154],{"class":155},[96,28327,28328,28331],{"class":98,"line":1681},[96,28329,28330],{"class":106},"-w $HOME ",[96,28332,26154],{"class":155},[96,28334,28335],{"class":98,"line":1710},[96,28336,28337],{"class":106},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[14,28339,9009],{},[50,28341,28342,28350,28353,28356],{},[53,28343,28344,13779,28346,28349],{},[93,28345,28110],{},[93,28347,28348],{},"--gpus all","没有英伟达显卡请注释。",[53,28351,28352],{},"--name后面请自己为容器起名。",[53,28354,28355],{},"最后一行仓库名称请你自己找对应的镜像填上。",[53,28357,28358,28359,28364],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23538,28360,28361],{},[256,28362,28363],{},"请不要加","。",[87,28366,28368],{"className":23807,"code":28367,"language":23809,"meta":18,"style":18},"--ulimit nofile=1024:524288 \\\n",[93,28369,28370],{"__ignoreMap":18},[96,28371,28372,28375,28378],{"class":98,"line":99},[96,28373,28374],{"class":1946},"--ulimit",[96,28376,28377],{"class":211}," nofile=1024:524288",[96,28379,24657],{"class":155},[14,28381,28382,28383,28388],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23538,28384,28385],{},[256,28386,28387],{},"不建议","**.**",[87,28390,28392],{"className":23807,"code":28391,"language":23809,"meta":18,"style":18},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[93,28393,28394,28421,28430],{"__ignoreMap":18},[96,28395,28396,28399,28402,28404,28406,28408,28410,28412,28414,28417,28419],{"class":98,"line":99},[96,28397,28398],{"class":1946},"--user",[96,28400,28401],{"class":106}," $(",[96,28403,28266],{"class":1946},[96,28405,28269],{"class":155},[96,28407,536],{"class":106},[96,28409,966],{"class":211},[96,28411,25078],{"class":106},[96,28413,28266],{"class":1946},[96,28415,28416],{"class":155}," -g",[96,28418,13698],{"class":106},[96,28420,26154],{"class":155},[96,28422,28423,28425,28428],{"class":98,"line":19},[96,28424,28225],{"class":106},[96,28426,28427],{"class":211},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[96,28429,24657],{"class":155},[96,28431,28432,28434,28437],{"class":98,"line":1162},[96,28433,28225],{"class":106},[96,28435,28436],{"class":211},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[96,28438,24657],{"class":155},[5110,28440,28441],{},"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":18,"searchDepth":19,"depth":19,"links":28443},[28444,28445,28446],{"id":27442,"depth":1162,"text":27443},{"id":27452,"depth":1162,"text":27453},{"id":27863,"depth":1162,"text":27866},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27434,"description":18},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28453,"title":28454,"body":28455,"description":18,"extension":21,"meta":30078,"navigation":23,"path":30079,"seo":30080,"stem":30081,"__hash__":30082},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28456,"toc":30073},[28457,28460,28464,28467,28689,28693,28697,28700,28806,28811,28814,28819,28822,28827,28830,28835,28838,28850,28853,28858,28865,28893,28900,28976,28981,28984,29007,29009,29084,29089,29092,29096,29104,29109,29114,29118,29129,29135,29138,29141,29165,29168,29171,29199,29202,29205,29670,29673,29678,29683,29687,29710,29715,29719,29723,29726,29729,29732,29759,29762,29765,29783,29786,29789,29811,29819,29824,29829,29833,29836,29839,29842,29845,29890,29893,29911,29914,29919,29922,29943,29946,30002,30005,30010,30014,30017,30024,30027,30030,30035,30038,30054,30057,30070],[10,28458,28454],{"id":28459},"_6手动创建docker镜像",[67,28461,28463],{"id":28462},"_61dockerfile","6.1.DockerFile",[14,28465,28466],{},"常用命令：",[244,28468,28469,28480],{},[247,28470,28471],{},[250,28472,28473,28476,28478],{},[253,28474,28475],{"align":23721},"指令",[253,28477,25848],{"align":23721},[253,28479,27471],{"align":23721},[291,28481,28482,28492,28508,28519,28530,28541,28552,28563,28574,28588,28602,28613,28627,28638,28649,28663,28678],{},[250,28483,28484,28486,28489],{},[296,28485,27349],{"align":23721},[296,28487,28488],{"align":23721},"指定基础镜像，是 Dockerfile 的起点",[296,28490,28491],{"align":23721},"FROM ubuntu:22.04",[250,28493,28494,28497,28500],{},[296,28495,28496],{"align":23721},"LABEL",[296,28498,28499],{"align":23721},"添加元数据（如作者、版本等）",[296,28501,28502,28503,28507],{"align":23721},"LABEL maintainer=”",[345,28504,28506],{"href":28505},"mailto:you@example.com","you@example.com","”",[250,28509,28510,28513,28516],{},[296,28511,28512],{"align":23721},"ENV",[296,28514,28515],{"align":23721},"设置环境变量",[296,28517,28518],{"align":23721},"ENV PORT=8080",[250,28520,28521,28524,28527],{},[296,28522,28523],{"align":23721},"ARG",[296,28525,28526],{"align":23721},"构建参数，只在构建期间可用",[296,28528,28529],{"align":23721},"ARG VERSION=1.0",[250,28531,28532,28535,28538],{},[296,28533,28534],{"align":23721},"RUN",[296,28536,28537],{"align":23721},"构建镜像时运行命令",[296,28539,28540],{"align":23721},"RUN apt-get update && apt-get install -y curl",[250,28542,28543,28546,28549],{},[296,28544,28545],{"align":23721},"COPY",[296,28547,28548],{"align":23721},"复制文件到镜像中",[296,28550,28551],{"align":23721},"COPY . \u002Fapp",[250,28553,28554,28557,28560],{},[296,28555,28556],{"align":23721},"ADD",[296,28558,28559],{"align":23721},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[296,28561,28562],{"align":23721},"ADD archive.tar.gz \u002Fdata\u002F",[250,28564,28565,28568,28571],{},[296,28566,28567],{"align":23721},"WORKDIR",[296,28569,28570],{"align":23721},"设置工作目录",[296,28572,28573],{"align":23721},"WORKDIR \u002Fopt",[250,28575,28576,28579,28582],{},[296,28577,28578],{"align":23721},"CMD",[296,28580,28581],{"align":23721},"设置容器启动时默认命令（可被 docker run 覆盖）",[296,28583,28584,28585],{"align":23721},"CMD ",[96,28586,28587],{},"“node”, “index.js”",[250,28589,28590,28593,28596],{},[296,28591,28592],{"align":23721},"ENTRYPOINT",[296,28594,28595],{"align":23721},"设置容器启动时固定命令（通常用于 CLI 工具等）",[296,28597,28598,28599],{"align":23721},"ENTRYPOINT ",[96,28600,28601],{},"“python3”",[250,28603,28604,28607,28610],{},[296,28605,28606],{"align":23721},"EXPOSE",[296,28608,28609],{"align":23721},"声明镜像内服务监听的端口（不会自动映射）",[296,28611,28612],{"align":23721},"EXPOSE 80",[250,28614,28615,28618,28621],{},[296,28616,28617],{"align":23721},"VOLUME",[296,28619,28620],{"align":23721},"声明数据卷挂载点",[296,28622,28623,28624],{"align":23721},"VOLUME ",[96,28625,28626],{},"“\u002Fdata”",[250,28628,28629,28632,28635],{},[296,28630,28631],{"align":23721},"USER",[296,28633,28634],{"align":23721},"设置后续命令执行的用户",[296,28636,28637],{"align":23721},"USER appuser",[250,28639,28640,28643,28646],{},[296,28641,28642],{"align":23721},"ONBUILD",[296,28644,28645],{"align":23721},"当镜像作为其他镜像基础镜像时触发的构建指令",[296,28647,28648],{"align":23721},"ONBUILD COPY . \u002Fsrc",[250,28650,28651,28654,28657],{},[296,28652,28653],{"align":23721},"SHELL",[296,28655,28656],{"align":23721},"更改默认 shell，比如将 sh -c 改为 bash -c",[296,28658,28659,28660],{"align":23721},"SHELL ",[96,28661,28662],{},"“\u002Fbin\u002Fbash”, “-c”",[250,28664,28665,28668,28671],{},[296,28666,28667],{"align":23721},"HEALTHCHECK",[296,28669,28670],{"align":23721},"定义容器运行时的健康检查命令",[296,28672,28673,28674],{"align":23721},"`HEALTHCHECK CMD curl –fail ",[345,28675,28676],{"href":28676,"rel":28677},"http:\u002F\u002Flocalhost:8080",[23850],[250,28679,28680,28683,28686],{},[296,28681,28682],{"align":23721},"STOPSIGNAL",[296,28684,28685],{"align":23721},"容器停止时发送的信号",[296,28687,28688],{"align":23721},"STOPSIGNAL SIGKILL",[67,28690,28692],{"id":28691},"_62自己创建容器","6.2.自己创建容器",[21982,28694,28696],{"id":28695},"_621手动创建","6.2.1.手动创建",[14,28698,28699],{},"在x86电脑上编译x86的：",[87,28701,28703],{"className":23807,"code":28702,"language":23809,"meta":18,"style":18},"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",[93,28704,28705,28721,28725,28738,28742,28755,28759,28772,28776,28789,28793],{"__ignoreMap":18},[96,28706,28707,28709,28712,28715,28718],{"class":98,"line":99},[96,28708,26532],{"class":1946},[96,28710,28711],{"class":211}," build",[96,28713,28714],{"class":155}," -t",[96,28716,28717],{"class":211}," ros-melodic-cuda118-cudnn8-bionic:latest",[96,28719,28720],{"class":211}," .\n",[96,28722,28723],{"class":98,"line":19},[96,28724,2383],{"emptyLinePlaceholder":23},[96,28726,28727,28729,28731,28733,28736],{"class":98,"line":1162},[96,28728,26532],{"class":1946},[96,28730,28711],{"class":211},[96,28732,28714],{"class":155},[96,28734,28735],{"class":211}," ros-noetic-focal:latest",[96,28737,28720],{"class":211},[96,28739,28740],{"class":98,"line":1177},[96,28741,2383],{"emptyLinePlaceholder":23},[96,28743,28744,28746,28748,28750,28753],{"class":98,"line":1183},[96,28745,26532],{"class":1946},[96,28747,28711],{"class":211},[96,28749,28714],{"class":155},[96,28751,28752],{"class":211}," ros-humble-jammy:latest",[96,28754,28720],{"class":211},[96,28756,28757],{"class":98,"line":1197},[96,28758,2383],{"emptyLinePlaceholder":23},[96,28760,28761,28763,28765,28767,28770],{"class":98,"line":1203},[96,28762,26532],{"class":1946},[96,28764,28711],{"class":211},[96,28766,28714],{"class":155},[96,28768,28769],{"class":211}," ros-jazzy-noble:latest",[96,28771,28720],{"class":211},[96,28773,28774],{"class":98,"line":1294},[96,28775,2383],{"emptyLinePlaceholder":23},[96,28777,28778,28780,28782,28784,28787],{"class":98,"line":1300},[96,28779,26532],{"class":1946},[96,28781,28711],{"class":211},[96,28783,28714],{"class":155},[96,28785,28786],{"class":211}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[96,28788,28720],{"class":211},[96,28790,28791],{"class":98,"line":1312},[96,28792,2383],{"emptyLinePlaceholder":23},[96,28794,28795,28797,28799,28801,28804],{"class":98,"line":1595},[96,28796,26532],{"class":1946},[96,28798,28711],{"class":211},[96,28800,28714],{"class":155},[96,28802,28803],{"class":211}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[96,28805,28720],{"class":211},[14,28807,28808],{},[1445,28809],{"alt":18,"src":28810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[14,28812,28813],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[14,28815,28816],{},[1445,28817],{"alt":18,"src":28818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[14,28820,28821],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[50,28823,28824],{},[53,28825,28826],{},"创建 Docker Hub 账户",[14,28828,28829],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[50,28831,28832],{"start":19},[53,28833,28834],{},"登录 Docker Hub",[14,28836,28837],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[87,28839,28841],{"className":23807,"code":28840,"language":23809,"meta":18,"style":18},"docker login\n",[93,28842,28843],{"__ignoreMap":18},[96,28844,28845,28847],{"class":98,"line":99},[96,28846,26532],{"class":1946},[96,28848,28849],{"class":211}," login\n",[14,28851,28852],{},"输入你的 Docker Hub 用户名和密码进行验证。",[50,28854,28855],{},[53,28856,28857],{},"为你的镜像打标签",[14,28859,28860,28861,28864],{},"Docker Hub 使用 ",[93,28862,28863],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[87,28866,28868],{"className":23807,"code":28867,"language":23809,"meta":18,"style":18},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[93,28869,28870],{"__ignoreMap":18},[96,28871,28872,28874,28877,28879,28882,28885,28888,28890],{"class":98,"line":99},[96,28873,26532],{"class":1946},[96,28875,28876],{"class":211}," tag",[96,28878,28769],{"class":211},[96,28880,28881],{"class":102}," \u003C",[96,28883,28884],{"class":211},"你的用户",[96,28886,28887],{"class":106},"名",[96,28889,1067],{"class":102},[96,28891,28892],{"class":211},"\u002Fros-jazzy-noble:latest\n",[14,28894,28895,28896,28899],{},"例如，如果你的 Docker Hub 用户名是 ",[93,28897,28898],{},"tungchiahui","，你应该执行：",[87,28901,28903],{"className":23807,"code":28902,"language":23809,"meta":18,"style":18},"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",[93,28904,28905,28916,28920,28931,28935,28946,28950,28961,28965],{"__ignoreMap":18},[96,28906,28907,28909,28911,28913],{"class":98,"line":99},[96,28908,26532],{"class":1946},[96,28910,28876],{"class":211},[96,28912,28735],{"class":211},[96,28914,28915],{"class":211}," tungchiahui\u002Fros-noetic-focal:latest\n",[96,28917,28918],{"class":98,"line":19},[96,28919,2383],{"emptyLinePlaceholder":23},[96,28921,28922,28924,28926,28928],{"class":98,"line":1162},[96,28923,26532],{"class":1946},[96,28925,28876],{"class":211},[96,28927,28752],{"class":211},[96,28929,28930],{"class":211}," tungchiahui\u002Fros-humble-jammy:latest\n",[96,28932,28933],{"class":98,"line":1177},[96,28934,2383],{"emptyLinePlaceholder":23},[96,28936,28937,28939,28941,28943],{"class":98,"line":1183},[96,28938,26532],{"class":1946},[96,28940,28876],{"class":211},[96,28942,28769],{"class":211},[96,28944,28945],{"class":211}," tungchiahui\u002Fros-jazzy-noble:latest\n",[96,28947,28948],{"class":98,"line":1197},[96,28949,2383],{"emptyLinePlaceholder":23},[96,28951,28952,28954,28956,28958],{"class":98,"line":1203},[96,28953,26532],{"class":1946},[96,28955,28876],{"class":211},[96,28957,28786],{"class":211},[96,28959,28960],{"class":211}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[96,28962,28963],{"class":98,"line":1294},[96,28964,2383],{"emptyLinePlaceholder":23},[96,28966,28967,28969,28971,28973],{"class":98,"line":1300},[96,28968,26532],{"class":1946},[96,28970,28876],{"class":211},[96,28972,28803],{"class":211},[96,28974,28975],{"class":211}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[50,28977,28978],{"start":19},[53,28979,28980],{},"推送镜像到 Docker Hub",[14,28982,28983],{},"使用以下命令将镜像推送到 Docker Hub：",[87,28985,28987],{"className":23807,"code":28986,"language":23809,"meta":18,"style":18},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[93,28988,28989],{"__ignoreMap":18},[96,28990,28991,28993,28996,28998,29000,29002,29004],{"class":98,"line":99},[96,28992,26532],{"class":1946},[96,28994,28995],{"class":211}," push",[96,28997,28881],{"class":102},[96,28999,28884],{"class":211},[96,29001,28887],{"class":106},[96,29003,1067],{"class":102},[96,29005,29006],{"class":211},"\u002Fros-noetic-jazzy-noble:latest\n",[14,29008,14617],{},[87,29010,29012],{"className":23807,"code":29011,"language":23809,"meta":18,"style":18},"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",[93,29013,29014,29022,29026,29034,29038,29046,29050,29059,29063,29071,29075],{"__ignoreMap":18},[96,29015,29016,29018,29020],{"class":98,"line":99},[96,29017,26532],{"class":1946},[96,29019,28995],{"class":211},[96,29021,28915],{"class":211},[96,29023,29024],{"class":98,"line":19},[96,29025,2383],{"emptyLinePlaceholder":23},[96,29027,29028,29030,29032],{"class":98,"line":1162},[96,29029,26532],{"class":1946},[96,29031,28995],{"class":211},[96,29033,28930],{"class":211},[96,29035,29036],{"class":98,"line":1177},[96,29037,2383],{"emptyLinePlaceholder":23},[96,29039,29040,29042,29044],{"class":98,"line":1183},[96,29041,26532],{"class":1946},[96,29043,28995],{"class":211},[96,29045,28945],{"class":211},[96,29047,29048],{"class":98,"line":1197},[96,29049,2383],{"emptyLinePlaceholder":23},[96,29051,29052,29054,29056],{"class":98,"line":1203},[96,29053,26532],{"class":1946},[96,29055,28995],{"class":211},[96,29057,29058],{"class":211}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[96,29060,29061],{"class":98,"line":1294},[96,29062,2383],{"emptyLinePlaceholder":23},[96,29064,29065,29067,29069],{"class":98,"line":1300},[96,29066,26532],{"class":1946},[96,29068,28995],{"class":211},[96,29070,28975],{"class":211},[96,29072,29073],{"class":98,"line":1312},[96,29074,2383],{"emptyLinePlaceholder":23},[96,29076,29077,29079,29081],{"class":98,"line":1595},[96,29078,26532],{"class":1946},[96,29080,28995],{"class":211},[96,29082,29083],{"class":211}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[50,29085,29086],{"start":1162},[53,29087,29088],{},"验证推送成功",[14,29090,29091],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[14,29093,29094],{},[256,29095,3767],{},[1114,29097,29098,29101],{},[53,29099,29100],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[53,29102,29103],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[14,29105,29106],{},[1445,29107],{"alt":18,"src":29108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[14,29110,29111],{},[1445,29112],{"alt":18,"src":29113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[21982,29115,29117],{"id":29116},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[14,29119,29120,29121,29124,29125,29128],{},"如果您想在 ",[256,29122,29123],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[256,29126,29127],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[14,29130,29131,29132],{},"1. ",[256,29133,29134],{},"启用 Docker 跨平台构建",[14,29136,29137],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[14,29139,29140],{},"第一步：启用 buildx（只需执行一次）",[87,29142,29144],{"className":23807,"code":29143,"language":23809,"meta":18,"style":18},"docker buildx create --name multiarch_builder --use\n",[93,29145,29146],{"__ignoreMap":18},[96,29147,29148,29150,29153,29156,29159,29162],{"class":98,"line":99},[96,29149,26532],{"class":1946},[96,29151,29152],{"class":211}," buildx",[96,29154,29155],{"class":211}," create",[96,29157,29158],{"class":155}," --name",[96,29160,29161],{"class":211}," multiarch_builder",[96,29163,29164],{"class":155}," --use\n",[14,29166,29167],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[14,29169,29170],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[87,29172,29174],{"className":23807,"code":29173,"language":23809,"meta":18,"style":18},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[93,29175,29176],{"__ignoreMap":18},[96,29177,29178,29180,29182,29184,29187,29190,29193,29196],{"class":98,"line":99},[96,29179,26532],{"class":1946},[96,29181,27209],{"class":211},[96,29183,27212],{"class":155},[96,29185,29186],{"class":155}," --privileged",[96,29188,29189],{"class":211}," multiarch\u002Fqemu-user-static",[96,29191,29192],{"class":155}," --reset",[96,29194,29195],{"class":155}," -p",[96,29197,29198],{"class":211}," yes\n",[14,29200,29201],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[14,29203,29204],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[87,29206,29208],{"className":23807,"code":29207,"language":23809,"meta":18,"style":18},"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",[93,29209,29210,29252,29256,29261,29271,29281,29290,29296,29300,29304,29314,29322,29331,29337,29341,29345,29355,29363,29372,29378,29382,29386,29396,29404,29413,29419,29423,29427,29437,29445,29454,29460,29464,29468,29478,29486,29495,29501,29505,29509,29519,29527,29536,29542,29546,29550,29560,29568,29577,29583,29587,29591,29601,29609,29618,29624,29628,29632,29643,29651,29660,29666],{"__ignoreMap":18},[96,29211,29212,29214,29216,29218,29221,29224,29226,29228,29231,29233,29235,29237,29239,29242,29245,29247,29250],{"class":98,"line":99},[96,29213,26532],{"class":1946},[96,29215,29152],{"class":211},[96,29217,28711],{"class":211},[96,29219,29220],{"class":155}," --platform",[96,29222,29223],{"class":211}," linux\u002Famd64,linux\u002Farm64",[96,29225,28714],{"class":155},[96,29227,28881],{"class":102},[96,29229,29230],{"class":211},"你的镜像",[96,29232,28887],{"class":106},[96,29234,1067],{"class":102},[96,29236,966],{"class":211},[96,29238,1017],{"class":102},[96,29240,29241],{"class":211},"标",[96,29243,29244],{"class":106},"签",[96,29246,1067],{"class":102},[96,29248,29249],{"class":155}," --push",[96,29251,28720],{"class":211},[96,29253,29254],{"class":98,"line":19},[96,29255,2383],{"emptyLinePlaceholder":23},[96,29257,29258],{"class":98,"line":1162},[96,29259,29260],{"class":165},"# 例子：\n",[96,29262,29263,29265,29267,29269],{"class":98,"line":1177},[96,29264,26532],{"class":1946},[96,29266,29152],{"class":211},[96,29268,28711],{"class":211},[96,29270,24657],{"class":155},[96,29272,29273,29276,29279],{"class":98,"line":1183},[96,29274,29275],{"class":106},"--platform ",[96,29277,29278],{"class":211},"linux\u002Famd64,linux\u002Farm64",[96,29280,24657],{"class":155},[96,29282,29283,29285,29288],{"class":98,"line":1197},[96,29284,28714],{"class":155},[96,29286,29287],{"class":211}," tungchiahui\u002Fros:noetic-focal",[96,29289,24657],{"class":155},[96,29291,29292,29294],{"class":98,"line":1203},[96,29293,29249],{"class":155},[96,29295,24657],{"class":155},[96,29297,29298],{"class":98,"line":1294},[96,29299,28720],{"class":211},[96,29301,29302],{"class":98,"line":1300},[96,29303,2383],{"emptyLinePlaceholder":23},[96,29305,29306,29308,29310,29312],{"class":98,"line":1312},[96,29307,26532],{"class":1946},[96,29309,29152],{"class":211},[96,29311,28711],{"class":211},[96,29313,24657],{"class":155},[96,29315,29316,29318,29320],{"class":98,"line":1595},[96,29317,29275],{"class":106},[96,29319,29278],{"class":211},[96,29321,24657],{"class":155},[96,29323,29324,29326,29329],{"class":98,"line":1600},[96,29325,28714],{"class":155},[96,29327,29328],{"class":211}," tungchiahui\u002Fros:humble-jammy",[96,29330,24657],{"class":155},[96,29332,29333,29335],{"class":98,"line":1606},[96,29334,29249],{"class":155},[96,29336,24657],{"class":155},[96,29338,29339],{"class":98,"line":1611},[96,29340,28720],{"class":211},[96,29342,29343],{"class":98,"line":1625},[96,29344,2383],{"emptyLinePlaceholder":23},[96,29346,29347,29349,29351,29353],{"class":98,"line":1630},[96,29348,26532],{"class":1946},[96,29350,29152],{"class":211},[96,29352,28711],{"class":211},[96,29354,24657],{"class":155},[96,29356,29357,29359,29361],{"class":98,"line":1636},[96,29358,29275],{"class":106},[96,29360,29278],{"class":211},[96,29362,24657],{"class":155},[96,29364,29365,29367,29370],{"class":98,"line":1657},[96,29366,28714],{"class":155},[96,29368,29369],{"class":211}," tungchiahui\u002Fros:jazzy-noble",[96,29371,24657],{"class":155},[96,29373,29374,29376],{"class":98,"line":1662},[96,29375,29249],{"class":155},[96,29377,24657],{"class":155},[96,29379,29380],{"class":98,"line":1676},[96,29381,28720],{"class":211},[96,29383,29384],{"class":98,"line":1681},[96,29385,2383],{"emptyLinePlaceholder":23},[96,29387,29388,29390,29392,29394],{"class":98,"line":1710},[96,29389,26299],{"class":1946},[96,29391,29152],{"class":211},[96,29393,28711],{"class":211},[96,29395,24657],{"class":155},[96,29397,29398,29400,29402],{"class":98,"line":1715},[96,29399,29275],{"class":106},[96,29401,29278],{"class":211},[96,29403,24657],{"class":155},[96,29405,29406,29408,29411],{"class":98,"line":1732},[96,29407,28714],{"class":155},[96,29409,29410],{"class":211}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[96,29412,24657],{"class":155},[96,29414,29415,29417],{"class":98,"line":1737},[96,29416,29249],{"class":155},[96,29418,24657],{"class":155},[96,29420,29421],{"class":98,"line":1742},[96,29422,28720],{"class":211},[96,29424,29425],{"class":98,"line":1747},[96,29426,2383],{"emptyLinePlaceholder":23},[96,29428,29429,29431,29433,29435],{"class":98,"line":1761},[96,29430,26532],{"class":1946},[96,29432,29152],{"class":211},[96,29434,28711],{"class":211},[96,29436,24657],{"class":155},[96,29438,29439,29441,29443],{"class":98,"line":1766},[96,29440,29275],{"class":106},[96,29442,29278],{"class":211},[96,29444,24657],{"class":155},[96,29446,29447,29449,29452],{"class":98,"line":2560},[96,29448,28714],{"class":155},[96,29450,29451],{"class":211}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[96,29453,24657],{"class":155},[96,29455,29456,29458],{"class":98,"line":2574},[96,29457,29249],{"class":155},[96,29459,24657],{"class":155},[96,29461,29462],{"class":98,"line":2582},[96,29463,28720],{"class":211},[96,29465,29466],{"class":98,"line":2587},[96,29467,2383],{"emptyLinePlaceholder":23},[96,29469,29470,29472,29474,29476],{"class":98,"line":2593},[96,29471,26299],{"class":1946},[96,29473,29152],{"class":211},[96,29475,28711],{"class":211},[96,29477,24657],{"class":155},[96,29479,29480,29482,29484],{"class":98,"line":2599},[96,29481,29275],{"class":106},[96,29483,29278],{"class":211},[96,29485,24657],{"class":155},[96,29487,29488,29490,29493],{"class":98,"line":2604},[96,29489,28714],{"class":155},[96,29491,29492],{"class":211}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[96,29494,24657],{"class":155},[96,29496,29497,29499],{"class":98,"line":7932},[96,29498,29249],{"class":155},[96,29500,24657],{"class":155},[96,29502,29503],{"class":98,"line":7956},[96,29504,28720],{"class":211},[96,29506,29507],{"class":98,"line":7961},[96,29508,2383],{"emptyLinePlaceholder":23},[96,29510,29511,29513,29515,29517],{"class":98,"line":7967},[96,29512,26532],{"class":1946},[96,29514,29152],{"class":211},[96,29516,28711],{"class":211},[96,29518,24657],{"class":155},[96,29520,29521,29523,29525],{"class":98,"line":7994},[96,29522,29275],{"class":106},[96,29524,29278],{"class":211},[96,29526,24657],{"class":155},[96,29528,29529,29531,29534],{"class":98,"line":7999},[96,29530,28714],{"class":155},[96,29532,29533],{"class":211}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[96,29535,24657],{"class":155},[96,29537,29538,29540],{"class":98,"line":8005},[96,29539,29249],{"class":155},[96,29541,24657],{"class":155},[96,29543,29544],{"class":98,"line":8017},[96,29545,28720],{"class":211},[96,29547,29548],{"class":98,"line":8029},[96,29549,2383],{"emptyLinePlaceholder":23},[96,29551,29552,29554,29556,29558],{"class":98,"line":8041},[96,29553,26532],{"class":1946},[96,29555,29152],{"class":211},[96,29557,28711],{"class":211},[96,29559,24657],{"class":155},[96,29561,29562,29564,29566],{"class":98,"line":9700},[96,29563,29275],{"class":106},[96,29565,29278],{"class":211},[96,29567,24657],{"class":155},[96,29569,29570,29572,29575],{"class":98,"line":9725},[96,29571,28714],{"class":155},[96,29573,29574],{"class":211}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[96,29576,24657],{"class":155},[96,29578,29579,29581],{"class":98,"line":9748},[96,29580,29249],{"class":155},[96,29582,24657],{"class":155},[96,29584,29585],{"class":98,"line":9772},[96,29586,28720],{"class":211},[96,29588,29589],{"class":98,"line":9777},[96,29590,2383],{"emptyLinePlaceholder":23},[96,29592,29593,29595,29597,29599],{"class":98,"line":9782},[96,29594,26299],{"class":1946},[96,29596,29152],{"class":211},[96,29598,28711],{"class":211},[96,29600,24657],{"class":155},[96,29602,29603,29605,29607],{"class":98,"line":9787},[96,29604,29275],{"class":106},[96,29606,29278],{"class":211},[96,29608,24657],{"class":155},[96,29610,29611,29613,29616],{"class":98,"line":9796},[96,29612,28714],{"class":155},[96,29614,29615],{"class":211}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[96,29617,24657],{"class":155},[96,29619,29620,29622],{"class":98,"line":9801},[96,29621,29249],{"class":155},[96,29623,24657],{"class":155},[96,29625,29626],{"class":98,"line":9807},[96,29627,28720],{"class":211},[96,29629,29630],{"class":98,"line":9828},[96,29631,2383],{"emptyLinePlaceholder":23},[96,29633,29634,29637,29639,29641],{"class":98,"line":9834},[96,29635,29636],{"class":1946},"  docker",[96,29638,29152],{"class":211},[96,29640,28711],{"class":211},[96,29642,24657],{"class":155},[96,29644,29645,29647,29649],{"class":98,"line":9848},[96,29646,29275],{"class":106},[96,29648,29278],{"class":211},[96,29650,24657],{"class":155},[96,29652,29653,29655,29658],{"class":98,"line":9854},[96,29654,28714],{"class":155},[96,29656,29657],{"class":211}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[96,29659,24657],{"class":155},[96,29661,29662,29664],{"class":98,"line":9881},[96,29663,29249],{"class":155},[96,29665,24657],{"class":155},[96,29667,29668],{"class":98,"line":9890},[96,29669,28720],{"class":211},[14,29671,29672],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[14,29674,29675],{},[1445,29676],{"alt":18,"src":29677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[14,29679,29680],{},[1445,29681],{"alt":18,"src":29682},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[21982,29684,29686],{"id":29685},"_623清除构建缓存","6.2.3.清除构建缓存",[87,29688,29690],{"className":23807,"code":29689,"language":23809,"meta":18,"style":18},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[93,29691,29692,29697],{"__ignoreMap":18},[96,29693,29694],{"class":98,"line":99},[96,29695,29696],{"class":165},"# 清理BuildKit构建缓存\n",[96,29698,29699,29701,29704,29707],{"class":98,"line":19},[96,29700,26532],{"class":1946},[96,29702,29703],{"class":211}," builder",[96,29705,29706],{"class":211}," prune",[96,29708,29709],{"class":155}," -f\n",[14,29711,29712],{},[1445,29713],{"alt":18,"src":29714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[67,29716,29718],{"id":29717},"_63补充","6.3.补充",[21982,29720,29722],{"id":29721},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[14,29724,29725],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[14,29727,29728],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[14,29730,29731],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[87,29733,29735],{"className":23807,"code":29734,"language":23809,"meta":18,"style":18},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[93,29736,29737,29744],{"__ignoreMap":18},[96,29738,29739,29741],{"class":98,"line":99},[96,29740,27349],{"class":1946},[96,29742,29743],{"class":211}," nginx\n",[96,29745,29746,29748,29751,29754,29756],{"class":98,"line":19},[96,29747,28534],{"class":1946},[96,29749,29750],{"class":211}," echo",[96,29752,29753],{"class":211}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[96,29755,26201],{"class":102},[96,29757,29758],{"class":211}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[14,29760,29761],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[14,29763,29764],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[87,29766,29768],{"className":23807,"code":29767,"language":23809,"meta":18,"style":18},"docker build -t nginx:tuling .\n",[93,29769,29770],{"__ignoreMap":18},[96,29771,29772,29774,29776,29778,29781],{"class":98,"line":99},[96,29773,26532],{"class":1946},[96,29775,28711],{"class":211},[96,29777,28714],{"class":155},[96,29779,29780],{"class":211}," nginx:tuling",[96,29782,28720],{"class":211},[14,29784,29785],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[14,29787,29788],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[87,29790,29792],{"className":23807,"code":29791,"language":23809,"meta":18,"style":18},"docker run -d -p 92:80 nginx:tuling\n",[93,29793,29794],{"__ignoreMap":18},[96,29795,29796,29798,29800,29803,29805,29808],{"class":98,"line":99},[96,29797,26532],{"class":1946},[96,29799,27209],{"class":211},[96,29801,29802],{"class":155}," -d",[96,29804,29195],{"class":155},[96,29806,29807],{"class":211}," 92:80",[96,29809,29810],{"class":211}," nginx:tuling\n",[14,29812,29813,29814],{},"4、访问 ",[345,29815,29818],{"href":29816,"rel":29817},"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",[23850],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[14,29820,29821],{},[1445,29822],{"alt":18,"src":29823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[14,29825,29826],{},[1445,29827],{"alt":18,"src":29828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[21982,29830,29832],{"id":29831},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[14,29834,29835],{},"只需要知道大体流程即可",[14,29837,29838],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[14,29840,29841],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[14,29843,29844],{},"2、在Dockerfile中添加以下内容",[87,29846,29848],{"className":26070,"code":29847,"language":26072,"meta":18,"style":18},"# 基于哪个镜像\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",[93,29849,29850,29855,29860,29865,29870,29875,29880,29885],{"__ignoreMap":18},[96,29851,29852],{"class":98,"line":99},[96,29853,29854],{},"# 基于哪个镜像\n",[96,29856,29857],{"class":98,"line":19},[96,29858,29859],{},"From java:8\n",[96,29861,29862],{"class":98,"line":1162},[96,29863,29864],{},"# 复制文件到容器\n",[96,29866,29867],{"class":98,"line":1177},[96,29868,29869],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[96,29871,29872],{"class":98,"line":1183},[96,29873,29874],{},"# 声明需要暴露的端口\n",[96,29876,29877],{"class":98,"line":1197},[96,29878,29879],{},"EXPOSE 8877\n",[96,29881,29882],{"class":98,"line":1203},[96,29883,29884],{},"# 配置容器启动后执行的命令\n",[96,29886,29887],{"class":98,"line":1294},[96,29888,29889],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[14,29891,29892],{},"3、使用docker build命令构建镜像",[87,29894,29896],{"className":23807,"code":29895,"language":23809,"meta":18,"style":18},"docker build -t tulingmall-member:0.0.5 .\n",[93,29897,29898],{"__ignoreMap":18},[96,29899,29900,29902,29904,29906,29909],{"class":98,"line":99},[96,29901,26532],{"class":1946},[96,29903,28711],{"class":211},[96,29905,28714],{"class":155},[96,29907,29908],{"class":211}," tulingmall-member:0.0.5",[96,29910,28720],{"class":211},[14,29912,29913],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[14,29915,29916],{},[1445,29917],{"alt":18,"src":29918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[14,29920,29921],{},"4、启动镜像，加-d可在后台启动",[87,29923,29925],{"className":23807,"code":29924,"language":23809,"meta":18,"style":18},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[93,29926,29927],{"__ignoreMap":18},[96,29928,29929,29931,29933,29935,29937,29940],{"class":98,"line":99},[96,29930,26532],{"class":1946},[96,29932,27209],{"class":211},[96,29934,29802],{"class":155},[96,29936,29195],{"class":155},[96,29938,29939],{"class":211}," 8877:8877",[96,29941,29942],{"class":211}," tulingmall-member:0.0.5\n",[14,29944,29945],{},"加上JVM参数：",[87,29947,29949],{"className":23807,"code":29948,"language":23809,"meta":18,"style":18},"# --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",[93,29950,29951,29956,29971,29981,29990,29997],{"__ignoreMap":18},[96,29952,29953],{"class":98,"line":99},[96,29954,29955],{"class":165},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[96,29957,29958,29960,29962,29965,29967,29969],{"class":98,"line":19},[96,29959,26532],{"class":1946},[96,29961,27209],{"class":211},[96,29963,29964],{"class":155},"  -d",[96,29966,29195],{"class":155},[96,29968,29939],{"class":211},[96,29970,24657],{"class":155},[96,29972,29973,29975,29978],{"class":98,"line":1162},[96,29974,28107],{"class":106},[96,29976,29977],{"class":211},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[96,29979,29980],{"class":155},"  \\\n",[96,29982,29983,29985,29988],{"class":98,"line":1177},[96,29984,28107],{"class":106},[96,29986,29987],{"class":211},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[96,29989,29980],{"class":155},[96,29991,29992,29995],{"class":98,"line":1183},[96,29993,29994],{"class":106},"--cap-add=SYS_PTRACE  ",[96,29996,26154],{"class":155},[96,29998,29999],{"class":98,"line":1197},[96,30000,30001],{"class":106},"tulingmall-member:0.0.5\n",[14,30003,30004],{},"5、访问会员服务接口",[14,30006,30007],{},[1445,30008],{"alt":18,"src":30009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[21982,30011,30013],{"id":30012},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[14,30015,30016],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[14,30018,30019,30020],{},"阿里云docker镜像仓库：",[345,30021,30022],{"href":30022,"rel":30023},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[23850],[14,30025,30026],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[14,30028,30029],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[14,30031,30032],{},[1445,30033],{"alt":18,"src":30034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[14,30036,30037],{},"要把镜像推送到镜像仓库",[87,30039,30041],{"className":23807,"code":30040,"language":23809,"meta":18,"style":18},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[93,30042,30043],{"__ignoreMap":18},[96,30044,30045,30047,30049,30051],{"class":98,"line":99},[96,30046,26532],{"class":1946},[96,30048,28876],{"class":211},[96,30050,29908],{"class":211},[96,30052,30053],{"class":211}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[14,30055,30056],{},"最后将镜像推送到远程仓库",[87,30058,30060],{"className":23807,"code":30059,"language":23809,"meta":18,"style":18},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[93,30061,30062],{"__ignoreMap":18},[96,30063,30064,30066,30068],{"class":98,"line":99},[96,30065,26532],{"class":1946},[96,30067,28995],{"class":211},[96,30069,30053],{"class":211},[5110,30071,30072],{},"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":18,"searchDepth":19,"depth":19,"links":30074},[30075,30076,30077],{"id":28462,"depth":1162,"text":28463},{"id":28691,"depth":1162,"text":28692},{"id":29717,"depth":1162,"text":29718},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28454,"description":18},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30084,"title":30085,"body":30086,"description":18,"extension":21,"meta":30229,"navigation":23,"path":30230,"seo":30231,"stem":30232,"__hash__":30233},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30087,"toc":30227},[30088,30091,30096,30101,30104,30109,30114,30117,30122,30127,30130,30135,30138,30141,30144,30147,30150,30153,30173,30195,30198,30201,30221,30224],[10,30089,30085],{"id":30090},"_7vscode远程开发",[50,30092,30093],{},[53,30094,30095],{},"插件1：微软Docker工具",[14,30097,30098],{},[1445,30099],{"alt":18,"src":30100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[14,30102,30103],{},"docker扩展插件已经进化为container tools了，请安装container tools",[14,30105,30106],{},[1445,30107],{"alt":18,"src":30108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[50,30110,30111],{"start":19},[53,30112,30113],{},"插件2：微软Docker远程开发工具",[14,30115,30116],{},"下面这是远程开发的插件。",[14,30118,30119],{},[1445,30120],{"alt":18,"src":30121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[14,30123,30124],{},[1445,30125],{"alt":18,"src":30126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[14,30128,30129],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[14,30131,30132],{},[1445,30133],{"alt":18,"src":30134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[14,30136,30137],{},"安装完拓展之后，vscode进行链接：",[14,30139,30140],{},"1.按ctrl+shift+p",[14,30142,30143],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[14,30145,30146],{},"3.选择目前运行的容器",[14,30148,30149],{},"4.VS Code 会在新窗口中打开并连接到容器",[14,30151,30152],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[87,30154,30156],{"className":23807,"code":30155,"language":23809,"meta":18,"style":18},"docker run -v 主机目录:容器目录 image-name\n",[93,30157,30158],{"__ignoreMap":18},[96,30159,30160,30162,30164,30167,30170],{"class":98,"line":99},[96,30161,26532],{"class":1946},[96,30163,27209],{"class":211},[96,30165,30166],{"class":155}," -v",[96,30168,30169],{"class":211}," 主机目录:容器目录",[96,30171,30172],{"class":211}," image-name\n",[87,30174,30176],{"className":23807,"code":30175,"language":23809,"meta":18,"style":18},"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",[93,30177,30178],{"__ignoreMap":18},[96,30179,30180,30182,30184,30187,30189,30192],{"class":98,"line":99},[96,30181,26532],{"class":1946},[96,30183,27209],{"class":211},[96,30185,30186],{"class":155}," -it",[96,30188,30166],{"class":155},[96,30190,30191],{"class":211}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[96,30193,30194],{"class":211}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[14,30196,30197],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[14,30199,30200],{},"查看挂载情况：",[87,30202,30204],{"className":23807,"code":30203,"language":23809,"meta":18,"style":18},"mount | grep -i project\n",[93,30205,30206],{"__ignoreMap":18},[96,30207,30208,30211,30213,30216,30218],{"class":98,"line":99},[96,30209,30210],{"class":1946},"mount",[96,30212,25088],{"class":102},[96,30214,30215],{"class":1946}," grep",[96,30217,26409],{"class":155},[96,30219,30220],{"class":211}," project\n",[14,30222,30223],{},"也可以通过ls来进行查看",[5110,30225,30226],{},"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":18,"searchDepth":19,"depth":19,"links":30228},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30085,"description":18},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30235,"title":30236,"body":30237,"description":23361,"extension":21,"meta":30241,"navigation":23,"path":30243,"seo":30244,"stem":30245,"__hash__":30246},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30238,"toc":30239},[],{"title":18,"searchDepth":19,"depth":19,"links":30240},[],{"category":30242},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30236,"description":23361},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30248,"title":30249,"body":30250,"description":23361,"extension":21,"meta":30254,"navigation":23,"path":30255,"seo":30256,"stem":30257,"__hash__":30258},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30251,"toc":30252},[],{"title":18,"searchDepth":19,"depth":19,"links":30253},[],{"category":30242},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30249,"description":23361},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30260,"title":30261,"body":30262,"description":23361,"extension":21,"meta":30555,"navigation":23,"path":30556,"seo":30557,"stem":30558,"__hash__":30559},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30263,"toc":30553},[30264,30267,30275,30290,30295,30346,30349,30355,30542,30547,30550],[10,30265,30261],{"id":30266},"_1验证深度学习环境",[14,30268,30269,30270],{},"关于环境的安装，看",[345,30271,30274],{"href":30272,"rel":30273},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[23850],"Pytorch-->深度学习",[14,30276,30277,30278,30281,30282,30285,30286,30289],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[93,30279,30280],{},"pytorch-cuda=12.4"," 是一个“ ",[256,30283,30284],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[256,30287,30288],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[14,30291,30292],{},[1445,30293],{"alt":18,"src":30294},"\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",[87,30296,30298],{"className":23807,"code":30297,"language":23809,"meta":18,"style":18},"# 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",[93,30299,30300,30305],{"__ignoreMap":18},[96,30301,30302],{"class":98,"line":99},[96,30303,30304],{"class":165},"# CUDA 12.4\n",[96,30306,30307,30310,30312,30315,30318,30321,30324,30327,30329,30332,30335,30338,30341,30343],{"class":98,"line":19},[96,30308,30309],{"class":1946},"conda",[96,30311,23819],{"class":211},[96,30313,30314],{"class":211}," pytorch==",[96,30316,30317],{"class":155},"2.5.1",[96,30319,30320],{"class":211}," torchvision==",[96,30322,30323],{"class":155},"0.20.1",[96,30325,30326],{"class":211}," torchaudio==",[96,30328,30317],{"class":155},[96,30330,30331],{"class":211}," pytorch-cuda=",[96,30333,30334],{"class":155},"12.4",[96,30336,30337],{"class":155}," -c",[96,30339,30340],{"class":211}," pytorch",[96,30342,30337],{"class":155},[96,30344,30345],{"class":211}," nvidia\n",[14,30347,30348],{},"）：",[14,30350,30351],{},[345,30352,30353],{"href":30353,"rel":30354},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[23850],[87,30356,30360],{"className":30357,"code":30358,"language":30359,"meta":18,"style":18},"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",[93,30361,30362,30367,30375,30380,30390,30406,30411,30421,30458,30465,30477,30493,30498,30508,30520,30530],{"__ignoreMap":18},[96,30363,30364],{"class":98,"line":99},[96,30365,30366],{"class":165},"# 对深度学习环境进行测试\n",[96,30368,30369,30372],{"class":98,"line":19},[96,30370,30371],{"class":102},"import",[96,30373,30374],{"class":106}," torch\n",[96,30376,30377],{"class":98,"line":1162},[96,30378,30379],{"class":165},"# 查看cuda是否被激活\n",[96,30381,30382,30385,30387],{"class":98,"line":1177},[96,30383,30384],{"class":106},"flag",[96,30386,152],{"class":102},[96,30388,30389],{"class":106},"torch.cuda.is_available()\n",[96,30391,30392,30395,30397,30400,30403],{"class":98,"line":1183},[96,30393,30394],{"class":155},"print",[96,30396,107],{"class":106},[96,30398,30399],{"class":211},"\"cuda:\"",[96,30401,30402],{"class":106},", flag)   ",[96,30404,30405],{"class":165},"#返回true的话说明被激活\n",[96,30407,30408],{"class":98,"line":1197},[96,30409,30410],{"class":165},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[96,30412,30413,30416,30418],{"class":98,"line":1203},[96,30414,30415],{"class":106},"ngpu",[96,30417,152],{"class":102},[96,30419,30420],{"class":155},"1\n",[96,30422,30423,30426,30428,30431,30434,30436,30439,30442,30445,30447,30449,30451,30453,30456],{"class":98,"line":1294},[96,30424,30425],{"class":106},"device",[96,30427,152],{"class":102},[96,30429,30430],{"class":106},"torch.device(",[96,30432,30433],{"class":211},"\"cuda:0\"",[96,30435,1687],{"class":102},[96,30437,30438],{"class":106},"(torch.cuda.is_available() ",[96,30440,30441],{"class":102},"and",[96,30443,30444],{"class":106}," ngpu",[96,30446,1067],{"class":102},[96,30448,298],{"class":155},[96,30450,13698],{"class":106},[96,30452,1684],{"class":102},[96,30454,30455],{"class":211}," \"cpu\"",[96,30457,113],{"class":106},[96,30459,30460,30462],{"class":98,"line":1300},[96,30461,30394],{"class":155},[96,30463,30464],{"class":106},"(device)\n",[96,30466,30467,30469,30472,30474],{"class":98,"line":1312},[96,30468,30394],{"class":155},[96,30470,30471],{"class":106},"(torch.cuda.get_device_name(",[96,30473,298],{"class":155},[96,30475,30476],{"class":106},"))\n",[96,30478,30479,30481,30484,30486,30488,30490],{"class":98,"line":1595},[96,30480,30394],{"class":155},[96,30482,30483],{"class":106},"(torch.rand(",[96,30485,178],{"class":155},[96,30487,485],{"class":106},[96,30489,178],{"class":155},[96,30491,30492],{"class":106},").cuda())\n",[96,30494,30495],{"class":98,"line":1600},[96,30496,30497],{"class":165},"# 查看cuda和cudnn的版本\n",[96,30499,30500,30503,30505],{"class":98,"line":1606},[96,30501,30502],{"class":106},"cuda_version",[96,30504,152],{"class":102},[96,30506,30507],{"class":106},"torch.version.cuda\n",[96,30509,30510,30512,30514,30517],{"class":98,"line":1611},[96,30511,30394],{"class":155},[96,30513,107],{"class":106},[96,30515,30516],{"class":211},"\"cuda version\"",[96,30518,30519],{"class":106},",cuda_version)\n",[96,30521,30522,30525,30527],{"class":98,"line":1625},[96,30523,30524],{"class":106},"cudnn_version",[96,30526,152],{"class":102},[96,30528,30529],{"class":106},"torch.backends.cudnn.version()\n",[96,30531,30532,30534,30536,30539],{"class":98,"line":1630},[96,30533,30394],{"class":155},[96,30535,107],{"class":106},[96,30537,30538],{"class":211},"\"cudnn version\"",[96,30540,30541],{"class":106},",cudnn_version)\n",[14,30543,30544],{},[1445,30545],{"alt":18,"src":30546},"\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,30548,30549],{},"cuda:0 指的是一块显卡",[5110,30551,30552],{},"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":18,"searchDepth":19,"depth":19,"links":30554},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30261,"description":23361},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30561,"title":30562,"body":30563,"description":23361,"extension":21,"meta":50367,"navigation":23,"path":50368,"seo":50369,"stem":50370,"__hash__":50371},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30564,"toc":50361},[30565,30568,30572,30576,30579,30584,30589,30592,30597,30602,30607,30610,30614,30619,30623,30628,30631,30636,30639,30642,30645,30648,30653,30656,30661,30666,30671,30676,30679,30683,30686,30691,31295,31300,31303,31308,31311,31314,31778,31781,31784,31787,31790,33841,33844,33849,33854,34649,34652,34657,35435,35439,37098,37102,37816,37820,37824,37829,37834,37839,37842,37847,37852,37857,37862,37867,37871,37876,39158,39163,39166,39169,39172,39327,39330,39333,40549,40554,41249,41253,41257,41262,41267,41270,41275,41280,41285,41290,41295,41300,41305,41310,41315,41320,41325,41330,41335,41340,41345,41350,41355,41360,41365,41370,41375,41380,41385,41390,41395,41400,41405,41410,41415,41420,41424,41428,41431,42909,42913,44560,44564,45258,45262,45265,45268,45812,45815,45819,45822,47219,47223,47226,47804,49591,49595,49598,50358],[10,30566,30562],{"id":30567},"_2经典神经网络",[67,30569,30571],{"id":30570},"_21lenet与alexnet","2.1.LeNet与AlexNet",[21982,30573,30575],{"id":30574},"_211原理介绍","2.1.1.原理介绍",[14,30577,30578],{},"LeNet-5",[50,30580,30581],{},[53,30582,30583],{},"原理",[14,30585,30586],{},[1445,30587],{"alt":18,"src":30588},"\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,30590,30591],{},"B是batch批次；C是channel通道",[50,30593,30594],{"start":19},[53,30595,30596],{},"网络参数详细",[14,30598,30599],{},[1445,30600],{"alt":18,"src":30601},"\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,30603,30604],{},[1445,30605],{"alt":18,"src":30606},"\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,30608,30609],{},"AlexNet",[50,30611,30612],{},[53,30613,30583],{},[14,30615,30616],{},[1445,30617],{"alt":18,"src":30618},"\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",[50,30620,30621],{"start":19},[53,30622,30596],{},[14,30624,30625],{},[1445,30626],{"alt":18,"src":30627},"\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,30629,30630],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[14,30632,30633],{},[1445,30634],{"alt":18,"src":30635},"\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,30637,30638],{},"数据处理中的图像增强操作:",[14,30640,30641],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[14,30643,30644],{},"①增加数据量，保证训练数据充足；②防止过拟合",[14,30646,30647],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[14,30649,30650],{},[1445,30651],{"alt":18,"src":30652},"\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,30654,30655],{},"提升网络精确度的方法：LRN正则化",[14,30657,30658],{},[1445,30659],{"alt":18,"src":30660},"\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,30662,30663],{},[1445,30664],{"alt":18,"src":30665},"\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",[50,30667,30668],{"start":1162},[53,30669,30670],{},"AlexNet的总结",[14,30672,30673],{},[1445,30674],{"alt":18,"src":30675},"\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,30677,30678],{},"比LeNet模型要深一丢丢",[21982,30680,30682],{"id":30681},"_212代码实现","2.1.2.代码实现",[14,30684,30685],{},"（1）LeNet",[50,30687,30688],{},[53,30689,30690],{},"模型搭建",[87,30692,30694],{"className":30357,"code":30693,"language":30359,"meta":18,"style":18},"# 导入库\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",[93,30695,30696,30701,30707,30712,30725,30730,30742,30746,30766,30771,30776,30787,30792,30811,30815,30820,30869,30881,30886,30915,30950,30977,30982,30994,30999,31019,31038,31057,31061,31066,31076,31093,31104,31119,31130,31141,31156,31171,31182,31189,31193,31207,31212,31235,31240,31245,31250,31254,31259,31264,31274],{"__ignoreMap":18},[96,30697,30698],{"class":98,"line":99},[96,30699,30700],{"class":165},"# 导入库\n",[96,30702,30703,30705],{"class":98,"line":19},[96,30704,30371],{"class":102},[96,30706,30374],{"class":106},[96,30708,30709],{"class":98,"line":1162},[96,30710,30711],{"class":165},"# 导入神经网络层\n",[96,30713,30714,30717,30720,30722],{"class":98,"line":1177},[96,30715,30716],{"class":102},"from",[96,30718,30719],{"class":106}," torch ",[96,30721,30371],{"class":102},[96,30723,30724],{"class":106}," nn\n",[96,30726,30727],{"class":98,"line":1183},[96,30728,30729],{"class":165},"# 导入展示神经网络参数的包\n",[96,30731,30732,30734,30737,30739],{"class":98,"line":1197},[96,30733,30716],{"class":102},[96,30735,30736],{"class":106}," torchsummary ",[96,30738,30371],{"class":102},[96,30740,30741],{"class":106}," summary\n",[96,30743,30744],{"class":98,"line":1203},[96,30745,2383],{"emptyLinePlaceholder":23},[96,30747,30748,30750,30753,30755,30758,30760,30763],{"class":98,"line":1294},[96,30749,14678],{"class":102},[96,30751,30752],{"class":1946}," LeNet",[96,30754,107],{"class":106},[96,30756,30757],{"class":1946},"nn",[96,30759,665],{"class":106},[96,30761,30762],{"class":1946},"Module",[96,30764,30765],{"class":106},"):\n",[96,30767,30768],{"class":98,"line":1300},[96,30769,30770],{"class":165},"    # 模型初始化:\n",[96,30772,30773],{"class":98,"line":1312},[96,30774,30775],{"class":165},"    # 定义一些网络层和激活函数\n",[96,30777,30778,30781,30784],{"class":98,"line":1595},[96,30779,30780],{"class":102},"    def",[96,30782,30783],{"class":155}," __init__",[96,30785,30786],{"class":106},"(self):\n",[96,30788,30789],{"class":98,"line":1600},[96,30790,30791],{"class":165},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[96,30793,30794,30797,30800,30803,30806,30809],{"class":98,"line":1606},[96,30795,30796],{"class":155},"        super",[96,30798,30799],{"class":106},"(LeNet,",[96,30801,30802],{"class":155},"self",[96,30804,30805],{"class":106},").",[96,30807,30808],{"class":155},"__init__",[96,30810,1959],{"class":106},[96,30812,30813],{"class":98,"line":1611},[96,30814,2383],{"emptyLinePlaceholder":23},[96,30816,30817],{"class":98,"line":1625},[96,30818,30819],{"class":165},"        # 定义网络层\n",[96,30821,30822,30825,30828,30830,30833,30836,30838,30840,30842,30845,30847,30849,30851,30854,30856,30858,30860,30863,30865,30867],{"class":98,"line":1630},[96,30823,30824],{"class":155},"        self",[96,30826,30827],{"class":106},".c1",[96,30829,152],{"class":102},[96,30831,30832],{"class":106},"nn.Conv2d(",[96,30834,30835],{"class":5200},"in_channels",[96,30837,152],{"class":102},[96,30839,324],{"class":155},[96,30841,485],{"class":106},[96,30843,30844],{"class":5200},"out_channels",[96,30846,152],{"class":102},[96,30848,451],{"class":155},[96,30850,485],{"class":106},[96,30852,30853],{"class":5200},"kernel_size",[96,30855,152],{"class":102},[96,30857,426],{"class":155},[96,30859,485],{"class":106},[96,30861,30862],{"class":5200},"padding",[96,30864,152],{"class":102},[96,30866,184],{"class":155},[96,30868,113],{"class":106},[96,30870,30871,30873,30876,30878],{"class":98,"line":1636},[96,30872,30824],{"class":155},[96,30874,30875],{"class":106},".sig",[96,30877,152],{"class":102},[96,30879,30880],{"class":106},"nn.Sigmoid()\n",[96,30882,30883],{"class":98,"line":1657},[96,30884,30885],{"class":165},"        # 定义池化\n",[96,30887,30888,30890,30893,30895,30898,30900,30902,30904,30906,30909,30911,30913],{"class":98,"line":1662},[96,30889,30824],{"class":155},[96,30891,30892],{"class":106},".s2",[96,30894,152],{"class":102},[96,30896,30897],{"class":106},"nn.AvgPool2d(",[96,30899,30853],{"class":5200},[96,30901,152],{"class":102},[96,30903,184],{"class":155},[96,30905,485],{"class":106},[96,30907,30908],{"class":5200},"stride",[96,30910,152],{"class":102},[96,30912,184],{"class":155},[96,30914,113],{"class":106},[96,30916,30917,30919,30922,30924,30926,30928,30930,30932,30934,30936,30938,30940,30942,30944,30946,30948],{"class":98,"line":1676},[96,30918,30824],{"class":155},[96,30920,30921],{"class":106},".c3",[96,30923,152],{"class":102},[96,30925,30832],{"class":106},[96,30927,30835],{"class":5200},[96,30929,152],{"class":102},[96,30931,451],{"class":155},[96,30933,485],{"class":106},[96,30935,30844],{"class":5200},[96,30937,152],{"class":102},[96,30939,708],{"class":155},[96,30941,485],{"class":106},[96,30943,30853],{"class":5200},[96,30945,152],{"class":102},[96,30947,426],{"class":155},[96,30949,113],{"class":106},[96,30951,30952,30954,30957,30959,30961,30963,30965,30967,30969,30971,30973,30975],{"class":98,"line":1681},[96,30953,30824],{"class":155},[96,30955,30956],{"class":106},".s4",[96,30958,152],{"class":102},[96,30960,30897],{"class":106},[96,30962,30853],{"class":5200},[96,30964,152],{"class":102},[96,30966,184],{"class":155},[96,30968,485],{"class":106},[96,30970,30908],{"class":5200},[96,30972,152],{"class":102},[96,30974,184],{"class":155},[96,30976,113],{"class":106},[96,30978,30979],{"class":98,"line":1710},[96,30980,30981],{"class":165},"        # 定义平展层\n",[96,30983,30984,30986,30989,30991],{"class":98,"line":1715},[96,30985,30824],{"class":155},[96,30987,30988],{"class":106},".flatten",[96,30990,152],{"class":102},[96,30992,30993],{"class":106},"nn.Flatten()\n",[96,30995,30996],{"class":98,"line":1732},[96,30997,30998],{"class":165},"        # 定义全连接层\n",[96,31000,31001,31003,31006,31008,31011,31013,31015,31017],{"class":98,"line":1737},[96,31002,30824],{"class":155},[96,31004,31005],{"class":106},".f5",[96,31007,152],{"class":102},[96,31009,31010],{"class":106},"nn.Linear(",[96,31012,3970],{"class":155},[96,31014,485],{"class":106},[96,31016,924],{"class":155},[96,31018,113],{"class":106},[96,31020,31021,31023,31026,31028,31030,31032,31034,31036],{"class":98,"line":1742},[96,31022,30824],{"class":155},[96,31024,31025],{"class":106},".f6",[96,31027,152],{"class":102},[96,31029,31010],{"class":106},[96,31031,924],{"class":155},[96,31033,485],{"class":106},[96,31035,818],{"class":155},[96,31037,113],{"class":106},[96,31039,31040,31042,31045,31047,31049,31051,31053,31055],{"class":98,"line":1747},[96,31041,30824],{"class":155},[96,31043,31044],{"class":106},".f7",[96,31046,152],{"class":102},[96,31048,31010],{"class":106},[96,31050,818],{"class":155},[96,31052,485],{"class":106},[96,31054,553],{"class":155},[96,31056,113],{"class":106},[96,31058,31059],{"class":98,"line":1761},[96,31060,2383],{"emptyLinePlaceholder":23},[96,31062,31063],{"class":98,"line":1766},[96,31064,31065],{"class":165},"    # 写工具->写前向传播\n",[96,31067,31068,31070,31073],{"class":98,"line":2560},[96,31069,30780],{"class":102},[96,31071,31072],{"class":1946}," forward",[96,31074,31075],{"class":106},"(self,x):\n",[96,31077,31078,31081,31083,31085,31088,31090],{"class":98,"line":2574},[96,31079,31080],{"class":106},"        x",[96,31082,152],{"class":102},[96,31084,30802],{"class":155},[96,31086,31087],{"class":106},".sig(",[96,31089,30802],{"class":155},[96,31091,31092],{"class":106},".c1(x))\n",[96,31094,31095,31097,31099,31101],{"class":98,"line":2582},[96,31096,31080],{"class":106},[96,31098,152],{"class":102},[96,31100,30802],{"class":155},[96,31102,31103],{"class":106},".s2(x)\n",[96,31105,31106,31108,31110,31112,31114,31116],{"class":98,"line":2587},[96,31107,31080],{"class":106},[96,31109,152],{"class":102},[96,31111,30802],{"class":155},[96,31113,31087],{"class":106},[96,31115,30802],{"class":155},[96,31117,31118],{"class":106},".c3(x))\n",[96,31120,31121,31123,31125,31127],{"class":98,"line":2593},[96,31122,31080],{"class":106},[96,31124,152],{"class":102},[96,31126,30802],{"class":155},[96,31128,31129],{"class":106},".s4(x)\n",[96,31131,31132,31134,31136,31138],{"class":98,"line":2599},[96,31133,31080],{"class":106},[96,31135,152],{"class":102},[96,31137,30802],{"class":155},[96,31139,31140],{"class":106},".flatten(x)\n",[96,31142,31143,31145,31147,31149,31151,31153],{"class":98,"line":2604},[96,31144,31080],{"class":106},[96,31146,152],{"class":102},[96,31148,30802],{"class":155},[96,31150,31087],{"class":106},[96,31152,30802],{"class":155},[96,31154,31155],{"class":106},".f5(x))\n",[96,31157,31158,31160,31162,31164,31166,31168],{"class":98,"line":7932},[96,31159,31080],{"class":106},[96,31161,152],{"class":102},[96,31163,30802],{"class":155},[96,31165,31087],{"class":106},[96,31167,30802],{"class":155},[96,31169,31170],{"class":106},".f6(x))\n",[96,31172,31173,31175,31177,31179],{"class":98,"line":7956},[96,31174,31080],{"class":106},[96,31176,152],{"class":102},[96,31178,30802],{"class":155},[96,31180,31181],{"class":106},".f7(x)\n",[96,31183,31184,31186],{"class":98,"line":7961},[96,31185,14736],{"class":102},[96,31187,31188],{"class":106}," x\n",[96,31190,31191],{"class":98,"line":7967},[96,31192,2383],{"emptyLinePlaceholder":23},[96,31194,31195,31197,31200,31202,31205],{"class":98,"line":7994},[96,31196,1514],{"class":102},[96,31198,31199],{"class":155}," __name__",[96,31201,2932],{"class":102},[96,31203,31204],{"class":211},"\"__main__\"",[96,31206,3722],{"class":106},[96,31208,31209],{"class":98,"line":7999},[96,31210,31211],{"class":165},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[96,31213,31214,31217,31219,31221,31224,31226,31229,31231,31233],{"class":98,"line":8005},[96,31215,31216],{"class":106},"    device",[96,31218,152],{"class":102},[96,31220,30430],{"class":106},[96,31222,31223],{"class":211},"\"cuda\"",[96,31225,1687],{"class":102},[96,31227,31228],{"class":106}," torch.cuda.is_available() ",[96,31230,1684],{"class":102},[96,31232,30455],{"class":211},[96,31234,113],{"class":106},[96,31236,31237],{"class":98,"line":8017},[96,31238,31239],{"class":165},"    # 如果就是想指定用cpu用下方代码:\n",[96,31241,31242],{"class":98,"line":8029},[96,31243,31244],{"class":165},"    # device=\"cpu\"\n",[96,31246,31247],{"class":98,"line":8041},[96,31248,31249],{"class":165},"    # print(device)\n",[96,31251,31252],{"class":98,"line":9700},[96,31253,2383],{"emptyLinePlaceholder":23},[96,31255,31256],{"class":98,"line":9725},[96,31257,31258],{"class":165},"    # 实例化模型\n",[96,31260,31261],{"class":98,"line":9748},[96,31262,31263],{"class":165},"    # 将模型放到设备中去运行\n",[96,31265,31266,31269,31271],{"class":98,"line":9772},[96,31267,31268],{"class":106},"    model",[96,31270,152],{"class":102},[96,31272,31273],{"class":106},"LeNet().to(device)\n",[96,31275,31276,31279,31282,31284,31286,31288,31290,31292],{"class":98,"line":9777},[96,31277,31278],{"class":155},"    print",[96,31280,31281],{"class":106},"(summary(model,(",[96,31283,324],{"class":155},[96,31285,485],{"class":106},[96,31287,1008],{"class":155},[96,31289,485],{"class":106},[96,31291,1008],{"class":155},[96,31293,31294],{"class":106},")))\n",[14,31296,31297],{},[1445,31298],{"alt":18,"src":31299},"\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,31301,31302],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[50,31304,31305],{"start":19},[53,31306,31307],{},"训练",[14,31309,31310],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[14,31312,31313],{},"在训练之前可以将数据展示看一下",[87,31315,31317],{"className":30357,"code":31316,"language":30359,"meta":18,"style":18},"# 建立画图的函数，用于展示数据\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",[93,31318,31319,31324,31329,31341,31353,31366,31371,31383,31388,31400,31405,31417,31421,31425,31446,31458,31463,31484,31495,31499,31504,31522,31533,31538,31549,31554,31565,31569,31574,31589,31602,31607,31612,31625,31638,31651,31656,31660,31665,31685,31702,31722,31735,31748,31758,31773],{"__ignoreMap":18},[96,31320,31321],{"class":98,"line":99},[96,31322,31323],{"class":165},"# 建立画图的函数，用于展示数据\n",[96,31325,31326],{"class":98,"line":19},[96,31327,31328],{"class":165},"# torchvision中包含很多内置的数据集\n",[96,31330,31331,31333,31336,31338],{"class":98,"line":1162},[96,31332,30716],{"class":102},[96,31334,31335],{"class":106}," sklearn.externals.array_api_compat.torch ",[96,31337,30371],{"class":102},[96,31339,31340],{"class":106}," squeeze\n",[96,31342,31343,31345,31348,31350],{"class":98,"line":1177},[96,31344,30716],{"class":102},[96,31346,31347],{"class":106}," torchvision.datasets ",[96,31349,30371],{"class":102},[96,31351,31352],{"class":106}," FashionMNIST\n",[96,31354,31355,31357,31360,31363],{"class":98,"line":1183},[96,31356,30371],{"class":102},[96,31358,31359],{"class":106}," numpy ",[96,31361,31362],{"class":102},"as",[96,31364,31365],{"class":106}," np\n",[96,31367,31368],{"class":98,"line":1197},[96,31369,31370],{"class":165},"# 引入处理数据集的包\n",[96,31372,31373,31375,31378,31380],{"class":98,"line":1203},[96,31374,30716],{"class":102},[96,31376,31377],{"class":106}," torchvision ",[96,31379,30371],{"class":102},[96,31381,31382],{"class":106}," transforms\n",[96,31384,31385],{"class":98,"line":1294},[96,31386,31387],{"class":165},"# 从torch库中引入数据处理的包\n",[96,31389,31390,31392,31395,31397],{"class":98,"line":1300},[96,31391,30371],{"class":102},[96,31393,31394],{"class":106}," torch.utils.data ",[96,31396,31362],{"class":102},[96,31398,31399],{"class":106}," Data\n",[96,31401,31402],{"class":98,"line":1312},[96,31403,31404],{"class":165},"# 导入画图的库\n",[96,31406,31407,31409,31412,31414],{"class":98,"line":1595},[96,31408,30371],{"class":102},[96,31410,31411],{"class":106}," matplotlib.pyplot ",[96,31413,31362],{"class":102},[96,31415,31416],{"class":106}," plt\n",[96,31418,31419],{"class":98,"line":1600},[96,31420,2383],{"emptyLinePlaceholder":23},[96,31422,31423],{"class":98,"line":1606},[96,31424,2383],{"emptyLinePlaceholder":23},[96,31426,31427,31430,31432,31435,31438,31440,31443],{"class":98,"line":1611},[96,31428,31429],{"class":106},"train_data",[96,31431,152],{"class":102},[96,31433,31434],{"class":106},"FashionMNIST(",[96,31436,31437],{"class":5200},"root",[96,31439,152],{"class":102},[96,31441,31442],{"class":211},"'.\u002Fdata'",[96,31444,31445],{"class":106},",\n",[96,31447,31448,31451,31453,31456],{"class":98,"line":1625},[96,31449,31450],{"class":5200},"                        train",[96,31452,152],{"class":102},[96,31454,31455],{"class":155},"True",[96,31457,31445],{"class":106},[96,31459,31460],{"class":98,"line":1630},[96,31461,31462],{"class":165},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[96,31464,31465,31468,31470,31473,31476,31478,31481],{"class":98,"line":1636},[96,31466,31467],{"class":5200},"                        transform",[96,31469,152],{"class":102},[96,31471,31472],{"class":106},"transforms.Compose([transforms.Resize(",[96,31474,31475],{"class":5200},"size",[96,31477,152],{"class":102},[96,31479,31480],{"class":155},"224",[96,31482,31483],{"class":106},"),transforms.ToTensor()]),\n",[96,31485,31486,31489,31491,31493],{"class":98,"line":1657},[96,31487,31488],{"class":5200},"                        download",[96,31490,152],{"class":102},[96,31492,31455],{"class":155},[96,31494,113],{"class":106},[96,31496,31497],{"class":98,"line":1662},[96,31498,2383],{"emptyLinePlaceholder":23},[96,31500,31501],{"class":98,"line":1676},[96,31502,31503],{"class":165},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[96,31505,31506,31509,31511,31514,31517,31519],{"class":98,"line":1681},[96,31507,31508],{"class":106},"train_loader",[96,31510,152],{"class":102},[96,31512,31513],{"class":106},"Data.DataLoader(",[96,31515,31516],{"class":5200},"dataset",[96,31518,152],{"class":102},[96,31520,31521],{"class":106},"train_data,\n",[96,31523,31524,31527,31529,31531],{"class":98,"line":1710},[96,31525,31526],{"class":5200},"                             batch_size",[96,31528,152],{"class":102},[96,31530,310],{"class":155},[96,31532,31445],{"class":106},[96,31534,31535],{"class":98,"line":1715},[96,31536,31537],{"class":165},"                             # 数据是否打乱\n",[96,31539,31540,31543,31545,31547],{"class":98,"line":1732},[96,31541,31542],{"class":5200},"                             shuffle",[96,31544,152],{"class":102},[96,31546,31455],{"class":155},[96,31548,31445],{"class":106},[96,31550,31551],{"class":98,"line":1737},[96,31552,31553],{"class":165},"                             # 规定加载数据的进程\n",[96,31555,31556,31559,31561,31563],{"class":98,"line":1742},[96,31557,31558],{"class":5200},"                             num_workers",[96,31560,152],{"class":102},[96,31562,298],{"class":155},[96,31564,113],{"class":106},[96,31566,31567],{"class":98,"line":1747},[96,31568,2383],{"emptyLinePlaceholder":23},[96,31570,31571],{"class":98,"line":1761},[96,31572,31573],{"class":165},"# 获得一个batch的数据\n",[96,31575,31576,31578,31581,31583,31586],{"class":98,"line":1766},[96,31577,3008],{"class":102},[96,31579,31580],{"class":106}," step,(b_x,b_y) ",[96,31582,26022],{"class":102},[96,31584,31585],{"class":155}," enumerate",[96,31587,31588],{"class":106},"(train_loader):\n",[96,31590,31591,31593,31596,31598,31600],{"class":98,"line":2560},[96,31592,3084],{"class":102},[96,31594,31595],{"class":106}," step ",[96,31597,1067],{"class":102},[96,31599,4076],{"class":155},[96,31601,3722],{"class":106},[96,31603,31604],{"class":98,"line":2574},[96,31605,31606],{"class":102},"        break\n",[96,31608,31609],{"class":98,"line":2582},[96,31610,31611],{"class":165},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[96,31613,31614,31617,31619,31622],{"class":98,"line":2587},[96,31615,31616],{"class":106},"batch_x",[96,31618,152],{"class":102},[96,31620,31621],{"class":106},"b_x.squeeze().numpy()  ",[96,31623,31624],{"class":165},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[96,31626,31627,31630,31632,31635],{"class":98,"line":2593},[96,31628,31629],{"class":106},"batch_y",[96,31631,152],{"class":102},[96,31633,31634],{"class":106},"b_y.numpy()   ",[96,31636,31637],{"class":165},"#将张量转换成功numpy数组\n",[96,31639,31640,31643,31645,31648],{"class":98,"line":2599},[96,31641,31642],{"class":106},"class_label",[96,31644,152],{"class":102},[96,31646,31647],{"class":106},"train_data.classes  ",[96,31649,31650],{"class":165},"#训练集标签\n",[96,31652,31653],{"class":98,"line":2604},[96,31654,31655],{"class":165},"# print(class_label)\n",[96,31657,31658],{"class":98,"line":7932},[96,31659,2383],{"emptyLinePlaceholder":23},[96,31661,31662],{"class":98,"line":7956},[96,31663,31664],{"class":165},"# 可视化一个batch的图像\n",[96,31666,31667,31670,31673,31675,31677,31679,31681,31683],{"class":98,"line":7961},[96,31668,31669],{"class":106},"plt.figure(",[96,31671,31672],{"class":5200},"figsize",[96,31674,152],{"class":102},[96,31676,107],{"class":106},[96,31678,605],{"class":155},[96,31680,485],{"class":106},[96,31682,426],{"class":155},[96,31684,30476],{"class":106},[96,31686,31687,31689,31692,31694,31697,31699],{"class":98,"line":7967},[96,31688,3008],{"class":102},[96,31690,31691],{"class":106}," ii ",[96,31693,26022],{"class":102},[96,31695,31696],{"class":106}," np.arange(",[96,31698,7342],{"class":155},[96,31700,31701],{"class":106},"(batch_y)):\n",[96,31703,31704,31707,31709,31711,31713,31716,31718,31720],{"class":98,"line":7994},[96,31705,31706],{"class":106},"    plt.subplot(",[96,31708,400],{"class":155},[96,31710,485],{"class":106},[96,31712,708],{"class":155},[96,31714,31715],{"class":106},",ii ",[96,31717,588],{"class":102},[96,31719,25097],{"class":155},[96,31721,113],{"class":106},[96,31723,31724,31727,31730,31732],{"class":98,"line":7999},[96,31725,31726],{"class":106},"    plt.imshow(batch_x[ii,:,:],",[96,31728,31729],{"class":5200},"cmap",[96,31731,152],{"class":102},[96,31733,31734],{"class":106},"plt.cm.gray)\n",[96,31736,31737,31740,31742,31744,31746],{"class":98,"line":8005},[96,31738,31739],{"class":106},"    plt.title(class_label[batch_y[ii]],",[96,31741,31475],{"class":5200},[96,31743,152],{"class":102},[96,31745,553],{"class":155},[96,31747,113],{"class":106},[96,31749,31750,31753,31756],{"class":98,"line":8017},[96,31751,31752],{"class":106},"    plt.axis(",[96,31754,31755],{"class":211},"\"off\"",[96,31757,113],{"class":106},[96,31759,31760,31763,31766,31768,31771],{"class":98,"line":8029},[96,31761,31762],{"class":106},"    plt.subplots_adjust(",[96,31764,31765],{"class":5200},"wspace",[96,31767,152],{"class":102},[96,31769,31770],{"class":155},"0.05",[96,31772,113],{"class":106},[96,31774,31775],{"class":98,"line":8041},[96,31776,31777],{"class":106},"plt.show()\n",[14,31779,31780],{},"用matplotlib进行展示的过程可以后续再补",[14,31782,31783],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[14,31785,31786],{},"训练次数就是按照批次过整个训练集数据的次数",[14,31788,31789],{},"模型训练：",[87,31791,31793],{"className":30357,"code":31792,"language":30359,"meta":18,"style":18},"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",[93,31794,31795,31802,31809,31813,31825,31831,31842,31852,31862,31872,31882,31887,31899,31909,31913,31917,31922,31933,31946,31957,31974,31985,32024,32040,32052,32063,32068,32079,32095,32106,32117,32128,32135,32139,32144,32149,32153,32158,32168,32189,32193,32197,32202,32207,32212,32232,32236,32241,32251,32255,32260,32269,32274,32279,32284,32294,32298,32302,32307,32312,32322,32327,32337,32342,32351,32356,32365,32370,32379,32383,32388,32398,32402,32406,32411,32426,32454,32469,32473,32478,32483,32492,32497,32506,32511,32520,32525,32534,32539,32548,32553,32562,32567,32580,32585,32595,32600,32610,32616,32622,32628,32634,32645,32651,32671,32677,32688,32694,32700,32706,32712,32718,32724,32730,32750,32756,32772,32778,32792,32798,32813,32819,32828,32834,32843,32849,32855,32864,32870,32881,32887,32906,32912,32923,32929,32949,32965,32971,32985,32991,32997,33008,33014,33020,33030,33036,33047,33053,33063,33068,33074,33123,33170,33175,33181,33200,33206,33226,33232,33238,33248,33253,33259,33275,33320,33326,33332,33338,33349,33355,33361,33367,33385,33399,33408,33417,33426,33435,33441,33447,33455,33460,33466,33477,33483,33503,33509,33515,33521,33538,33544,33550,33556,33562,33568,33595,33619,33625,33631,33637,33648,33659,33665,33682,33705,33728,33734,33739,33748,33758,33764,33769,33775,33788,33794,33805,33816,33835],{"__ignoreMap":18},[96,31796,31797,31799],{"class":98,"line":99},[96,31798,30371],{"class":102},[96,31800,31801],{"class":106}," copy\n",[96,31803,31804,31806],{"class":98,"line":19},[96,31805,30371],{"class":102},[96,31807,31808],{"class":106}," time\n",[96,31810,31811],{"class":98,"line":1162},[96,31812,2383],{"emptyLinePlaceholder":23},[96,31814,31815,31817,31820,31822],{"class":98,"line":1177},[96,31816,30371],{"class":102},[96,31818,31819],{"class":106}," pandas ",[96,31821,31362],{"class":102},[96,31823,31824],{"class":106}," pd\n",[96,31826,31827,31829],{"class":98,"line":1183},[96,31828,30371],{"class":102},[96,31830,30374],{"class":106},[96,31832,31833,31835,31837,31839],{"class":98,"line":1197},[96,31834,30716],{"class":102},[96,31836,31394],{"class":106},[96,31838,30371],{"class":102},[96,31840,31841],{"class":106}," Dataset\n",[96,31843,31844,31846,31848,31850],{"class":98,"line":1203},[96,31845,30716],{"class":102},[96,31847,31347],{"class":106},[96,31849,30371],{"class":102},[96,31851,31352],{"class":106},[96,31853,31854,31856,31858,31860],{"class":98,"line":1294},[96,31855,30716],{"class":102},[96,31857,31377],{"class":106},[96,31859,30371],{"class":102},[96,31861,31382],{"class":106},[96,31863,31864,31866,31868,31870],{"class":98,"line":1300},[96,31865,30371],{"class":102},[96,31867,31394],{"class":106},[96,31869,31362],{"class":102},[96,31871,31399],{"class":106},[96,31873,31874,31876,31878,31880],{"class":98,"line":1312},[96,31875,30371],{"class":102},[96,31877,31411],{"class":106},[96,31879,31362],{"class":102},[96,31881,31416],{"class":106},[96,31883,31884],{"class":98,"line":1595},[96,31885,31886],{"class":165},"# 导入模型\n",[96,31888,31889,31891,31894,31896],{"class":98,"line":1600},[96,31890,30716],{"class":102},[96,31892,31893],{"class":106}," model ",[96,31895,30371],{"class":102},[96,31897,31898],{"class":106}," LeNet\n",[96,31900,31901,31903,31905,31907],{"class":98,"line":1606},[96,31902,30716],{"class":102},[96,31904,30719],{"class":106},[96,31906,30371],{"class":102},[96,31908,30724],{"class":106},[96,31910,31911],{"class":98,"line":1611},[96,31912,2383],{"emptyLinePlaceholder":23},[96,31914,31915],{"class":98,"line":1625},[96,31916,2383],{"emptyLinePlaceholder":23},[96,31918,31919],{"class":98,"line":1630},[96,31920,31921],{"class":165},"# 处理训练集与验证集函数--->划分数据集\n",[96,31923,31924,31927,31930],{"class":98,"line":1636},[96,31925,31926],{"class":102},"def",[96,31928,31929],{"class":1946}," train_val_data_process",[96,31931,31932],{"class":106},"():\n",[96,31934,31935,31938,31940,31942,31944],{"class":98,"line":1657},[96,31936,31937],{"class":106},"    train_data",[96,31939,152],{"class":102},[96,31941,31434],{"class":106},[96,31943,31442],{"class":211},[96,31945,31445],{"class":106},[96,31947,31948,31951,31953,31955],{"class":98,"line":1662},[96,31949,31950],{"class":5200},"                            train",[96,31952,152],{"class":102},[96,31954,31455],{"class":155},[96,31956,31445],{"class":106},[96,31958,31959,31962,31964,31966,31968,31970,31972],{"class":98,"line":1676},[96,31960,31961],{"class":5200},"                            transform",[96,31963,152],{"class":102},[96,31965,31472],{"class":106},[96,31967,31475],{"class":5200},[96,31969,152],{"class":102},[96,31971,1008],{"class":155},[96,31973,31483],{"class":106},[96,31975,31976,31979,31981,31983],{"class":98,"line":1681},[96,31977,31978],{"class":5200},"                            download",[96,31980,152],{"class":102},[96,31982,31455],{"class":155},[96,31984,113],{"class":106},[96,31986,31987,31990,31992,31995,31998,32000,32003,32005,32007,32010,32012,32014,32017,32019,32021],{"class":98,"line":1710},[96,31988,31989],{"class":106},"    train_data,val_data",[96,31991,152],{"class":102},[96,31993,31994],{"class":106},"Data.random_split(train_data,[",[96,31996,31997],{"class":155},"round",[96,31999,107],{"class":106},[96,32001,32002],{"class":155},"0.8",[96,32004,562],{"class":102},[96,32006,7342],{"class":155},[96,32008,32009],{"class":106},"(train_data)),",[96,32011,31997],{"class":155},[96,32013,107],{"class":106},[96,32015,32016],{"class":155},"0.2",[96,32018,562],{"class":102},[96,32020,7342],{"class":155},[96,32022,32023],{"class":106},"(train_data))])\n",[96,32025,32026,32029,32031,32034,32036,32038],{"class":98,"line":1715},[96,32027,32028],{"class":106},"    train_dataloader ",[96,32030,152],{"class":102},[96,32032,32033],{"class":106}," Data.DataLoader(",[96,32035,31516],{"class":5200},[96,32037,152],{"class":102},[96,32039,31521],{"class":106},[96,32041,32042,32045,32047,32050],{"class":98,"line":1732},[96,32043,32044],{"class":5200},"                                       batch_size",[96,32046,152],{"class":102},[96,32048,32049],{"class":155},"128",[96,32051,31445],{"class":106},[96,32053,32054,32057,32059,32061],{"class":98,"line":1737},[96,32055,32056],{"class":5200},"                                       shuffle",[96,32058,152],{"class":102},[96,32060,31455],{"class":155},[96,32062,31445],{"class":106},[96,32064,32065],{"class":98,"line":1742},[96,32066,32067],{"class":165},"                                       # 规定8个进程\n",[96,32069,32070,32073,32075,32077],{"class":98,"line":1747},[96,32071,32072],{"class":5200},"                                       num_workers",[96,32074,152],{"class":102},[96,32076,502],{"class":155},[96,32078,113],{"class":106},[96,32080,32081,32084,32086,32088,32090,32092],{"class":98,"line":1761},[96,32082,32083],{"class":106},"    val_dataloader",[96,32085,152],{"class":102},[96,32087,31513],{"class":106},[96,32089,31516],{"class":5200},[96,32091,152],{"class":102},[96,32093,32094],{"class":106},"val_data,\n",[96,32096,32097,32100,32102,32104],{"class":98,"line":1766},[96,32098,32099],{"class":5200},"                                   batch_size",[96,32101,152],{"class":102},[96,32103,32049],{"class":155},[96,32105,31445],{"class":106},[96,32107,32108,32111,32113,32115],{"class":98,"line":2560},[96,32109,32110],{"class":5200},"                                   shuffle",[96,32112,152],{"class":102},[96,32114,31455],{"class":155},[96,32116,31445],{"class":106},[96,32118,32119,32122,32124,32126],{"class":98,"line":2574},[96,32120,32121],{"class":5200},"                                   num_workers",[96,32123,152],{"class":102},[96,32125,502],{"class":155},[96,32127,113],{"class":106},[96,32129,32130,32132],{"class":98,"line":2582},[96,32131,4073],{"class":102},[96,32133,32134],{"class":106}," train_dataloader,val_dataloader\n",[96,32136,32137],{"class":98,"line":2587},[96,32138,2383],{"emptyLinePlaceholder":23},[96,32140,32141],{"class":98,"line":2593},[96,32142,32143],{"class":165},"# 验证是否出错\n",[96,32145,32146],{"class":98,"line":2599},[96,32147,32148],{"class":165},"# train_val_data_process()\n",[96,32150,32151],{"class":98,"line":2604},[96,32152,2383],{"emptyLinePlaceholder":23},[96,32154,32155],{"class":98,"line":7932},[96,32156,32157],{"class":165},"# 定义模型训练函数\n",[96,32159,32160,32162,32165],{"class":98,"line":7956},[96,32161,31926],{"class":102},[96,32163,32164],{"class":1946}," train_model_process",[96,32166,32167],{"class":106},"(model,train_dataloader,val_dataloader,num_epochs):\n",[96,32169,32170,32172,32174,32176,32178,32180,32182,32184,32187],{"class":98,"line":7961},[96,32171,31216],{"class":106},[96,32173,152],{"class":102},[96,32175,30430],{"class":106},[96,32177,31223],{"class":211},[96,32179,1687],{"class":102},[96,32181,31228],{"class":106},[96,32183,1684],{"class":102},[96,32185,32186],{"class":211}," 'cpu'",[96,32188,113],{"class":106},[96,32190,32191],{"class":98,"line":7967},[96,32192,2383],{"emptyLinePlaceholder":23},[96,32194,32195],{"class":98,"line":7994},[96,32196,2383],{"emptyLinePlaceholder":23},[96,32198,32199],{"class":98,"line":7999},[96,32200,32201],{"class":165},"    # 定义优化器\n",[96,32203,32204],{"class":98,"line":8005},[96,32205,32206],{"class":165},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[96,32208,32209],{"class":98,"line":8017},[96,32210,32211],{"class":165},"    # lr为学习率\n",[96,32213,32214,32217,32219,32222,32225,32227,32230],{"class":98,"line":8029},[96,32215,32216],{"class":106},"    optimizer",[96,32218,152],{"class":102},[96,32220,32221],{"class":106},"torch.optim.Adam(model.parameters(),",[96,32223,32224],{"class":5200},"lr",[96,32226,152],{"class":102},[96,32228,32229],{"class":155},"0.001",[96,32231,113],{"class":106},[96,32233,32234],{"class":98,"line":8041},[96,32235,2383],{"emptyLinePlaceholder":23},[96,32237,32238],{"class":98,"line":9700},[96,32239,32240],{"class":165},"    # 定义损失函数使用交叉熵损失函数\n",[96,32242,32243,32246,32248],{"class":98,"line":9725},[96,32244,32245],{"class":106},"    criterion",[96,32247,152],{"class":102},[96,32249,32250],{"class":106},"nn.CrossEntropyLoss()\n",[96,32252,32253],{"class":98,"line":9748},[96,32254,2383],{"emptyLinePlaceholder":23},[96,32256,32257],{"class":98,"line":9772},[96,32258,32259],{"class":165},"    # 将模型放到GPU中进行训练\n",[96,32261,32262,32264,32266],{"class":98,"line":9777},[96,32263,31268],{"class":106},[96,32265,152],{"class":102},[96,32267,32268],{"class":106},"model.to(device)\n",[96,32270,32271],{"class":98,"line":9782},[96,32272,32273],{"class":165},"    # 复制当前模型的参数\n",[96,32275,32276],{"class":98,"line":9787},[96,32277,32278],{"class":165},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[96,32280,32281],{"class":98,"line":9796},[96,32282,32283],{"class":165},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[96,32285,32286,32289,32291],{"class":98,"line":9801},[96,32287,32288],{"class":106},"    best_model_wts",[96,32290,152],{"class":102},[96,32292,32293],{"class":106},"copy.deepcopy(model.state_dict())\n",[96,32295,32296],{"class":98,"line":9807},[96,32297,2383],{"emptyLinePlaceholder":23},[96,32299,32300],{"class":98,"line":9828},[96,32301,2383],{"emptyLinePlaceholder":23},[96,32303,32304],{"class":98,"line":9834},[96,32305,32306],{"class":165},"    # 初始化参数\n",[96,32308,32309],{"class":98,"line":9848},[96,32310,32311],{"class":165},"    # 最高准确度\n",[96,32313,32314,32317,32319],{"class":98,"line":9854},[96,32315,32316],{"class":106},"    best_acc",[96,32318,152],{"class":102},[96,32320,32321],{"class":155},"0.0\n",[96,32323,32324],{"class":98,"line":9881},[96,32325,32326],{"class":165},"    # 训练集损失列表\n",[96,32328,32329,32332,32334],{"class":98,"line":9890},[96,32330,32331],{"class":106},"    train_loss_all",[96,32333,152],{"class":102},[96,32335,32336],{"class":106},"[]\n",[96,32338,32339],{"class":98,"line":9896},[96,32340,32341],{"class":165},"    # 验证集函数列表\n",[96,32343,32344,32347,32349],{"class":98,"line":9904},[96,32345,32346],{"class":106},"    val_loss_all",[96,32348,152],{"class":102},[96,32350,32336],{"class":106},[96,32352,32353],{"class":98,"line":9909},[96,32354,32355],{"class":165},"    # 训练集准确度列表\n",[96,32357,32358,32361,32363],{"class":98,"line":16588},[96,32359,32360],{"class":106},"    train_acc_all",[96,32362,152],{"class":102},[96,32364,32336],{"class":106},[96,32366,32367],{"class":98,"line":16594},[96,32368,32369],{"class":165},"    # 验证集准确度列表\n",[96,32371,32372,32375,32377],{"class":98,"line":16617},[96,32373,32374],{"class":106},"    val_acc_all",[96,32376,152],{"class":102},[96,32378,32336],{"class":106},[96,32380,32381],{"class":98,"line":16623},[96,32382,2383],{"emptyLinePlaceholder":23},[96,32384,32385],{"class":98,"line":16646},[96,32386,32387],{"class":165},"    # 保存当前时间--->方便看每轮训练的时间\n",[96,32389,32390,32393,32395],{"class":98,"line":16660},[96,32391,32392],{"class":106},"    since",[96,32394,152],{"class":102},[96,32396,32397],{"class":106},"time.time()\n",[96,32399,32400],{"class":98,"line":16680},[96,32401,2383],{"emptyLinePlaceholder":23},[96,32403,32404],{"class":98,"line":16686},[96,32405,2383],{"emptyLinePlaceholder":23},[96,32407,32408],{"class":98,"line":16697},[96,32409,32410],{"class":165},"    # 准备工作完成--->开始训练模型\n",[96,32412,32413,32415,32418,32420,32423],{"class":98,"line":16720},[96,32414,3184],{"class":102},[96,32416,32417],{"class":106}," epoch ",[96,32419,26022],{"class":102},[96,32421,32422],{"class":155}," range",[96,32424,32425],{"class":106},"(num_epochs):\n",[96,32427,32428,32431,32433,32436,32439,32441,32443,32445,32448,32450,32452],{"class":98,"line":16742},[96,32429,32430],{"class":155},"        print",[96,32432,107],{"class":106},[96,32434,32435],{"class":211},"\"Epoch ",[96,32437,32438],{"class":155},"{}",[96,32440,691],{"class":211},[96,32442,32438],{"class":155},[96,32444,358],{"class":211},[96,32446,32447],{"class":106},".format(epoch,num_epochs",[96,32449,639],{"class":102},[96,32451,324],{"class":155},[96,32453,30476],{"class":106},[96,32455,32456,32458,32460,32463,32465,32467],{"class":98,"line":16747},[96,32457,32430],{"class":155},[96,32459,107],{"class":106},[96,32461,32462],{"class":211},"\"-\"",[96,32464,562],{"class":102},[96,32466,553],{"class":155},[96,32468,113],{"class":106},[96,32470,32471],{"class":98,"line":16753},[96,32472,2383],{"emptyLinePlaceholder":23},[96,32474,32475],{"class":98,"line":16767},[96,32476,32477],{"class":165},"        # 初始化参数\n",[96,32479,32480],{"class":98,"line":16780},[96,32481,32482],{"class":165},"        # 训练集损失函数\n",[96,32484,32485,32488,32490],{"class":98,"line":16785},[96,32486,32487],{"class":106},"        train_loss",[96,32489,152],{"class":102},[96,32491,32321],{"class":155},[96,32493,32494],{"class":98,"line":16799},[96,32495,32496],{"class":165},"        # 训练集准确度\n",[96,32498,32499,32502,32504],{"class":98,"line":16804},[96,32500,32501],{"class":106},"        train_corrects",[96,32503,152],{"class":102},[96,32505,3068],{"class":155},[96,32507,32508],{"class":98,"line":16810},[96,32509,32510],{"class":165},"        # 验证集损失函数\n",[96,32512,32513,32516,32518],{"class":98,"line":16815},[96,32514,32515],{"class":106},"        val_loss",[96,32517,152],{"class":102},[96,32519,32321],{"class":155},[96,32521,32522],{"class":98,"line":16829},[96,32523,32524],{"class":165},"        # 验证集准确度\n",[96,32526,32527,32530,32532],{"class":98,"line":16834},[96,32528,32529],{"class":106},"        val_corrects",[96,32531,152],{"class":102},[96,32533,3068],{"class":155},[96,32535,32536],{"class":98,"line":16839},[96,32537,32538],{"class":165},"        # 训练集样本数量\n",[96,32540,32541,32544,32546],{"class":98,"line":16853},[96,32542,32543],{"class":106},"        train_num",[96,32545,152],{"class":102},[96,32547,3068],{"class":155},[96,32549,32550],{"class":98,"line":16865},[96,32551,32552],{"class":165},"        # 验证集样本数量\n",[96,32554,32555,32558,32560],{"class":98,"line":16870},[96,32556,32557],{"class":106},"        val_num",[96,32559,152],{"class":102},[96,32561,3068],{"class":155},[96,32563,32564],{"class":98,"line":16883},[96,32565,32566],{"class":165},"        # 将数据放到设备,并开始训练\n",[96,32568,32569,32571,32573,32575,32577],{"class":98,"line":16888},[96,32570,3386],{"class":102},[96,32572,31580],{"class":106},[96,32574,26022],{"class":102},[96,32576,31585],{"class":155},[96,32578,32579],{"class":106},"(train_dataloader):\n",[96,32581,32582],{"class":98,"line":16893},[96,32583,32584],{"class":165},"            # 将特征放入到训练设备\n",[96,32586,32587,32590,32592],{"class":98,"line":16898},[96,32588,32589],{"class":106},"            b_x",[96,32591,152],{"class":102},[96,32593,32594],{"class":106},"b_x.to(device)\n",[96,32596,32597],{"class":98,"line":16911},[96,32598,32599],{"class":165},"            # 将标签放入到训练设备当中\n",[96,32601,32602,32605,32607],{"class":98,"line":16916},[96,32603,32604],{"class":106},"            b_y",[96,32606,152],{"class":102},[96,32608,32609],{"class":106},"b_y.to(device)\n",[96,32611,32613],{"class":98,"line":32612},98,[96,32614,32615],{"class":165},"            # 设置模型为训练模式\n",[96,32617,32619],{"class":98,"line":32618},99,[96,32620,32621],{"class":106},"            model.train()\n",[96,32623,32625],{"class":98,"line":32624},100,[96,32626,32627],{"class":165},"            # 将数据放到模型当中,开始前向传播\n",[96,32629,32631],{"class":98,"line":32630},101,[96,32632,32633],{"class":165},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[96,32635,32637,32640,32642],{"class":98,"line":32636},102,[96,32638,32639],{"class":106},"            output",[96,32641,152],{"class":102},[96,32643,32644],{"class":106},"model(b_x)\n",[96,32646,32648],{"class":98,"line":32647},103,[96,32649,32650],{"class":165},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[96,32652,32654,32657,32659,32662,32665,32667,32669],{"class":98,"line":32653},104,[96,32655,32656],{"class":106},"            pre_lab",[96,32658,152],{"class":102},[96,32660,32661],{"class":106},"torch.argmax(output,",[96,32663,32664],{"class":5200},"dim",[96,32666,152],{"class":102},[96,32668,324],{"class":155},[96,32670,113],{"class":106},[96,32672,32674],{"class":98,"line":32673},105,[96,32675,32676],{"class":165},"            # 计算每一个batch的损失函数\n",[96,32678,32680,32683,32685],{"class":98,"line":32679},106,[96,32681,32682],{"class":106},"            loss",[96,32684,152],{"class":102},[96,32686,32687],{"class":106},"criterion(output,b_y)\n",[96,32689,32691],{"class":98,"line":32690},107,[96,32692,32693],{"class":165},"            # 将梯度初始化为0\n",[96,32695,32697],{"class":98,"line":32696},108,[96,32698,32699],{"class":106},"            optimizer.zero_grad()\n",[96,32701,32703],{"class":98,"line":32702},109,[96,32704,32705],{"class":165},"            # 梯度置为0后再进行反向传播\n",[96,32707,32709],{"class":98,"line":32708},110,[96,32710,32711],{"class":106},"            loss.backward()\n",[96,32713,32715],{"class":98,"line":32714},111,[96,32716,32717],{"class":165},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[96,32719,32721],{"class":98,"line":32720},112,[96,32722,32723],{"class":106},"            optimizer.step()\n",[96,32725,32727],{"class":98,"line":32726},113,[96,32728,32729],{"class":165},"            # loss.item()指的是batch的平均损失\n",[96,32731,32733,32736,32738,32741,32743,32746,32748],{"class":98,"line":32732},114,[96,32734,32735],{"class":106},"            train_loss",[96,32737,9461],{"class":102},[96,32739,32740],{"class":106},"loss.item()",[96,32742,562],{"class":102},[96,32744,32745],{"class":106},"b_x.size(",[96,32747,298],{"class":155},[96,32749,113],{"class":106},[96,32751,32753],{"class":98,"line":32752},115,[96,32754,32755],{"class":165},"            # 计算每个批次中正确预测的数量\n",[96,32757,32759,32762,32764,32767,32769],{"class":98,"line":32758},116,[96,32760,32761],{"class":106},"            train_corrects",[96,32763,9461],{"class":102},[96,32765,32766],{"class":106},"torch.sum(pre_lab",[96,32768,2932],{"class":102},[96,32770,32771],{"class":106},"b_y.data)\n",[96,32773,32775],{"class":98,"line":32774},117,[96,32776,32777],{"class":165},"            # 计算目前为止一共处理了多少样本\n",[96,32779,32781,32784,32786,32788,32790],{"class":98,"line":32780},118,[96,32782,32783],{"class":106},"            train_num",[96,32785,9461],{"class":102},[96,32787,32745],{"class":106},[96,32789,298],{"class":155},[96,32791,113],{"class":106},[96,32793,32795],{"class":98,"line":32794},119,[96,32796,32797],{"class":165},"        # 验证数据\n",[96,32799,32801,32803,32806,32808,32810],{"class":98,"line":32800},120,[96,32802,3386],{"class":102},[96,32804,32805],{"class":106}," step ,(b_x,b_y) ",[96,32807,26022],{"class":102},[96,32809,31585],{"class":155},[96,32811,32812],{"class":106},"(val_dataloader):\n",[96,32814,32816],{"class":98,"line":32815},121,[96,32817,32818],{"class":165},"            # 将特征放到验证设备当中\n",[96,32820,32822,32824,32826],{"class":98,"line":32821},122,[96,32823,32589],{"class":106},[96,32825,152],{"class":102},[96,32827,32594],{"class":106},[96,32829,32831],{"class":98,"line":32830},123,[96,32832,32833],{"class":165},"            # 将标签放到放到训练设备当中\n",[96,32835,32837,32839,32841],{"class":98,"line":32836},124,[96,32838,32604],{"class":106},[96,32840,152],{"class":102},[96,32842,32609],{"class":106},[96,32844,32846],{"class":98,"line":32845},125,[96,32847,32848],{"class":165},"            # 开启验证模式，设置模型为评估模式\n",[96,32850,32852],{"class":98,"line":32851},126,[96,32853,32854],{"class":106},"            model.eval()\n",[96,32856,32858,32861],{"class":98,"line":32857},127,[96,32859,32860],{"class":102},"            with",[96,32862,32863],{"class":106}," torch.no_grad():\n",[96,32865,32867],{"class":98,"line":32866},128,[96,32868,32869],{"class":165},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[96,32871,32873,32876,32878],{"class":98,"line":32872},129,[96,32874,32875],{"class":106},"                output ",[96,32877,152],{"class":102},[96,32879,32880],{"class":106}," model(b_x)\n",[96,32882,32884],{"class":98,"line":32883},130,[96,32885,32886],{"class":165},"                # 查找每一行中最大值对应的下标\n",[96,32888,32890,32893,32895,32898,32900,32902,32904],{"class":98,"line":32889},131,[96,32891,32892],{"class":106},"                pre_lab ",[96,32894,152],{"class":102},[96,32896,32897],{"class":106}," torch.argmax(output, ",[96,32899,32664],{"class":5200},[96,32901,152],{"class":102},[96,32903,324],{"class":155},[96,32905,113],{"class":106},[96,32907,32909],{"class":98,"line":32908},132,[96,32910,32911],{"class":165},"                # 计算验证集上的当前 batch 损失\n",[96,32913,32915,32918,32920],{"class":98,"line":32914},133,[96,32916,32917],{"class":106},"                val_batch_loss ",[96,32919,152],{"class":102},[96,32921,32922],{"class":106}," criterion(output, b_y)\n",[96,32924,32926],{"class":98,"line":32925},134,[96,32927,32928],{"class":165},"                # 对损失函数进行累加（按样本数加权）\n",[96,32930,32932,32935,32937,32940,32942,32945,32947],{"class":98,"line":32931},135,[96,32933,32934],{"class":106},"                val_loss ",[96,32936,9461],{"class":102},[96,32938,32939],{"class":106}," val_batch_loss.item() ",[96,32941,562],{"class":102},[96,32943,32944],{"class":106}," b_x.size(",[96,32946,298],{"class":155},[96,32948,113],{"class":106},[96,32950,32952,32955,32957,32960,32962],{"class":98,"line":32951},136,[96,32953,32954],{"class":106},"                val_corrects ",[96,32956,9461],{"class":102},[96,32958,32959],{"class":106}," torch.sum(pre_lab ",[96,32961,2932],{"class":102},[96,32963,32964],{"class":106}," b_y.data)\n",[96,32966,32968],{"class":98,"line":32967},137,[96,32969,32970],{"class":165},"                # 当前用于验证的样本数量\n",[96,32972,32974,32977,32979,32981,32983],{"class":98,"line":32973},138,[96,32975,32976],{"class":106},"            val_num ",[96,32978,9461],{"class":102},[96,32980,32944],{"class":106},[96,32982,298],{"class":155},[96,32984,113],{"class":106},[96,32986,32988],{"class":98,"line":32987},139,[96,32989,32990],{"class":165},"        # 计算并保存每一次迭代的loss值和准确率\n",[96,32992,32994],{"class":98,"line":32993},140,[96,32995,32996],{"class":165},"        # 计算并保存训练集的loss值\n",[96,32998,33000,33003,33005],{"class":98,"line":32999},141,[96,33001,33002],{"class":106},"        train_loss_all.append(train_loss",[96,33004,691],{"class":102},[96,33006,33007],{"class":106},"train_num)\n",[96,33009,33011],{"class":98,"line":33010},142,[96,33012,33013],{"class":165},"        # 取双精度\n",[96,33015,33017],{"class":98,"line":33016},143,[96,33018,33019],{"class":165},"        # 计算并保存训练集的准确率\n",[96,33021,33023,33026,33028],{"class":98,"line":33022},144,[96,33024,33025],{"class":106},"        train_acc_all.append(train_corrects.double().item()",[96,33027,691],{"class":102},[96,33029,33007],{"class":106},[96,33031,33033],{"class":98,"line":33032},145,[96,33034,33035],{"class":165},"        # 计算并保存验证集的loss值\n",[96,33037,33039,33042,33044],{"class":98,"line":33038},146,[96,33040,33041],{"class":106},"        val_loss_all.append(val_loss",[96,33043,691],{"class":102},[96,33045,33046],{"class":106},"val_num)\n",[96,33048,33050],{"class":98,"line":33049},147,[96,33051,33052],{"class":165},"        # 计算并保存验证集的准确率\n",[96,33054,33056,33059,33061],{"class":98,"line":33055},148,[96,33057,33058],{"class":106},"        val_acc_all.append(val_corrects.double().item()",[96,33060,691],{"class":102},[96,33062,33046],{"class":106},[96,33064,33066],{"class":98,"line":33065},149,[96,33067,2383],{"emptyLinePlaceholder":23},[96,33069,33071],{"class":98,"line":33070},150,[96,33072,33073],{"class":165},"        # 打印训练一轮的loss值和准确率\n",[96,33075,33077,33079,33081,33083,33085,33088,33090,33093,33095,33098,33100,33102,33104,33106,33109,33111,33113,33116,33118,33120],{"class":98,"line":33076},151,[96,33078,32430],{"class":155},[96,33080,107],{"class":106},[96,33082,3575],{"class":211},[96,33084,32438],{"class":155},[96,33086,33087],{"class":211},"train loss:",[96,33089,1003],{"class":155},[96,33091,33092],{"class":102},":.4f",[96,33094,1053],{"class":155},[96,33096,33097],{"class":211}," train acc:",[96,33099,1003],{"class":155},[96,33101,33092],{"class":102},[96,33103,1053],{"class":155},[96,33105,3575],{"class":211},[96,33107,33108],{"class":106},".format(epoch,train_loss_all[",[96,33110,639],{"class":102},[96,33112,324],{"class":155},[96,33114,33115],{"class":106},"],train_acc_all[",[96,33117,639],{"class":102},[96,33119,324],{"class":155},[96,33121,33122],{"class":106},"]))\n",[96,33124,33126,33128,33130,33132,33134,33137,33139,33141,33143,33146,33148,33150,33152,33154,33157,33159,33161,33164,33166,33168],{"class":98,"line":33125},152,[96,33127,32430],{"class":155},[96,33129,107],{"class":106},[96,33131,3575],{"class":211},[96,33133,32438],{"class":155},[96,33135,33136],{"class":211},"val loss:",[96,33138,1003],{"class":155},[96,33140,33092],{"class":102},[96,33142,1053],{"class":155},[96,33144,33145],{"class":211}," val acc:",[96,33147,1003],{"class":155},[96,33149,33092],{"class":102},[96,33151,1053],{"class":155},[96,33153,3575],{"class":211},[96,33155,33156],{"class":106},".format(epoch,val_loss_all[",[96,33158,639],{"class":102},[96,33160,324],{"class":155},[96,33162,33163],{"class":106},"],val_acc_all[",[96,33165,639],{"class":102},[96,33167,324],{"class":155},[96,33169,33122],{"class":106},[96,33171,33173],{"class":98,"line":33172},153,[96,33174,2383],{"emptyLinePlaceholder":23},[96,33176,33178],{"class":98,"line":33177},154,[96,33179,33180],{"class":165},"        # 判断准确度--->保存最优模型\n",[96,33182,33184,33186,33189,33191,33193,33195,33197],{"class":98,"line":33183},155,[96,33185,2480],{"class":102},[96,33187,33188],{"class":106}," val_acc_all[",[96,33190,639],{"class":102},[96,33192,324],{"class":155},[96,33194,1047],{"class":106},[96,33196,1067],{"class":102},[96,33198,33199],{"class":106},"best_acc:\n",[96,33201,33203],{"class":98,"line":33202},156,[96,33204,33205],{"class":165},"            # 保存当前模型准确度\n",[96,33207,33209,33212,33214,33216,33219,33221,33223],{"class":98,"line":33208},157,[96,33210,33211],{"class":106},"            best_acc:",[96,33213,146],{"class":155},[96,33215,152],{"class":102},[96,33217,33218],{"class":106},"val_acc_all[",[96,33220,639],{"class":102},[96,33222,324],{"class":155},[96,33224,33225],{"class":106},"]\n",[96,33227,33229],{"class":98,"line":33228},158,[96,33230,33231],{"class":165},"            # 保存当前的准确度\n",[96,33233,33235],{"class":98,"line":33234},159,[96,33236,33237],{"class":165},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[96,33239,33241,33244,33246],{"class":98,"line":33240},160,[96,33242,33243],{"class":106},"            best_model_wts",[96,33245,152],{"class":102},[96,33247,32293],{"class":106},[96,33249,33251],{"class":98,"line":33250},161,[96,33252,2383],{"emptyLinePlaceholder":23},[96,33254,33256],{"class":98,"line":33255},162,[96,33257,33258],{"class":165},"        # 计算耗时\n",[96,33260,33262,33265,33267,33270,33272],{"class":98,"line":33261},163,[96,33263,33264],{"class":106},"        time_use",[96,33266,152],{"class":102},[96,33268,33269],{"class":106},"time.time()",[96,33271,639],{"class":102},[96,33273,33274],{"class":106},"since\n",[96,33276,33278,33280,33282,33285,33287,33290,33292,33294,33296,33298,33300,33303,33306,33309,33311,33314,33316,33318],{"class":98,"line":33277},164,[96,33279,32430],{"class":155},[96,33281,107],{"class":106},[96,33283,33284],{"class":211},"'训练和验证耗费的时间",[96,33286,1003],{"class":155},[96,33288,33289],{"class":102},":.0f",[96,33291,1053],{"class":155},[96,33293,651],{"class":211},[96,33295,1003],{"class":155},[96,33297,33289],{"class":102},[96,33299,1053],{"class":155},[96,33301,33302],{"class":211},"s'",[96,33304,33305],{"class":106},".format(time_use",[96,33307,33308],{"class":102},"\u002F\u002F",[96,33310,1014],{"class":155},[96,33312,33313],{"class":106},",time_use",[96,33315,435],{"class":102},[96,33317,1014],{"class":155},[96,33319,30476],{"class":106},[96,33321,33323],{"class":98,"line":33322},165,[96,33324,33325],{"class":165},"    # 选择最优参数\n",[96,33327,33329],{"class":98,"line":33328},166,[96,33330,33331],{"class":165},"    # 加载最高准确率下的模型参数\n",[96,33333,33335],{"class":98,"line":33334},167,[96,33336,33337],{"class":165},"    # model.load_state_dict(best_model_wts)\n",[96,33339,33341,33344,33347],{"class":98,"line":33340},168,[96,33342,33343],{"class":106},"    torch.save(model.state_dict(best_model_wts), ",[96,33345,33346],{"class":211},"'.\u002Fbest_model.pth'",[96,33348,113],{"class":106},[96,33350,33352],{"class":98,"line":33351},169,[96,33353,33354],{"class":165},"    # 或者写成\n",[96,33356,33358],{"class":98,"line":33357},170,[96,33359,33360],{"class":165},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[96,33362,33364],{"class":98,"line":33363},171,[96,33365,33366],{"class":165},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[96,33368,33370,33373,33375,33378,33381,33383],{"class":98,"line":33369},172,[96,33371,33372],{"class":106},"    train_process",[96,33374,152],{"class":102},[96,33376,33377],{"class":106},"pd.DataFrame(",[96,33379,33380],{"class":5200},"data",[96,33382,152],{"class":102},[96,33384,1529],{"class":106},[96,33386,33388,33391,33393,33396],{"class":98,"line":33387},173,[96,33389,33390],{"class":211},"        \"epoch\"",[96,33392,966],{"class":106},[96,33394,33395],{"class":155},"range",[96,33397,33398],{"class":106},"(num_epochs),\n",[96,33400,33402,33405],{"class":98,"line":33401},174,[96,33403,33404],{"class":211},"        \"train_loss_all\"",[96,33406,33407],{"class":106},":train_loss_all,\n",[96,33409,33411,33414],{"class":98,"line":33410},175,[96,33412,33413],{"class":211},"        \"val_loss_all\"",[96,33415,33416],{"class":106},":val_loss_all,\n",[96,33418,33420,33423],{"class":98,"line":33419},176,[96,33421,33422],{"class":211},"        \"train_acc_all\"",[96,33424,33425],{"class":106},":train_acc_all,\n",[96,33427,33429,33432],{"class":98,"line":33428},177,[96,33430,33431],{"class":211},"        \"val_acc_all\"",[96,33433,33434],{"class":106},":val_acc_all\n",[96,33436,33438],{"class":98,"line":33437},178,[96,33439,33440],{"class":106},"    })\n",[96,33442,33444],{"class":98,"line":33443},179,[96,33445,33446],{"class":165},"    # 返回训练保存的过程\n",[96,33448,33450,33452],{"class":98,"line":33449},180,[96,33451,4073],{"class":102},[96,33453,33454],{"class":106}," train_process\n",[96,33456,33458],{"class":98,"line":33457},181,[96,33459,2383],{"emptyLinePlaceholder":23},[96,33461,33463],{"class":98,"line":33462},182,[96,33464,33465],{"class":165},"# 将loss值和精度按照图片的形式展示出来\n",[96,33467,33469,33471,33474],{"class":98,"line":33468},183,[96,33470,31926],{"class":102},[96,33472,33473],{"class":1946}," matplot_acc_loss",[96,33475,33476],{"class":106},"(train_process):\n",[96,33478,33480],{"class":98,"line":33479},184,[96,33481,33482],{"class":165},"    # 设置图的大小\n",[96,33484,33486,33489,33491,33493,33495,33497,33499,33501],{"class":98,"line":33485},185,[96,33487,33488],{"class":106},"    plt.figure(",[96,33490,31672],{"class":5200},[96,33492,152],{"class":102},[96,33494,107],{"class":106},[96,33496,605],{"class":155},[96,33498,485],{"class":106},[96,33500,400],{"class":155},[96,33502,30476],{"class":106},[96,33504,33506],{"class":98,"line":33505},186,[96,33507,33508],{"class":165},"    # 设置图中有几张图\n",[96,33510,33512],{"class":98,"line":33511},187,[96,33513,33514],{"class":165},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[96,33516,33518],{"class":98,"line":33517},188,[96,33519,33520],{"class":165},"    # ①loss图\n",[96,33522,33524,33526,33528,33530,33532,33534,33536],{"class":98,"line":33523},189,[96,33525,31706],{"class":106},[96,33527,324],{"class":155},[96,33529,485],{"class":106},[96,33531,184],{"class":155},[96,33533,485],{"class":106},[96,33535,324],{"class":155},[96,33537,113],{"class":106},[96,33539,33541],{"class":98,"line":33540},190,[96,33542,33543],{"class":165},"    # 补充:\n",[96,33545,33547],{"class":98,"line":33546},191,[96,33548,33549],{"class":165},"    # plt.subplot(nrows, ncols, index)\n",[96,33551,33553],{"class":98,"line":33552},192,[96,33554,33555],{"class":165},"    # nrows：行数\n",[96,33557,33559],{"class":98,"line":33558},193,[96,33560,33561],{"class":165},"    # ncols：列数\n",[96,33563,33565],{"class":98,"line":33564},194,[96,33566,33567],{"class":165},"    # index：目前选中第几个子图（从1开始）\n",[96,33569,33571,33574,33577,33580,33583,33585,33588,33590,33593],{"class":98,"line":33570},195,[96,33572,33573],{"class":106},"    plt.plot(train_process[",[96,33575,33576],{"class":211},"\"epoch\"",[96,33578,33579],{"class":106},"],train_process.train_loss_all,",[96,33581,33582],{"class":211},"'ro-'",[96,33584,485],{"class":106},[96,33586,33587],{"class":5200},"label",[96,33589,152],{"class":102},[96,33591,33592],{"class":211},"'train loss'",[96,33594,113],{"class":106},[96,33596,33598,33600,33602,33605,33608,33610,33612,33614,33617],{"class":98,"line":33597},196,[96,33599,33573],{"class":106},[96,33601,33576],{"class":211},[96,33603,33604],{"class":106},"],train_process.val_loss_all,",[96,33606,33607],{"class":211},"'bs--'",[96,33609,485],{"class":106},[96,33611,33587],{"class":5200},[96,33613,152],{"class":102},[96,33615,33616],{"class":211},"'val loss'",[96,33618,113],{"class":106},[96,33620,33622],{"class":98,"line":33621},197,[96,33623,33624],{"class":165},"    # 添加一个图例\n",[96,33626,33628],{"class":98,"line":33627},198,[96,33629,33630],{"class":106},"    plt.legend()\n",[96,33632,33634],{"class":98,"line":33633},199,[96,33635,33636],{"class":165},"    # 给轴添加标签\n",[96,33638,33640,33643,33646],{"class":98,"line":33639},200,[96,33641,33642],{"class":106},"    plt.xlabel(",[96,33644,33645],{"class":211},"'epoch'",[96,33647,113],{"class":106},[96,33649,33651,33654,33657],{"class":98,"line":33650},201,[96,33652,33653],{"class":106},"    plt.ylabel(",[96,33655,33656],{"class":211},"'loss'",[96,33658,113],{"class":106},[96,33660,33662],{"class":98,"line":33661},202,[96,33663,33664],{"class":165},"    # ②准确度图\n",[96,33666,33668,33670,33672,33674,33676,33678,33680],{"class":98,"line":33667},203,[96,33669,31706],{"class":106},[96,33671,324],{"class":155},[96,33673,485],{"class":106},[96,33675,184],{"class":155},[96,33677,485],{"class":106},[96,33679,184],{"class":155},[96,33681,113],{"class":106},[96,33683,33685,33687,33689,33692,33694,33696,33698,33700,33703],{"class":98,"line":33684},204,[96,33686,33573],{"class":106},[96,33688,33576],{"class":211},[96,33690,33691],{"class":106},"],train_process.train_acc_all,",[96,33693,33582],{"class":211},[96,33695,485],{"class":106},[96,33697,33587],{"class":5200},[96,33699,152],{"class":102},[96,33701,33702],{"class":211},"'train acc'",[96,33704,113],{"class":106},[96,33706,33708,33710,33712,33715,33717,33719,33721,33723,33726],{"class":98,"line":33707},205,[96,33709,33573],{"class":106},[96,33711,33576],{"class":211},[96,33713,33714],{"class":106},"],train_process.val_acc_all,",[96,33716,33607],{"class":211},[96,33718,485],{"class":106},[96,33720,33587],{"class":5200},[96,33722,152],{"class":102},[96,33724,33725],{"class":211},"'val acc'",[96,33727,113],{"class":106},[96,33729,33731],{"class":98,"line":33730},206,[96,33732,33733],{"class":165},"    # 添加图例\n",[96,33735,33737],{"class":98,"line":33736},207,[96,33738,33630],{"class":106},[96,33740,33742,33744,33746],{"class":98,"line":33741},208,[96,33743,33642],{"class":106},[96,33745,33576],{"class":211},[96,33747,113],{"class":106},[96,33749,33751,33753,33756],{"class":98,"line":33750},209,[96,33752,33653],{"class":106},[96,33754,33755],{"class":211},"\"acc\"",[96,33757,113],{"class":106},[96,33759,33761],{"class":98,"line":33760},210,[96,33762,33763],{"class":106},"    plt.show()\n",[96,33765,33767],{"class":98,"line":33766},211,[96,33768,2383],{"emptyLinePlaceholder":23},[96,33770,33772],{"class":98,"line":33771},212,[96,33773,33774],{"class":165},"# 正式开始训练:\n",[96,33776,33778,33780,33782,33784,33786],{"class":98,"line":33777},213,[96,33779,1514],{"class":102},[96,33781,31199],{"class":155},[96,33783,2932],{"class":102},[96,33785,31204],{"class":211},[96,33787,3722],{"class":106},[96,33789,33791],{"class":98,"line":33790},214,[96,33792,33793],{"class":165},"    # 将模型实例化\n",[96,33795,33797,33800,33802],{"class":98,"line":33796},215,[96,33798,33799],{"class":106},"    LeNet",[96,33801,152],{"class":102},[96,33803,33804],{"class":106},"LeNet()\n",[96,33806,33808,33811,33813],{"class":98,"line":33807},216,[96,33809,33810],{"class":106},"    train_dataloader,val_dataloader",[96,33812,152],{"class":102},[96,33814,33815],{"class":106},"train_val_data_process()\n",[96,33817,33819,33821,33823,33826,33829,33831,33833],{"class":98,"line":33818},217,[96,33820,33372],{"class":106},[96,33822,152],{"class":102},[96,33824,33825],{"class":106},"train_model_process(LeNet,train_dataloader,val_dataloader,",[96,33827,33828],{"class":5200},"num_epochs",[96,33830,152],{"class":102},[96,33832,807],{"class":155},[96,33834,113],{"class":106},[96,33836,33838],{"class":98,"line":33837},218,[96,33839,33840],{"class":106},"    matplot_acc_loss(train_process)\n",[14,33842,33843],{},"画图的补充点学习：",[14,33845,33846],{},[1445,33847],{"alt":18,"src":33848},"\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",[50,33850,33851],{"start":1162},[53,33852,33853],{},"测试",[87,33855,33857],{"className":30357,"code":33856,"language":30359,"meta":18,"style":18},"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",[93,33858,33859,33865,33875,33887,33897,33902,33912,33922,33926,33931,33940,33957,33969,33986,33997,34013,34018,34029,34040,34051,34058,34062,34067,34077,34082,34099,34107,34111,34116,34125,34134,34138,34143,34148,34153,34160,34165,34177,34187,34197,34202,34206,34211,34220,34225,34241,34246,34251,34256,34270,34275,34289,34293,34298,34313,34318,34330,34334,34339,34351,34356,34364,34369,34374,34384,34389,34398,34403,34408,34412,34417,34422,34438,34446,34451,34456,34515,34521,34526,34537,34545,34553,34557,34562,34566,34571,34579,34584,34600,34605,34615,34625],{"__ignoreMap":18},[96,33860,33861,33863],{"class":98,"line":99},[96,33862,30371],{"class":102},[96,33864,30374],{"class":106},[96,33866,33867,33869,33871,33873],{"class":98,"line":19},[96,33868,30371],{"class":102},[96,33870,31394],{"class":106},[96,33872,31362],{"class":102},[96,33874,31399],{"class":106},[96,33876,33877,33879,33882,33884],{"class":98,"line":1162},[96,33878,30716],{"class":102},[96,33880,33881],{"class":106}," jupyter_client.consoleapp ",[96,33883,30371],{"class":102},[96,33885,33886],{"class":106}," classes\n",[96,33888,33889,33891,33893,33895],{"class":98,"line":1177},[96,33890,30716],{"class":102},[96,33892,31377],{"class":106},[96,33894,30371],{"class":102},[96,33896,31382],{"class":106},[96,33898,33899],{"class":98,"line":1183},[96,33900,33901],{"class":165},"# 导入数据集\n",[96,33903,33904,33906,33908,33910],{"class":98,"line":1197},[96,33905,30716],{"class":102},[96,33907,31347],{"class":106},[96,33909,30371],{"class":102},[96,33911,31352],{"class":106},[96,33913,33914,33916,33918,33920],{"class":98,"line":1203},[96,33915,30716],{"class":102},[96,33917,31893],{"class":106},[96,33919,30371],{"class":102},[96,33921,31898],{"class":106},[96,33923,33924],{"class":98,"line":1294},[96,33925,2383],{"emptyLinePlaceholder":23},[96,33927,33928],{"class":98,"line":1300},[96,33929,33930],{"class":165},"# 测试数据处理\n",[96,33932,33933,33935,33938],{"class":98,"line":1312},[96,33934,31926],{"class":102},[96,33936,33937],{"class":1946}," test_data_process",[96,33939,31932],{"class":106},[96,33941,33942,33945,33947,33949,33951,33953,33955],{"class":98,"line":1595},[96,33943,33944],{"class":106},"    test_data",[96,33946,152],{"class":102},[96,33948,31434],{"class":106},[96,33950,31437],{"class":5200},[96,33952,152],{"class":102},[96,33954,31442],{"class":211},[96,33956,31445],{"class":106},[96,33958,33959,33962,33964,33967],{"class":98,"line":1600},[96,33960,33961],{"class":5200},"                           train",[96,33963,152],{"class":102},[96,33965,33966],{"class":155},"False",[96,33968,31445],{"class":106},[96,33970,33971,33974,33976,33978,33980,33982,33984],{"class":98,"line":1606},[96,33972,33973],{"class":5200},"                           transform",[96,33975,152],{"class":102},[96,33977,31472],{"class":106},[96,33979,31475],{"class":5200},[96,33981,152],{"class":102},[96,33983,1008],{"class":155},[96,33985,31483],{"class":106},[96,33987,33988,33991,33993,33995],{"class":98,"line":1611},[96,33989,33990],{"class":5200},"                           download",[96,33992,152],{"class":102},[96,33994,31455],{"class":155},[96,33996,113],{"class":106},[96,33998,33999,34002,34004,34006,34008,34010],{"class":98,"line":1625},[96,34000,34001],{"class":106},"    test_dataloader",[96,34003,152],{"class":102},[96,34005,31513],{"class":106},[96,34007,31516],{"class":5200},[96,34009,152],{"class":102},[96,34011,34012],{"class":106},"test_data,\n",[96,34014,34015],{"class":98,"line":1630},[96,34016,34017],{"class":165},"                                    # 这里是一张一张进行测试\n",[96,34019,34020,34023,34025,34027],{"class":98,"line":1636},[96,34021,34022],{"class":5200},"                                    batch_size",[96,34024,152],{"class":102},[96,34026,324],{"class":155},[96,34028,31445],{"class":106},[96,34030,34031,34034,34036,34038],{"class":98,"line":1657},[96,34032,34033],{"class":5200},"                                    shuffle",[96,34035,152],{"class":102},[96,34037,31455],{"class":155},[96,34039,31445],{"class":106},[96,34041,34042,34045,34047,34049],{"class":98,"line":1662},[96,34043,34044],{"class":5200},"                                    num_workers",[96,34046,152],{"class":102},[96,34048,298],{"class":155},[96,34050,113],{"class":106},[96,34052,34053,34055],{"class":98,"line":1676},[96,34054,4073],{"class":102},[96,34056,34057],{"class":106}," test_dataloader\n",[96,34059,34060],{"class":98,"line":1681},[96,34061,2383],{"emptyLinePlaceholder":23},[96,34063,34064],{"class":98,"line":1710},[96,34065,34066],{"class":165},"# 定义模型测试函数\n",[96,34068,34069,34071,34074],{"class":98,"line":1715},[96,34070,31926],{"class":102},[96,34072,34073],{"class":1946}," test_model_process",[96,34075,34076],{"class":106},"(model,test_dataloader):\n",[96,34078,34079],{"class":98,"line":1732},[96,34080,34081],{"class":165},"    # 将模型放到设备当中，先进行判断\n",[96,34083,34084,34086,34088,34090,34092,34094,34096],{"class":98,"line":1737},[96,34085,31216],{"class":106},[96,34087,152],{"class":102},[96,34089,31223],{"class":211},[96,34091,1687],{"class":102},[96,34093,31228],{"class":106},[96,34095,1684],{"class":102},[96,34097,34098],{"class":211}," \"cpu\"\n",[96,34100,34101,34103,34105],{"class":98,"line":1742},[96,34102,31268],{"class":106},[96,34104,152],{"class":102},[96,34106,32268],{"class":106},[96,34108,34109],{"class":98,"line":1747},[96,34110,2383],{"emptyLinePlaceholder":23},[96,34112,34113],{"class":98,"line":1761},[96,34114,34115],{"class":165},"    # 设置初始化参数\n",[96,34117,34118,34121,34123],{"class":98,"line":1766},[96,34119,34120],{"class":106},"    test_corrects",[96,34122,152],{"class":102},[96,34124,32321],{"class":155},[96,34126,34127,34130,34132],{"class":98,"line":2560},[96,34128,34129],{"class":106},"    test_num",[96,34131,152],{"class":102},[96,34133,3068],{"class":155},[96,34135,34136],{"class":98,"line":2574},[96,34137,2383],{"emptyLinePlaceholder":23},[96,34139,34140],{"class":98,"line":2582},[96,34141,34142],{"class":165},"    # 进行模型测试\n",[96,34144,34145],{"class":98,"line":2587},[96,34146,34147],{"class":165},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[96,34149,34150],{"class":98,"line":2593},[96,34151,34152],{"class":165},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[96,34154,34155,34158],{"class":98,"line":2599},[96,34156,34157],{"class":102},"    with",[96,34159,32863],{"class":106},[96,34161,34162],{"class":98,"line":2604},[96,34163,34164],{"class":165},"        # 从数据中进行\n",[96,34166,34167,34169,34172,34174],{"class":98,"line":7932},[96,34168,3386],{"class":102},[96,34170,34171],{"class":106}," test_data_x,test_data_y ",[96,34173,26022],{"class":102},[96,34175,34176],{"class":106}," test_dataloader:\n",[96,34178,34179,34182,34184],{"class":98,"line":7956},[96,34180,34181],{"class":106},"            test_data_x",[96,34183,152],{"class":102},[96,34185,34186],{"class":106},"test_data_x.to(device)\n",[96,34188,34189,34192,34194],{"class":98,"line":7961},[96,34190,34191],{"class":106},"            test_data_y",[96,34193,152],{"class":102},[96,34195,34196],{"class":106},"test_data_y.to(device)\n",[96,34198,34199],{"class":98,"line":7967},[96,34200,34201],{"class":165},"            # 设置为验证模式\n",[96,34203,34204],{"class":98,"line":7994},[96,34205,32854],{"class":106},[96,34207,34208],{"class":98,"line":7999},[96,34209,34210],{"class":165},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[96,34212,34213,34215,34217],{"class":98,"line":8005},[96,34214,32639],{"class":106},[96,34216,152],{"class":102},[96,34218,34219],{"class":106},"model(test_data_x)\n",[96,34221,34222],{"class":98,"line":8017},[96,34223,34224],{"class":165},"            # 查找每一行中最大值对应的下标\n",[96,34226,34227,34229,34231,34233,34235,34237,34239],{"class":98,"line":8029},[96,34228,32656],{"class":106},[96,34230,152],{"class":102},[96,34232,32661],{"class":106},[96,34234,32664],{"class":5200},[96,34236,152],{"class":102},[96,34238,324],{"class":155},[96,34240,113],{"class":106},[96,34242,34243],{"class":98,"line":8041},[96,34244,34245],{"class":165},"            # 计算正确率\n",[96,34247,34248],{"class":98,"line":9700},[96,34249,34250],{"class":165},"            # .data表示是一个不带梯度信息的tensor\n",[96,34252,34253],{"class":98,"line":9725},[96,34254,34255],{"class":165},"            # 如果预测正确，则准确度test_corrects加1\n",[96,34257,34258,34261,34263,34265,34267],{"class":98,"line":9748},[96,34259,34260],{"class":106},"            test_corrects",[96,34262,9461],{"class":102},[96,34264,32766],{"class":106},[96,34266,2932],{"class":102},[96,34268,34269],{"class":106},"test_data_y.data)\n",[96,34271,34272],{"class":98,"line":9772},[96,34273,34274],{"class":165},"            # 将所有的测试样本进行累计\n",[96,34276,34277,34280,34282,34285,34287],{"class":98,"line":9777},[96,34278,34279],{"class":106},"            test_num",[96,34281,9461],{"class":102},[96,34283,34284],{"class":106},"test_data_x.size(",[96,34286,298],{"class":155},[96,34288,113],{"class":106},[96,34290,34291],{"class":98,"line":9782},[96,34292,2383],{"emptyLinePlaceholder":23},[96,34294,34295],{"class":98,"line":9787},[96,34296,34297],{"class":165},"        # 计算准确度\n",[96,34299,34300,34303,34305,34308,34310],{"class":98,"line":9796},[96,34301,34302],{"class":106},"        test_acc",[96,34304,152],{"class":102},[96,34306,34307],{"class":106},"test_corrects.double().item()",[96,34309,691],{"class":102},[96,34311,34312],{"class":106},"test_num\n",[96,34314,34315],{"class":98,"line":9801},[96,34316,34317],{"class":165},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[96,34319,34320,34322,34324,34327],{"class":98,"line":9807},[96,34321,32430],{"class":155},[96,34323,107],{"class":106},[96,34325,34326],{"class":211},"\"测试的准确率：\"",[96,34328,34329],{"class":106},",test_acc)\n",[96,34331,34332],{"class":98,"line":9828},[96,34333,2383],{"emptyLinePlaceholder":23},[96,34335,34336],{"class":98,"line":9834},[96,34337,34338],{"class":165},"# 实现模型的测试功能\n",[96,34340,34341,34343,34345,34347,34349],{"class":98,"line":9848},[96,34342,1514],{"class":102},[96,34344,31199],{"class":155},[96,34346,2932],{"class":102},[96,34348,31204],{"class":211},[96,34350,3722],{"class":106},[96,34352,34353],{"class":98,"line":9854},[96,34354,34355],{"class":165},"    # 加载模型\n",[96,34357,34358,34360,34362],{"class":98,"line":9881},[96,34359,31268],{"class":106},[96,34361,152],{"class":102},[96,34363,33804],{"class":106},[96,34365,34366],{"class":98,"line":9890},[96,34367,34368],{"class":165},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[96,34370,34371],{"class":98,"line":9896},[96,34372,34373],{"class":165},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[96,34375,34376,34379,34382],{"class":98,"line":9904},[96,34377,34378],{"class":106},"    model.load_state_dict(torch.load(",[96,34380,34381],{"class":211},"'best_model.pth'",[96,34383,30476],{"class":106},[96,34385,34386],{"class":98,"line":9909},[96,34387,34388],{"class":165},"    # 数据加载\n",[96,34390,34391,34393,34395],{"class":98,"line":16588},[96,34392,34001],{"class":106},[96,34394,152],{"class":102},[96,34396,34397],{"class":106},"test_data_process()\n",[96,34399,34400],{"class":98,"line":16594},[96,34401,34402],{"class":165},"    # 加载模型测试的函数\n",[96,34404,34405],{"class":98,"line":16617},[96,34406,34407],{"class":106},"    test_model_process(model,test_dataloader)\n",[96,34409,34410],{"class":98,"line":16623},[96,34411,2383],{"emptyLinePlaceholder":23},[96,34413,34414],{"class":98,"line":16646},[96,34415,34416],{"class":165},"    # 验证集推理实现：\n",[96,34418,34419],{"class":98,"line":16660},[96,34420,34421],{"class":165},"    # 加载数据加载的更详细一些\n",[96,34423,34424,34426,34428,34430,34432,34434,34436],{"class":98,"line":16680},[96,34425,31216],{"class":106},[96,34427,152],{"class":102},[96,34429,31223],{"class":211},[96,34431,1687],{"class":102},[96,34433,31228],{"class":106},[96,34435,1684],{"class":102},[96,34437,34098],{"class":211},[96,34439,34440,34442,34444],{"class":98,"line":16686},[96,34441,31268],{"class":106},[96,34443,152],{"class":102},[96,34445,32268],{"class":106},[96,34447,34448],{"class":98,"line":16697},[96,34449,34450],{"class":165},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[96,34452,34453],{"class":98,"line":16720},[96,34454,34455],{"class":165},"    # 顺序不可改变\n",[96,34457,34458,34461,34463,34465,34468,34470,34473,34475,34478,34480,34483,34485,34488,34490,34493,34495,34498,34500,34503,34505,34508,34510,34513],{"class":98,"line":16742},[96,34459,34460],{"class":106},"    classes",[96,34462,152],{"class":102},[96,34464,997],{"class":106},[96,34466,34467],{"class":211},"'T-shirt\u002Ftop'",[96,34469,485],{"class":106},[96,34471,34472],{"class":211},"'Trouser'",[96,34474,485],{"class":106},[96,34476,34477],{"class":211},"'Pullover'",[96,34479,485],{"class":106},[96,34481,34482],{"class":211},"'Dress'",[96,34484,485],{"class":106},[96,34486,34487],{"class":211},"'Coat'",[96,34489,485],{"class":106},[96,34491,34492],{"class":211},"'Sandal'",[96,34494,485],{"class":106},[96,34496,34497],{"class":211},"'Shirt'",[96,34499,485],{"class":106},[96,34501,34502],{"class":211},"'Sneaker'",[96,34504,485],{"class":106},[96,34506,34507],{"class":211},"'Bag'",[96,34509,485],{"class":106},[96,34511,34512],{"class":211},"'Ankle boot'",[96,34514,33225],{"class":106},[96,34516,34517,34519],{"class":98,"line":16747},[96,34518,34157],{"class":102},[96,34520,32863],{"class":106},[96,34522,34523],{"class":98,"line":16753},[96,34524,34525],{"class":165},"        # 将数据和标签都放到设备当中\n",[96,34527,34528,34530,34533,34535],{"class":98,"line":16767},[96,34529,3386],{"class":102},[96,34531,34532],{"class":106}," b_x,b_y ",[96,34534,26022],{"class":102},[96,34536,34176],{"class":106},[96,34538,34539,34541,34543],{"class":98,"line":16780},[96,34540,32589],{"class":106},[96,34542,152],{"class":102},[96,34544,32594],{"class":106},[96,34546,34547,34549,34551],{"class":98,"line":16785},[96,34548,32604],{"class":106},[96,34550,152],{"class":102},[96,34552,32609],{"class":106},[96,34554,34555],{"class":98,"line":16799},[96,34556,2383],{"emptyLinePlaceholder":23},[96,34558,34559],{"class":98,"line":16804},[96,34560,34561],{"class":165},"            # 设置模型为验证模式\n",[96,34563,34564],{"class":98,"line":16810},[96,34565,32854],{"class":106},[96,34567,34568],{"class":98,"line":16815},[96,34569,34570],{"class":165},"            # 模型推理结果\n",[96,34572,34573,34575,34577],{"class":98,"line":16829},[96,34574,32639],{"class":106},[96,34576,152],{"class":102},[96,34578,32644],{"class":106},[96,34580,34581],{"class":98,"line":16834},[96,34582,34583],{"class":165},"            # 获取最大下标，最大下标就是类别号\n",[96,34585,34586,34588,34590,34592,34594,34596,34598],{"class":98,"line":16839},[96,34587,32656],{"class":106},[96,34589,152],{"class":102},[96,34591,32661],{"class":106},[96,34593,32664],{"class":5200},[96,34595,152],{"class":102},[96,34597,324],{"class":155},[96,34599,113],{"class":106},[96,34601,34602],{"class":98,"line":16853},[96,34603,34604],{"class":165},"            # 取出张量中的数值\n",[96,34606,34607,34610,34612],{"class":98,"line":16865},[96,34608,34609],{"class":106},"            result",[96,34611,152],{"class":102},[96,34613,34614],{"class":106},"pre_lab.item()\n",[96,34616,34617,34620,34622],{"class":98,"line":16870},[96,34618,34619],{"class":106},"            label",[96,34621,152],{"class":102},[96,34623,34624],{"class":106},"b_y.item()\n",[96,34626,34627,34630,34632,34635,34638,34641,34643,34646],{"class":98,"line":16883},[96,34628,34629],{"class":155},"            print",[96,34631,107],{"class":106},[96,34633,34634],{"class":211},"\"预测值：\"",[96,34636,34637],{"class":106},",classes[result],",[96,34639,34640],{"class":211},"\"------\"",[96,34642,485],{"class":106},[96,34644,34645],{"class":211},"\"真实值：\"",[96,34647,34648],{"class":106},",classes[label])\n",[14,34650,34651],{},"（2）AlexNet",[50,34653,34654],{},[53,34655,34656],{},"神经网络构建",[87,34658,34660],{"className":30357,"code":34659,"language":30359,"meta":18,"style":18},"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",[93,34661,34662,34668,34678,34688,34700,34704,34721,34729,34744,34756,34798,34825,34868,34894,34938,34981,35024,35051,35055,35065,35070,35098,35117,35136,35140,35145,35153,35168,35178,35192,35202,35217,35232,35247,35258,35262,35267,35277,35292,35297,35311,35326,35338,35343,35354,35359,35365,35370,35382,35402,35407,35416],{"__ignoreMap":18},[96,34663,34664,34666],{"class":98,"line":99},[96,34665,30371],{"class":102},[96,34667,30374],{"class":106},[96,34669,34670,34672,34674,34676],{"class":98,"line":19},[96,34671,30716],{"class":102},[96,34673,30719],{"class":106},[96,34675,30371],{"class":102},[96,34677,30724],{"class":106},[96,34679,34680,34682,34684,34686],{"class":98,"line":1162},[96,34681,30716],{"class":102},[96,34683,30736],{"class":106},[96,34685,30371],{"class":102},[96,34687,30741],{"class":106},[96,34689,34690,34692,34695,34697],{"class":98,"line":1177},[96,34691,30371],{"class":102},[96,34693,34694],{"class":106}," torch.nn.functional ",[96,34696,31362],{"class":102},[96,34698,34699],{"class":106}," F\n",[96,34701,34702],{"class":98,"line":1183},[96,34703,2383],{"emptyLinePlaceholder":23},[96,34705,34706,34708,34711,34713,34715,34717,34719],{"class":98,"line":1197},[96,34707,14678],{"class":102},[96,34709,34710],{"class":1946}," AlexNet",[96,34712,107],{"class":106},[96,34714,30757],{"class":1946},[96,34716,665],{"class":106},[96,34718,30762],{"class":1946},[96,34720,30765],{"class":106},[96,34722,34723,34725,34727],{"class":98,"line":1203},[96,34724,30780],{"class":102},[96,34726,30783],{"class":155},[96,34728,30786],{"class":106},[96,34730,34731,34733,34736,34738,34740,34742],{"class":98,"line":1294},[96,34732,30796],{"class":155},[96,34734,34735],{"class":106},"(AlexNet,",[96,34737,30802],{"class":155},[96,34739,30805],{"class":106},[96,34741,30808],{"class":155},[96,34743,1959],{"class":106},[96,34745,34746,34748,34751,34753],{"class":98,"line":1300},[96,34747,30824],{"class":155},[96,34749,34750],{"class":106},".ReLu",[96,34752,152],{"class":102},[96,34754,34755],{"class":106},"nn.ReLU()\n",[96,34757,34758,34760,34762,34764,34766,34768,34770,34772,34774,34776,34778,34780,34782,34784,34786,34788,34790,34792,34794,34796],{"class":98,"line":1312},[96,34759,30824],{"class":155},[96,34761,30827],{"class":106},[96,34763,152],{"class":102},[96,34765,30832],{"class":106},[96,34767,30835],{"class":5200},[96,34769,152],{"class":102},[96,34771,324],{"class":155},[96,34773,485],{"class":106},[96,34775,30844],{"class":5200},[96,34777,152],{"class":102},[96,34779,316],{"class":155},[96,34781,485],{"class":106},[96,34783,30853],{"class":5200},[96,34785,152],{"class":102},[96,34787,579],{"class":155},[96,34789,485],{"class":106},[96,34791,30908],{"class":5200},[96,34793,152],{"class":102},[96,34795,400],{"class":155},[96,34797,113],{"class":106},[96,34799,34800,34802,34804,34806,34809,34811,34813,34815,34817,34819,34821,34823],{"class":98,"line":1595},[96,34801,30824],{"class":155},[96,34803,30892],{"class":106},[96,34805,152],{"class":102},[96,34807,34808],{"class":106},"nn.MaxPool2d(",[96,34810,30853],{"class":5200},[96,34812,152],{"class":102},[96,34814,178],{"class":155},[96,34816,485],{"class":106},[96,34818,30908],{"class":5200},[96,34820,152],{"class":102},[96,34822,184],{"class":155},[96,34824,113],{"class":106},[96,34826,34827,34829,34831,34833,34835,34837,34839,34841,34843,34845,34847,34850,34852,34854,34856,34858,34860,34862,34864,34866],{"class":98,"line":1600},[96,34828,30824],{"class":155},[96,34830,30921],{"class":106},[96,34832,152],{"class":102},[96,34834,30832],{"class":106},[96,34836,30835],{"class":5200},[96,34838,152],{"class":102},[96,34840,316],{"class":155},[96,34842,485],{"class":106},[96,34844,30844],{"class":5200},[96,34846,152],{"class":102},[96,34848,34849],{"class":155},"256",[96,34851,485],{"class":106},[96,34853,30853],{"class":5200},[96,34855,152],{"class":102},[96,34857,426],{"class":155},[96,34859,485],{"class":106},[96,34861,30862],{"class":5200},[96,34863,152],{"class":102},[96,34865,184],{"class":155},[96,34867,113],{"class":106},[96,34869,34870,34872,34874,34876,34878,34880,34882,34884,34886,34888,34890,34892],{"class":98,"line":1606},[96,34871,30824],{"class":155},[96,34873,30956],{"class":106},[96,34875,152],{"class":102},[96,34877,34808],{"class":106},[96,34879,30853],{"class":5200},[96,34881,152],{"class":102},[96,34883,178],{"class":155},[96,34885,485],{"class":106},[96,34887,30908],{"class":5200},[96,34889,152],{"class":102},[96,34891,184],{"class":155},[96,34893,113],{"class":106},[96,34895,34896,34898,34901,34903,34905,34907,34909,34911,34913,34915,34917,34920,34922,34924,34926,34928,34930,34932,34934,34936],{"class":98,"line":1611},[96,34897,30824],{"class":155},[96,34899,34900],{"class":106},".c5",[96,34902,152],{"class":102},[96,34904,30832],{"class":106},[96,34906,30835],{"class":5200},[96,34908,152],{"class":102},[96,34910,34849],{"class":155},[96,34912,485],{"class":106},[96,34914,30844],{"class":5200},[96,34916,152],{"class":102},[96,34918,34919],{"class":155},"384",[96,34921,485],{"class":106},[96,34923,30853],{"class":5200},[96,34925,152],{"class":102},[96,34927,178],{"class":155},[96,34929,485],{"class":106},[96,34931,30862],{"class":5200},[96,34933,152],{"class":102},[96,34935,324],{"class":155},[96,34937,113],{"class":106},[96,34939,34940,34942,34945,34947,34949,34951,34953,34955,34957,34959,34961,34963,34965,34967,34969,34971,34973,34975,34977,34979],{"class":98,"line":1625},[96,34941,30824],{"class":155},[96,34943,34944],{"class":106},".c6",[96,34946,152],{"class":102},[96,34948,30832],{"class":106},[96,34950,30835],{"class":5200},[96,34952,152],{"class":102},[96,34954,34919],{"class":155},[96,34956,485],{"class":106},[96,34958,30844],{"class":5200},[96,34960,152],{"class":102},[96,34962,34919],{"class":155},[96,34964,485],{"class":106},[96,34966,30853],{"class":5200},[96,34968,152],{"class":102},[96,34970,178],{"class":155},[96,34972,485],{"class":106},[96,34974,30862],{"class":5200},[96,34976,152],{"class":102},[96,34978,324],{"class":155},[96,34980,113],{"class":106},[96,34982,34983,34985,34988,34990,34992,34994,34996,34998,35000,35002,35004,35006,35008,35010,35012,35014,35016,35018,35020,35022],{"class":98,"line":1630},[96,34984,30824],{"class":155},[96,34986,34987],{"class":106},".c7",[96,34989,152],{"class":102},[96,34991,30832],{"class":106},[96,34993,30835],{"class":5200},[96,34995,152],{"class":102},[96,34997,34919],{"class":155},[96,34999,485],{"class":106},[96,35001,30844],{"class":5200},[96,35003,152],{"class":102},[96,35005,34849],{"class":155},[96,35007,485],{"class":106},[96,35009,30853],{"class":5200},[96,35011,152],{"class":102},[96,35013,178],{"class":155},[96,35015,485],{"class":106},[96,35017,30862],{"class":5200},[96,35019,152],{"class":102},[96,35021,324],{"class":155},[96,35023,113],{"class":106},[96,35025,35026,35028,35031,35033,35035,35037,35039,35041,35043,35045,35047,35049],{"class":98,"line":1636},[96,35027,30824],{"class":155},[96,35029,35030],{"class":106},".s8",[96,35032,152],{"class":102},[96,35034,34808],{"class":106},[96,35036,30853],{"class":5200},[96,35038,152],{"class":102},[96,35040,178],{"class":155},[96,35042,485],{"class":106},[96,35044,30908],{"class":5200},[96,35046,152],{"class":102},[96,35048,184],{"class":155},[96,35050,113],{"class":106},[96,35052,35053],{"class":98,"line":1657},[96,35054,30981],{"class":165},[96,35056,35057,35059,35061,35063],{"class":98,"line":1662},[96,35058,30824],{"class":155},[96,35060,30988],{"class":106},[96,35062,152],{"class":102},[96,35064,30993],{"class":106},[96,35066,35067],{"class":98,"line":1676},[96,35068,35069],{"class":165},"       # 定义全连接层\n",[96,35071,35072,35074,35077,35079,35081,35083,35085,35087,35089,35091,35093,35096],{"class":98,"line":1681},[96,35073,30824],{"class":155},[96,35075,35076],{"class":106},".f1",[96,35078,152],{"class":102},[96,35080,31010],{"class":106},[96,35082,451],{"class":155},[96,35084,562],{"class":102},[96,35086,451],{"class":155},[96,35088,562],{"class":102},[96,35090,34849],{"class":155},[96,35092,485],{"class":106},[96,35094,35095],{"class":155},"4096",[96,35097,113],{"class":106},[96,35099,35100,35102,35105,35107,35109,35111,35113,35115],{"class":98,"line":1710},[96,35101,30824],{"class":155},[96,35103,35104],{"class":106},".f2",[96,35106,152],{"class":102},[96,35108,31010],{"class":106},[96,35110,35095],{"class":155},[96,35112,485],{"class":106},[96,35114,35095],{"class":155},[96,35116,113],{"class":106},[96,35118,35119,35121,35124,35126,35128,35130,35132,35134],{"class":98,"line":1715},[96,35120,30824],{"class":155},[96,35122,35123],{"class":106},".f3",[96,35125,152],{"class":102},[96,35127,31010],{"class":106},[96,35129,35095],{"class":155},[96,35131,485],{"class":106},[96,35133,553],{"class":155},[96,35135,113],{"class":106},[96,35137,35138],{"class":98,"line":1732},[96,35139,2383],{"emptyLinePlaceholder":23},[96,35141,35142],{"class":98,"line":1737},[96,35143,35144],{"class":165},"    # 定义前向传播\n",[96,35146,35147,35149,35151],{"class":98,"line":1742},[96,35148,30780],{"class":102},[96,35150,31072],{"class":1946},[96,35152,31075],{"class":106},[96,35154,35155,35157,35159,35161,35164,35166],{"class":98,"line":1747},[96,35156,31080],{"class":106},[96,35158,152],{"class":102},[96,35160,30802],{"class":155},[96,35162,35163],{"class":106},".ReLu(",[96,35165,30802],{"class":155},[96,35167,31092],{"class":106},[96,35169,35170,35172,35174,35176],{"class":98,"line":1761},[96,35171,31080],{"class":106},[96,35173,152],{"class":102},[96,35175,30802],{"class":155},[96,35177,31103],{"class":106},[96,35179,35180,35182,35184,35186,35188,35190],{"class":98,"line":1766},[96,35181,31080],{"class":106},[96,35183,152],{"class":102},[96,35185,30802],{"class":155},[96,35187,35163],{"class":106},[96,35189,30802],{"class":155},[96,35191,31118],{"class":106},[96,35193,35194,35196,35198,35200],{"class":98,"line":2560},[96,35195,31080],{"class":106},[96,35197,152],{"class":102},[96,35199,30802],{"class":155},[96,35201,31129],{"class":106},[96,35203,35204,35206,35208,35210,35212,35214],{"class":98,"line":2574},[96,35205,31080],{"class":106},[96,35207,152],{"class":102},[96,35209,30802],{"class":155},[96,35211,35163],{"class":106},[96,35213,30802],{"class":155},[96,35215,35216],{"class":106},".c5(x))\n",[96,35218,35219,35221,35223,35225,35227,35229],{"class":98,"line":2582},[96,35220,31080],{"class":106},[96,35222,152],{"class":102},[96,35224,30802],{"class":155},[96,35226,35163],{"class":106},[96,35228,30802],{"class":155},[96,35230,35231],{"class":106},".c6(x))\n",[96,35233,35234,35236,35238,35240,35242,35244],{"class":98,"line":2587},[96,35235,31080],{"class":106},[96,35237,152],{"class":102},[96,35239,30802],{"class":155},[96,35241,35163],{"class":106},[96,35243,30802],{"class":155},[96,35245,35246],{"class":106},".c7(x))\n",[96,35248,35249,35251,35253,35255],{"class":98,"line":2593},[96,35250,31080],{"class":106},[96,35252,152],{"class":102},[96,35254,30802],{"class":155},[96,35256,35257],{"class":106},".s8(x)\n",[96,35259,35260],{"class":98,"line":2599},[96,35261,2383],{"emptyLinePlaceholder":23},[96,35263,35264],{"class":98,"line":2604},[96,35265,35266],{"class":165},"        # 展平加线性全连接层\n",[96,35268,35269,35271,35273,35275],{"class":98,"line":7932},[96,35270,31080],{"class":106},[96,35272,152],{"class":102},[96,35274,30802],{"class":155},[96,35276,31140],{"class":106},[96,35278,35279,35281,35283,35285,35287,35289],{"class":98,"line":7956},[96,35280,31080],{"class":106},[96,35282,152],{"class":102},[96,35284,30802],{"class":155},[96,35286,35163],{"class":106},[96,35288,30802],{"class":155},[96,35290,35291],{"class":106},".f1(x))\n",[96,35293,35294],{"class":98,"line":7961},[96,35295,35296],{"class":165},"        # 还需要dropout对神经元随机进行失活\n",[96,35298,35299,35301,35303,35306,35309],{"class":98,"line":7967},[96,35300,31080],{"class":106},[96,35302,152],{"class":102},[96,35304,35305],{"class":106},"F.dropout(x,",[96,35307,35308],{"class":155},"0.5",[96,35310,113],{"class":106},[96,35312,35313,35315,35317,35319,35321,35323],{"class":98,"line":7994},[96,35314,31080],{"class":106},[96,35316,152],{"class":102},[96,35318,30802],{"class":155},[96,35320,35163],{"class":106},[96,35322,30802],{"class":155},[96,35324,35325],{"class":106},".f2(x))\n",[96,35327,35328,35330,35332,35334,35336],{"class":98,"line":7999},[96,35329,31080],{"class":106},[96,35331,152],{"class":102},[96,35333,35305],{"class":106},[96,35335,35308],{"class":155},[96,35337,113],{"class":106},[96,35339,35340],{"class":98,"line":8005},[96,35341,35342],{"class":165},"        # 直接输出\n",[96,35344,35345,35347,35349,35351],{"class":98,"line":8017},[96,35346,31080],{"class":106},[96,35348,152],{"class":102},[96,35350,30802],{"class":155},[96,35352,35353],{"class":106},".f3(x)\n",[96,35355,35356],{"class":98,"line":8029},[96,35357,35358],{"class":165},"        # 前向传播输出\n",[96,35360,35361,35363],{"class":98,"line":8041},[96,35362,14736],{"class":102},[96,35364,31188],{"class":106},[96,35366,35367],{"class":98,"line":9700},[96,35368,35369],{"class":165},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[96,35371,35372,35374,35376,35378,35380],{"class":98,"line":9725},[96,35373,1514],{"class":102},[96,35375,31199],{"class":155},[96,35377,2932],{"class":102},[96,35379,31204],{"class":211},[96,35381,3722],{"class":106},[96,35383,35384,35386,35388,35390,35392,35394,35396,35398,35400],{"class":98,"line":9748},[96,35385,31216],{"class":106},[96,35387,152],{"class":102},[96,35389,30430],{"class":106},[96,35391,31223],{"class":211},[96,35393,1687],{"class":102},[96,35395,31228],{"class":106},[96,35397,1684],{"class":102},[96,35399,30455],{"class":211},[96,35401,113],{"class":106},[96,35403,35404],{"class":98,"line":9772},[96,35405,35406],{"class":165},"    # 模型实例化，然后将实例化的模型放到设备中\n",[96,35408,35409,35411,35413],{"class":98,"line":9777},[96,35410,31268],{"class":106},[96,35412,152],{"class":102},[96,35414,35415],{"class":106},"AlexNet().to(device)\n",[96,35417,35418,35420,35422,35424,35426,35429,35431,35433],{"class":98,"line":9782},[96,35419,31278],{"class":155},[96,35421,31281],{"class":106},[96,35423,324],{"class":155},[96,35425,485],{"class":106},[96,35427,35428],{"class":155},"227",[96,35430,485],{"class":106},[96,35432,35428],{"class":155},[96,35434,31294],{"class":106},[50,35436,35437],{"start":19},[53,35438,31307],{},[87,35440,35442],{"className":30357,"code":35441,"language":30359,"meta":18,"style":18},"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",[93,35443,35444,35450,35456,35466,35472,35482,35492,35502,35512,35522,35526,35537,35547,35551,35555,35559,35567,35579,35589,35605,35615,35647,35661,35671,35681,35685,35695,35709,35719,35729,35739,35745,35749,35753,35757,35761,35765,35773,35793,35797,35801,35805,35809,35813,35829,35833,35837,35845,35849,35853,35861,35865,35869,35873,35881,35885,35889,35893,35897,35905,35909,35917,35921,35929,35933,35941,35945,35953,35957,35961,35969,35973,35977,35981,35993,36017,36031,36035,36039,36043,36051,36055,36063,36067,36075,36079,36087,36091,36099,36103,36111,36115,36127,36131,36139,36143,36151,36155,36159,36163,36167,36175,36179,36195,36199,36207,36211,36215,36219,36223,36227,36231,36235,36251,36255,36267,36271,36283,36287,36299,36303,36311,36315,36323,36327,36331,36336,36342,36346,36355,36359,36376,36380,36389,36393,36411,36424,36429,36442,36446,36450,36458,36462,36466,36474,36478,36486,36490,36498,36502,36506,36548,36590,36594,36598,36614,36618,36634,36638,36642,36650,36654,36658,36670,36708,36713,36718,36727,36731,36745,36755,36761,36767,36773,36779,36783,36787,36793,36797,36801,36809,36813,36831,36835,36839,36843,36859,36863,36867,36871,36875,36879,36899,36919,36923,36927,36931,36939,36947,36951,36967,36987,37007,37011,37015,37023,37031,37035,37039,37043,37055,37059,37069,37077,37094],{"__ignoreMap":18},[96,35445,35446,35448],{"class":98,"line":99},[96,35447,30371],{"class":102},[96,35449,31801],{"class":106},[96,35451,35452,35454],{"class":98,"line":19},[96,35453,30371],{"class":102},[96,35455,31808],{"class":106},[96,35457,35458,35460,35462,35464],{"class":98,"line":1162},[96,35459,30371],{"class":102},[96,35461,31819],{"class":106},[96,35463,31362],{"class":102},[96,35465,31824],{"class":106},[96,35467,35468,35470],{"class":98,"line":1177},[96,35469,30371],{"class":102},[96,35471,30374],{"class":106},[96,35473,35474,35476,35478,35480],{"class":98,"line":1183},[96,35475,30716],{"class":102},[96,35477,31394],{"class":106},[96,35479,30371],{"class":102},[96,35481,31841],{"class":106},[96,35483,35484,35486,35488,35490],{"class":98,"line":1197},[96,35485,30716],{"class":102},[96,35487,31347],{"class":106},[96,35489,30371],{"class":102},[96,35491,31352],{"class":106},[96,35493,35494,35496,35498,35500],{"class":98,"line":1203},[96,35495,30716],{"class":102},[96,35497,31377],{"class":106},[96,35499,30371],{"class":102},[96,35501,31382],{"class":106},[96,35503,35504,35506,35508,35510],{"class":98,"line":1294},[96,35505,30371],{"class":102},[96,35507,31394],{"class":106},[96,35509,31362],{"class":102},[96,35511,31399],{"class":106},[96,35513,35514,35516,35518,35520],{"class":98,"line":1300},[96,35515,30371],{"class":102},[96,35517,31411],{"class":106},[96,35519,31362],{"class":102},[96,35521,31416],{"class":106},[96,35523,35524],{"class":98,"line":1312},[96,35525,31886],{"class":165},[96,35527,35528,35530,35532,35534],{"class":98,"line":1595},[96,35529,30716],{"class":102},[96,35531,31893],{"class":106},[96,35533,30371],{"class":102},[96,35535,35536],{"class":106}," AlexNet\n",[96,35538,35539,35541,35543,35545],{"class":98,"line":1600},[96,35540,30716],{"class":102},[96,35542,30719],{"class":106},[96,35544,30371],{"class":102},[96,35546,30724],{"class":106},[96,35548,35549],{"class":98,"line":1606},[96,35550,2383],{"emptyLinePlaceholder":23},[96,35552,35553],{"class":98,"line":1611},[96,35554,2383],{"emptyLinePlaceholder":23},[96,35556,35557],{"class":98,"line":1625},[96,35558,31921],{"class":165},[96,35560,35561,35563,35565],{"class":98,"line":1630},[96,35562,31926],{"class":102},[96,35564,31929],{"class":1946},[96,35566,31932],{"class":106},[96,35568,35569,35571,35573,35575,35577],{"class":98,"line":1636},[96,35570,31937],{"class":106},[96,35572,152],{"class":102},[96,35574,31434],{"class":106},[96,35576,31442],{"class":211},[96,35578,31445],{"class":106},[96,35580,35581,35583,35585,35587],{"class":98,"line":1657},[96,35582,31950],{"class":5200},[96,35584,152],{"class":102},[96,35586,31455],{"class":155},[96,35588,31445],{"class":106},[96,35590,35591,35593,35595,35597,35599,35601,35603],{"class":98,"line":1662},[96,35592,31961],{"class":5200},[96,35594,152],{"class":102},[96,35596,31472],{"class":106},[96,35598,31475],{"class":5200},[96,35600,152],{"class":102},[96,35602,35428],{"class":155},[96,35604,31483],{"class":106},[96,35606,35607,35609,35611,35613],{"class":98,"line":1676},[96,35608,31978],{"class":5200},[96,35610,152],{"class":102},[96,35612,31455],{"class":155},[96,35614,113],{"class":106},[96,35616,35617,35619,35621,35623,35625,35627,35629,35631,35633,35635,35637,35639,35641,35643,35645],{"class":98,"line":1681},[96,35618,31989],{"class":106},[96,35620,152],{"class":102},[96,35622,31994],{"class":106},[96,35624,31997],{"class":155},[96,35626,107],{"class":106},[96,35628,32002],{"class":155},[96,35630,562],{"class":102},[96,35632,7342],{"class":155},[96,35634,32009],{"class":106},[96,35636,31997],{"class":155},[96,35638,107],{"class":106},[96,35640,32016],{"class":155},[96,35642,562],{"class":102},[96,35644,7342],{"class":155},[96,35646,32023],{"class":106},[96,35648,35649,35651,35653,35655,35657,35659],{"class":98,"line":1710},[96,35650,32028],{"class":106},[96,35652,152],{"class":102},[96,35654,32033],{"class":106},[96,35656,31516],{"class":5200},[96,35658,152],{"class":102},[96,35660,31521],{"class":106},[96,35662,35663,35665,35667,35669],{"class":98,"line":1715},[96,35664,32044],{"class":5200},[96,35666,152],{"class":102},[96,35668,32049],{"class":155},[96,35670,31445],{"class":106},[96,35672,35673,35675,35677,35679],{"class":98,"line":1732},[96,35674,32056],{"class":5200},[96,35676,152],{"class":102},[96,35678,31455],{"class":155},[96,35680,31445],{"class":106},[96,35682,35683],{"class":98,"line":1737},[96,35684,32067],{"class":165},[96,35686,35687,35689,35691,35693],{"class":98,"line":1742},[96,35688,32072],{"class":5200},[96,35690,152],{"class":102},[96,35692,502],{"class":155},[96,35694,113],{"class":106},[96,35696,35697,35699,35701,35703,35705,35707],{"class":98,"line":1747},[96,35698,32083],{"class":106},[96,35700,152],{"class":102},[96,35702,31513],{"class":106},[96,35704,31516],{"class":5200},[96,35706,152],{"class":102},[96,35708,32094],{"class":106},[96,35710,35711,35713,35715,35717],{"class":98,"line":1761},[96,35712,32099],{"class":5200},[96,35714,152],{"class":102},[96,35716,32049],{"class":155},[96,35718,31445],{"class":106},[96,35720,35721,35723,35725,35727],{"class":98,"line":1766},[96,35722,32110],{"class":5200},[96,35724,152],{"class":102},[96,35726,31455],{"class":155},[96,35728,31445],{"class":106},[96,35730,35731,35733,35735,35737],{"class":98,"line":2560},[96,35732,32121],{"class":5200},[96,35734,152],{"class":102},[96,35736,502],{"class":155},[96,35738,113],{"class":106},[96,35740,35741,35743],{"class":98,"line":2574},[96,35742,4073],{"class":102},[96,35744,32134],{"class":106},[96,35746,35747],{"class":98,"line":2582},[96,35748,2383],{"emptyLinePlaceholder":23},[96,35750,35751],{"class":98,"line":2587},[96,35752,32143],{"class":165},[96,35754,35755],{"class":98,"line":2593},[96,35756,32148],{"class":165},[96,35758,35759],{"class":98,"line":2599},[96,35760,2383],{"emptyLinePlaceholder":23},[96,35762,35763],{"class":98,"line":2604},[96,35764,32157],{"class":165},[96,35766,35767,35769,35771],{"class":98,"line":7932},[96,35768,31926],{"class":102},[96,35770,32164],{"class":1946},[96,35772,32167],{"class":106},[96,35774,35775,35777,35779,35781,35783,35785,35787,35789,35791],{"class":98,"line":7956},[96,35776,31216],{"class":106},[96,35778,152],{"class":102},[96,35780,30430],{"class":106},[96,35782,31223],{"class":211},[96,35784,1687],{"class":102},[96,35786,31228],{"class":106},[96,35788,1684],{"class":102},[96,35790,32186],{"class":211},[96,35792,113],{"class":106},[96,35794,35795],{"class":98,"line":7961},[96,35796,2383],{"emptyLinePlaceholder":23},[96,35798,35799],{"class":98,"line":7967},[96,35800,2383],{"emptyLinePlaceholder":23},[96,35802,35803],{"class":98,"line":7994},[96,35804,32201],{"class":165},[96,35806,35807],{"class":98,"line":7999},[96,35808,32206],{"class":165},[96,35810,35811],{"class":98,"line":8005},[96,35812,32211],{"class":165},[96,35814,35815,35817,35819,35821,35823,35825,35827],{"class":98,"line":8017},[96,35816,32216],{"class":106},[96,35818,152],{"class":102},[96,35820,32221],{"class":106},[96,35822,32224],{"class":5200},[96,35824,152],{"class":102},[96,35826,32229],{"class":155},[96,35828,113],{"class":106},[96,35830,35831],{"class":98,"line":8029},[96,35832,2383],{"emptyLinePlaceholder":23},[96,35834,35835],{"class":98,"line":8041},[96,35836,32240],{"class":165},[96,35838,35839,35841,35843],{"class":98,"line":9700},[96,35840,32245],{"class":106},[96,35842,152],{"class":102},[96,35844,32250],{"class":106},[96,35846,35847],{"class":98,"line":9725},[96,35848,2383],{"emptyLinePlaceholder":23},[96,35850,35851],{"class":98,"line":9748},[96,35852,32259],{"class":165},[96,35854,35855,35857,35859],{"class":98,"line":9772},[96,35856,31268],{"class":106},[96,35858,152],{"class":102},[96,35860,32268],{"class":106},[96,35862,35863],{"class":98,"line":9777},[96,35864,32273],{"class":165},[96,35866,35867],{"class":98,"line":9782},[96,35868,32278],{"class":165},[96,35870,35871],{"class":98,"line":9787},[96,35872,32283],{"class":165},[96,35874,35875,35877,35879],{"class":98,"line":9796},[96,35876,32288],{"class":106},[96,35878,152],{"class":102},[96,35880,32293],{"class":106},[96,35882,35883],{"class":98,"line":9801},[96,35884,2383],{"emptyLinePlaceholder":23},[96,35886,35887],{"class":98,"line":9807},[96,35888,2383],{"emptyLinePlaceholder":23},[96,35890,35891],{"class":98,"line":9828},[96,35892,32306],{"class":165},[96,35894,35895],{"class":98,"line":9834},[96,35896,32311],{"class":165},[96,35898,35899,35901,35903],{"class":98,"line":9848},[96,35900,32316],{"class":106},[96,35902,152],{"class":102},[96,35904,32321],{"class":155},[96,35906,35907],{"class":98,"line":9854},[96,35908,32326],{"class":165},[96,35910,35911,35913,35915],{"class":98,"line":9881},[96,35912,32331],{"class":106},[96,35914,152],{"class":102},[96,35916,32336],{"class":106},[96,35918,35919],{"class":98,"line":9890},[96,35920,32341],{"class":165},[96,35922,35923,35925,35927],{"class":98,"line":9896},[96,35924,32346],{"class":106},[96,35926,152],{"class":102},[96,35928,32336],{"class":106},[96,35930,35931],{"class":98,"line":9904},[96,35932,32355],{"class":165},[96,35934,35935,35937,35939],{"class":98,"line":9909},[96,35936,32360],{"class":106},[96,35938,152],{"class":102},[96,35940,32336],{"class":106},[96,35942,35943],{"class":98,"line":16588},[96,35944,32369],{"class":165},[96,35946,35947,35949,35951],{"class":98,"line":16594},[96,35948,32374],{"class":106},[96,35950,152],{"class":102},[96,35952,32336],{"class":106},[96,35954,35955],{"class":98,"line":16617},[96,35956,2383],{"emptyLinePlaceholder":23},[96,35958,35959],{"class":98,"line":16623},[96,35960,32387],{"class":165},[96,35962,35963,35965,35967],{"class":98,"line":16646},[96,35964,32392],{"class":106},[96,35966,152],{"class":102},[96,35968,32397],{"class":106},[96,35970,35971],{"class":98,"line":16660},[96,35972,2383],{"emptyLinePlaceholder":23},[96,35974,35975],{"class":98,"line":16680},[96,35976,2383],{"emptyLinePlaceholder":23},[96,35978,35979],{"class":98,"line":16686},[96,35980,32410],{"class":165},[96,35982,35983,35985,35987,35989,35991],{"class":98,"line":16697},[96,35984,3184],{"class":102},[96,35986,32417],{"class":106},[96,35988,26022],{"class":102},[96,35990,32422],{"class":155},[96,35992,32425],{"class":106},[96,35994,35995,35997,35999,36001,36003,36005,36007,36009,36011,36013,36015],{"class":98,"line":16720},[96,35996,32430],{"class":155},[96,35998,107],{"class":106},[96,36000,32435],{"class":211},[96,36002,32438],{"class":155},[96,36004,691],{"class":211},[96,36006,32438],{"class":155},[96,36008,358],{"class":211},[96,36010,32447],{"class":106},[96,36012,639],{"class":102},[96,36014,324],{"class":155},[96,36016,30476],{"class":106},[96,36018,36019,36021,36023,36025,36027,36029],{"class":98,"line":16742},[96,36020,32430],{"class":155},[96,36022,107],{"class":106},[96,36024,32462],{"class":211},[96,36026,562],{"class":102},[96,36028,553],{"class":155},[96,36030,113],{"class":106},[96,36032,36033],{"class":98,"line":16747},[96,36034,2383],{"emptyLinePlaceholder":23},[96,36036,36037],{"class":98,"line":16753},[96,36038,32477],{"class":165},[96,36040,36041],{"class":98,"line":16767},[96,36042,32482],{"class":165},[96,36044,36045,36047,36049],{"class":98,"line":16780},[96,36046,32487],{"class":106},[96,36048,152],{"class":102},[96,36050,32321],{"class":155},[96,36052,36053],{"class":98,"line":16785},[96,36054,32496],{"class":165},[96,36056,36057,36059,36061],{"class":98,"line":16799},[96,36058,32501],{"class":106},[96,36060,152],{"class":102},[96,36062,3068],{"class":155},[96,36064,36065],{"class":98,"line":16804},[96,36066,32510],{"class":165},[96,36068,36069,36071,36073],{"class":98,"line":16810},[96,36070,32515],{"class":106},[96,36072,152],{"class":102},[96,36074,32321],{"class":155},[96,36076,36077],{"class":98,"line":16815},[96,36078,32524],{"class":165},[96,36080,36081,36083,36085],{"class":98,"line":16829},[96,36082,32529],{"class":106},[96,36084,152],{"class":102},[96,36086,3068],{"class":155},[96,36088,36089],{"class":98,"line":16834},[96,36090,32538],{"class":165},[96,36092,36093,36095,36097],{"class":98,"line":16839},[96,36094,32543],{"class":106},[96,36096,152],{"class":102},[96,36098,3068],{"class":155},[96,36100,36101],{"class":98,"line":16853},[96,36102,32552],{"class":165},[96,36104,36105,36107,36109],{"class":98,"line":16865},[96,36106,32557],{"class":106},[96,36108,152],{"class":102},[96,36110,3068],{"class":155},[96,36112,36113],{"class":98,"line":16870},[96,36114,32566],{"class":165},[96,36116,36117,36119,36121,36123,36125],{"class":98,"line":16883},[96,36118,3386],{"class":102},[96,36120,31580],{"class":106},[96,36122,26022],{"class":102},[96,36124,31585],{"class":155},[96,36126,32579],{"class":106},[96,36128,36129],{"class":98,"line":16888},[96,36130,32584],{"class":165},[96,36132,36133,36135,36137],{"class":98,"line":16893},[96,36134,32589],{"class":106},[96,36136,152],{"class":102},[96,36138,32594],{"class":106},[96,36140,36141],{"class":98,"line":16898},[96,36142,32599],{"class":165},[96,36144,36145,36147,36149],{"class":98,"line":16911},[96,36146,32604],{"class":106},[96,36148,152],{"class":102},[96,36150,32609],{"class":106},[96,36152,36153],{"class":98,"line":16916},[96,36154,32615],{"class":165},[96,36156,36157],{"class":98,"line":32612},[96,36158,32621],{"class":106},[96,36160,36161],{"class":98,"line":32618},[96,36162,32627],{"class":165},[96,36164,36165],{"class":98,"line":32624},[96,36166,32633],{"class":165},[96,36168,36169,36171,36173],{"class":98,"line":32630},[96,36170,32639],{"class":106},[96,36172,152],{"class":102},[96,36174,32644],{"class":106},[96,36176,36177],{"class":98,"line":32636},[96,36178,32650],{"class":165},[96,36180,36181,36183,36185,36187,36189,36191,36193],{"class":98,"line":32647},[96,36182,32656],{"class":106},[96,36184,152],{"class":102},[96,36186,32661],{"class":106},[96,36188,32664],{"class":5200},[96,36190,152],{"class":102},[96,36192,324],{"class":155},[96,36194,113],{"class":106},[96,36196,36197],{"class":98,"line":32653},[96,36198,32676],{"class":165},[96,36200,36201,36203,36205],{"class":98,"line":32673},[96,36202,32682],{"class":106},[96,36204,152],{"class":102},[96,36206,32687],{"class":106},[96,36208,36209],{"class":98,"line":32679},[96,36210,32693],{"class":165},[96,36212,36213],{"class":98,"line":32690},[96,36214,32699],{"class":106},[96,36216,36217],{"class":98,"line":32696},[96,36218,32705],{"class":165},[96,36220,36221],{"class":98,"line":32702},[96,36222,32711],{"class":106},[96,36224,36225],{"class":98,"line":32708},[96,36226,32717],{"class":165},[96,36228,36229],{"class":98,"line":32714},[96,36230,32723],{"class":106},[96,36232,36233],{"class":98,"line":32720},[96,36234,32729],{"class":165},[96,36236,36237,36239,36241,36243,36245,36247,36249],{"class":98,"line":32726},[96,36238,32735],{"class":106},[96,36240,9461],{"class":102},[96,36242,32740],{"class":106},[96,36244,562],{"class":102},[96,36246,32745],{"class":106},[96,36248,298],{"class":155},[96,36250,113],{"class":106},[96,36252,36253],{"class":98,"line":32732},[96,36254,32755],{"class":165},[96,36256,36257,36259,36261,36263,36265],{"class":98,"line":32752},[96,36258,32761],{"class":106},[96,36260,9461],{"class":102},[96,36262,32766],{"class":106},[96,36264,2932],{"class":102},[96,36266,32771],{"class":106},[96,36268,36269],{"class":98,"line":32758},[96,36270,32777],{"class":165},[96,36272,36273,36275,36277,36279,36281],{"class":98,"line":32774},[96,36274,32783],{"class":106},[96,36276,9461],{"class":102},[96,36278,32745],{"class":106},[96,36280,298],{"class":155},[96,36282,113],{"class":106},[96,36284,36285],{"class":98,"line":32780},[96,36286,32797],{"class":165},[96,36288,36289,36291,36293,36295,36297],{"class":98,"line":32794},[96,36290,3386],{"class":102},[96,36292,32805],{"class":106},[96,36294,26022],{"class":102},[96,36296,31585],{"class":155},[96,36298,32812],{"class":106},[96,36300,36301],{"class":98,"line":32800},[96,36302,32818],{"class":165},[96,36304,36305,36307,36309],{"class":98,"line":32815},[96,36306,32589],{"class":106},[96,36308,152],{"class":102},[96,36310,32594],{"class":106},[96,36312,36313],{"class":98,"line":32821},[96,36314,32833],{"class":165},[96,36316,36317,36319,36321],{"class":98,"line":32830},[96,36318,32604],{"class":106},[96,36320,152],{"class":102},[96,36322,32609],{"class":106},[96,36324,36325],{"class":98,"line":32836},[96,36326,32848],{"class":165},[96,36328,36329],{"class":98,"line":32845},[96,36330,32854],{"class":106},[96,36332,36333],{"class":98,"line":32851},[96,36334,36335],{"class":165},"            # 验证时不计算梯度以节省内存\u002F计算\n",[96,36337,36338,36340],{"class":98,"line":32857},[96,36339,32860],{"class":102},[96,36341,32863],{"class":106},[96,36343,36344],{"class":98,"line":32866},[96,36345,32869],{"class":165},[96,36347,36348,36351,36353],{"class":98,"line":32872},[96,36349,36350],{"class":106},"                output",[96,36352,152],{"class":102},[96,36354,32644],{"class":106},[96,36356,36357],{"class":98,"line":32883},[96,36358,32886],{"class":165},[96,36360,36361,36364,36366,36368,36370,36372,36374],{"class":98,"line":32889},[96,36362,36363],{"class":106},"                pre_lab",[96,36365,152],{"class":102},[96,36367,32661],{"class":106},[96,36369,32664],{"class":5200},[96,36371,152],{"class":102},[96,36373,324],{"class":155},[96,36375,113],{"class":106},[96,36377,36378],{"class":98,"line":32908},[96,36379,32911],{"class":165},[96,36381,36382,36385,36387],{"class":98,"line":32914},[96,36383,36384],{"class":106},"                val_batch_loss",[96,36386,152],{"class":102},[96,36388,32687],{"class":106},[96,36390,36391],{"class":98,"line":32925},[96,36392,32928],{"class":165},[96,36394,36395,36398,36400,36403,36405,36407,36409],{"class":98,"line":32931},[96,36396,36397],{"class":106},"                val_loss",[96,36399,9461],{"class":102},[96,36401,36402],{"class":106},"val_batch_loss.item()",[96,36404,562],{"class":102},[96,36406,32745],{"class":106},[96,36408,298],{"class":155},[96,36410,113],{"class":106},[96,36412,36413,36416,36418,36420,36422],{"class":98,"line":32951},[96,36414,36415],{"class":106},"                val_corrects",[96,36417,9461],{"class":102},[96,36419,32766],{"class":106},[96,36421,2932],{"class":102},[96,36423,32771],{"class":106},[96,36425,36426],{"class":98,"line":32967},[96,36427,36428],{"class":165},"            # 当前用于验证的样本数量\n",[96,36430,36431,36434,36436,36438,36440],{"class":98,"line":32973},[96,36432,36433],{"class":106},"            val_num",[96,36435,9461],{"class":102},[96,36437,32745],{"class":106},[96,36439,298],{"class":155},[96,36441,113],{"class":106},[96,36443,36444],{"class":98,"line":32987},[96,36445,32990],{"class":165},[96,36447,36448],{"class":98,"line":32993},[96,36449,32996],{"class":165},[96,36451,36452,36454,36456],{"class":98,"line":32999},[96,36453,33002],{"class":106},[96,36455,691],{"class":102},[96,36457,33007],{"class":106},[96,36459,36460],{"class":98,"line":33010},[96,36461,33013],{"class":165},[96,36463,36464],{"class":98,"line":33016},[96,36465,33019],{"class":165},[96,36467,36468,36470,36472],{"class":98,"line":33022},[96,36469,33025],{"class":106},[96,36471,691],{"class":102},[96,36473,33007],{"class":106},[96,36475,36476],{"class":98,"line":33032},[96,36477,33035],{"class":165},[96,36479,36480,36482,36484],{"class":98,"line":33038},[96,36481,33041],{"class":106},[96,36483,691],{"class":102},[96,36485,33046],{"class":106},[96,36487,36488],{"class":98,"line":33049},[96,36489,33052],{"class":165},[96,36491,36492,36494,36496],{"class":98,"line":33055},[96,36493,33058],{"class":106},[96,36495,691],{"class":102},[96,36497,33046],{"class":106},[96,36499,36500],{"class":98,"line":33065},[96,36501,2383],{"emptyLinePlaceholder":23},[96,36503,36504],{"class":98,"line":33070},[96,36505,33073],{"class":165},[96,36507,36508,36510,36512,36514,36516,36518,36520,36522,36524,36526,36528,36530,36532,36534,36536,36538,36540,36542,36544,36546],{"class":98,"line":33076},[96,36509,32430],{"class":155},[96,36511,107],{"class":106},[96,36513,3575],{"class":211},[96,36515,32438],{"class":155},[96,36517,33087],{"class":211},[96,36519,1003],{"class":155},[96,36521,33092],{"class":102},[96,36523,1053],{"class":155},[96,36525,33097],{"class":211},[96,36527,1003],{"class":155},[96,36529,33092],{"class":102},[96,36531,1053],{"class":155},[96,36533,3575],{"class":211},[96,36535,33108],{"class":106},[96,36537,639],{"class":102},[96,36539,324],{"class":155},[96,36541,33115],{"class":106},[96,36543,639],{"class":102},[96,36545,324],{"class":155},[96,36547,33122],{"class":106},[96,36549,36550,36552,36554,36556,36558,36560,36562,36564,36566,36568,36570,36572,36574,36576,36578,36580,36582,36584,36586,36588],{"class":98,"line":33125},[96,36551,32430],{"class":155},[96,36553,107],{"class":106},[96,36555,3575],{"class":211},[96,36557,32438],{"class":155},[96,36559,33136],{"class":211},[96,36561,1003],{"class":155},[96,36563,33092],{"class":102},[96,36565,1053],{"class":155},[96,36567,33145],{"class":211},[96,36569,1003],{"class":155},[96,36571,33092],{"class":102},[96,36573,1053],{"class":155},[96,36575,3575],{"class":211},[96,36577,33156],{"class":106},[96,36579,639],{"class":102},[96,36581,324],{"class":155},[96,36583,33163],{"class":106},[96,36585,639],{"class":102},[96,36587,324],{"class":155},[96,36589,33122],{"class":106},[96,36591,36592],{"class":98,"line":33172},[96,36593,2383],{"emptyLinePlaceholder":23},[96,36595,36596],{"class":98,"line":33177},[96,36597,33180],{"class":165},[96,36599,36600,36602,36604,36606,36608,36610,36612],{"class":98,"line":33183},[96,36601,2480],{"class":102},[96,36603,33188],{"class":106},[96,36605,639],{"class":102},[96,36607,324],{"class":155},[96,36609,1047],{"class":106},[96,36611,1067],{"class":102},[96,36613,33199],{"class":106},[96,36615,36616],{"class":98,"line":33202},[96,36617,33205],{"class":165},[96,36619,36620,36622,36624,36626,36628,36630,36632],{"class":98,"line":33208},[96,36621,33211],{"class":106},[96,36623,146],{"class":155},[96,36625,152],{"class":102},[96,36627,33218],{"class":106},[96,36629,639],{"class":102},[96,36631,324],{"class":155},[96,36633,33225],{"class":106},[96,36635,36636],{"class":98,"line":33228},[96,36637,33231],{"class":165},[96,36639,36640],{"class":98,"line":33234},[96,36641,33237],{"class":165},[96,36643,36644,36646,36648],{"class":98,"line":33240},[96,36645,33243],{"class":106},[96,36647,152],{"class":102},[96,36649,32293],{"class":106},[96,36651,36652],{"class":98,"line":33250},[96,36653,2383],{"emptyLinePlaceholder":23},[96,36655,36656],{"class":98,"line":33255},[96,36657,33258],{"class":165},[96,36659,36660,36662,36664,36666,36668],{"class":98,"line":33261},[96,36661,33264],{"class":106},[96,36663,152],{"class":102},[96,36665,33269],{"class":106},[96,36667,639],{"class":102},[96,36669,33274],{"class":106},[96,36671,36672,36674,36676,36678,36680,36682,36684,36686,36688,36690,36692,36694,36696,36698,36700,36702,36704,36706],{"class":98,"line":33277},[96,36673,32430],{"class":155},[96,36675,107],{"class":106},[96,36677,33284],{"class":211},[96,36679,1003],{"class":155},[96,36681,33289],{"class":102},[96,36683,1053],{"class":155},[96,36685,651],{"class":211},[96,36687,1003],{"class":155},[96,36689,33289],{"class":102},[96,36691,1053],{"class":155},[96,36693,33302],{"class":211},[96,36695,33305],{"class":106},[96,36697,33308],{"class":102},[96,36699,1014],{"class":155},[96,36701,33313],{"class":106},[96,36703,435],{"class":102},[96,36705,1014],{"class":155},[96,36707,30476],{"class":106},[96,36709,36710],{"class":98,"line":33322},[96,36711,36712],{"class":165},"    # 选择最优参数并保存\n",[96,36714,36715],{"class":98,"line":33328},[96,36716,36717],{"class":165},"    # 保存最佳模型权重字典\n",[96,36719,36720,36723,36725],{"class":98,"line":33334},[96,36721,36722],{"class":106},"    torch.save(best_model_wts,",[96,36724,33346],{"class":211},[96,36726,113],{"class":106},[96,36728,36729],{"class":98,"line":33340},[96,36730,33366],{"class":165},[96,36732,36733,36735,36737,36739,36741,36743],{"class":98,"line":33351},[96,36734,33372],{"class":106},[96,36736,152],{"class":102},[96,36738,33377],{"class":106},[96,36740,33380],{"class":5200},[96,36742,152],{"class":102},[96,36744,1529],{"class":106},[96,36746,36747,36749,36751,36753],{"class":98,"line":33357},[96,36748,33390],{"class":211},[96,36750,966],{"class":106},[96,36752,33395],{"class":155},[96,36754,33398],{"class":106},[96,36756,36757,36759],{"class":98,"line":33363},[96,36758,33404],{"class":211},[96,36760,33407],{"class":106},[96,36762,36763,36765],{"class":98,"line":33369},[96,36764,33413],{"class":211},[96,36766,33416],{"class":106},[96,36768,36769,36771],{"class":98,"line":33387},[96,36770,33422],{"class":211},[96,36772,33425],{"class":106},[96,36774,36775,36777],{"class":98,"line":33401},[96,36776,33431],{"class":211},[96,36778,33434],{"class":106},[96,36780,36781],{"class":98,"line":33410},[96,36782,33440],{"class":106},[96,36784,36785],{"class":98,"line":33419},[96,36786,33446],{"class":165},[96,36788,36789,36791],{"class":98,"line":33428},[96,36790,4073],{"class":102},[96,36792,33454],{"class":106},[96,36794,36795],{"class":98,"line":33437},[96,36796,2383],{"emptyLinePlaceholder":23},[96,36798,36799],{"class":98,"line":33443},[96,36800,33465],{"class":165},[96,36802,36803,36805,36807],{"class":98,"line":33449},[96,36804,31926],{"class":102},[96,36806,33473],{"class":1946},[96,36808,33476],{"class":106},[96,36810,36811],{"class":98,"line":33457},[96,36812,33482],{"class":165},[96,36814,36815,36817,36819,36821,36823,36825,36827,36829],{"class":98,"line":33462},[96,36816,33488],{"class":106},[96,36818,31672],{"class":5200},[96,36820,152],{"class":102},[96,36822,107],{"class":106},[96,36824,605],{"class":155},[96,36826,485],{"class":106},[96,36828,400],{"class":155},[96,36830,30476],{"class":106},[96,36832,36833],{"class":98,"line":33468},[96,36834,33508],{"class":165},[96,36836,36837],{"class":98,"line":33479},[96,36838,33514],{"class":165},[96,36840,36841],{"class":98,"line":33485},[96,36842,33520],{"class":165},[96,36844,36845,36847,36849,36851,36853,36855,36857],{"class":98,"line":33505},[96,36846,31706],{"class":106},[96,36848,324],{"class":155},[96,36850,485],{"class":106},[96,36852,184],{"class":155},[96,36854,485],{"class":106},[96,36856,324],{"class":155},[96,36858,113],{"class":106},[96,36860,36861],{"class":98,"line":33511},[96,36862,33543],{"class":165},[96,36864,36865],{"class":98,"line":33517},[96,36866,33549],{"class":165},[96,36868,36869],{"class":98,"line":33523},[96,36870,33555],{"class":165},[96,36872,36873],{"class":98,"line":33540},[96,36874,33561],{"class":165},[96,36876,36877],{"class":98,"line":33546},[96,36878,33567],{"class":165},[96,36880,36881,36883,36885,36887,36889,36891,36893,36895,36897],{"class":98,"line":33552},[96,36882,33573],{"class":106},[96,36884,33576],{"class":211},[96,36886,33579],{"class":106},[96,36888,33582],{"class":211},[96,36890,485],{"class":106},[96,36892,33587],{"class":5200},[96,36894,152],{"class":102},[96,36896,33592],{"class":211},[96,36898,113],{"class":106},[96,36900,36901,36903,36905,36907,36909,36911,36913,36915,36917],{"class":98,"line":33558},[96,36902,33573],{"class":106},[96,36904,33576],{"class":211},[96,36906,33604],{"class":106},[96,36908,33607],{"class":211},[96,36910,485],{"class":106},[96,36912,33587],{"class":5200},[96,36914,152],{"class":102},[96,36916,33616],{"class":211},[96,36918,113],{"class":106},[96,36920,36921],{"class":98,"line":33564},[96,36922,33624],{"class":165},[96,36924,36925],{"class":98,"line":33570},[96,36926,33630],{"class":106},[96,36928,36929],{"class":98,"line":33597},[96,36930,33636],{"class":165},[96,36932,36933,36935,36937],{"class":98,"line":33621},[96,36934,33642],{"class":106},[96,36936,33645],{"class":211},[96,36938,113],{"class":106},[96,36940,36941,36943,36945],{"class":98,"line":33627},[96,36942,33653],{"class":106},[96,36944,33656],{"class":211},[96,36946,113],{"class":106},[96,36948,36949],{"class":98,"line":33633},[96,36950,33664],{"class":165},[96,36952,36953,36955,36957,36959,36961,36963,36965],{"class":98,"line":33639},[96,36954,31706],{"class":106},[96,36956,324],{"class":155},[96,36958,485],{"class":106},[96,36960,184],{"class":155},[96,36962,485],{"class":106},[96,36964,184],{"class":155},[96,36966,113],{"class":106},[96,36968,36969,36971,36973,36975,36977,36979,36981,36983,36985],{"class":98,"line":33650},[96,36970,33573],{"class":106},[96,36972,33576],{"class":211},[96,36974,33691],{"class":106},[96,36976,33582],{"class":211},[96,36978,485],{"class":106},[96,36980,33587],{"class":5200},[96,36982,152],{"class":102},[96,36984,33702],{"class":211},[96,36986,113],{"class":106},[96,36988,36989,36991,36993,36995,36997,36999,37001,37003,37005],{"class":98,"line":33661},[96,36990,33573],{"class":106},[96,36992,33576],{"class":211},[96,36994,33714],{"class":106},[96,36996,33607],{"class":211},[96,36998,485],{"class":106},[96,37000,33587],{"class":5200},[96,37002,152],{"class":102},[96,37004,33725],{"class":211},[96,37006,113],{"class":106},[96,37008,37009],{"class":98,"line":33667},[96,37010,33733],{"class":165},[96,37012,37013],{"class":98,"line":33684},[96,37014,33630],{"class":106},[96,37016,37017,37019,37021],{"class":98,"line":33707},[96,37018,33642],{"class":106},[96,37020,33576],{"class":211},[96,37022,113],{"class":106},[96,37024,37025,37027,37029],{"class":98,"line":33730},[96,37026,33653],{"class":106},[96,37028,33755],{"class":211},[96,37030,113],{"class":106},[96,37032,37033],{"class":98,"line":33736},[96,37034,33763],{"class":106},[96,37036,37037],{"class":98,"line":33741},[96,37038,2383],{"emptyLinePlaceholder":23},[96,37040,37041],{"class":98,"line":33750},[96,37042,33774],{"class":165},[96,37044,37045,37047,37049,37051,37053],{"class":98,"line":33760},[96,37046,1514],{"class":102},[96,37048,31199],{"class":155},[96,37050,2932],{"class":102},[96,37052,31204],{"class":211},[96,37054,3722],{"class":106},[96,37056,37057],{"class":98,"line":33766},[96,37058,33793],{"class":165},[96,37060,37061,37064,37066],{"class":98,"line":33771},[96,37062,37063],{"class":106},"    AlexNet",[96,37065,152],{"class":102},[96,37067,37068],{"class":106},"AlexNet()\n",[96,37070,37071,37073,37075],{"class":98,"line":33777},[96,37072,33810],{"class":106},[96,37074,152],{"class":102},[96,37076,33815],{"class":106},[96,37078,37079,37081,37083,37086,37088,37090,37092],{"class":98,"line":33790},[96,37080,33372],{"class":106},[96,37082,152],{"class":102},[96,37084,37085],{"class":106},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[96,37087,33828],{"class":5200},[96,37089,152],{"class":102},[96,37091,807],{"class":155},[96,37093,113],{"class":106},[96,37095,37096],{"class":98,"line":33796},[96,37097,33840],{"class":106},[50,37099,37100],{"start":1162},[53,37101,33853],{},[87,37103,37105],{"className":30357,"code":37104,"language":30359,"meta":18,"style":18},"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",[93,37106,37107,37113,37123,37133,37143,37147,37157,37167,37178,37182,37186,37190,37198,37214,37224,37240,37250,37264,37268,37278,37288,37298,37304,37308,37312,37320,37324,37340,37348,37352,37356,37364,37372,37376,37380,37384,37388,37394,37398,37408,37416,37424,37428,37432,37436,37444,37448,37464,37468,37472,37476,37488,37492,37504,37508,37512,37524,37528,37538,37542,37546,37558,37562,37570,37574,37578,37586,37590,37598,37602,37606,37610,37614,37618,37634,37642,37646,37650,37698,37704,37708,37718,37726,37734,37738,37742,37746,37750,37758,37762,37778,37782,37790,37798],{"__ignoreMap":18},[96,37108,37109,37111],{"class":98,"line":99},[96,37110,30371],{"class":102},[96,37112,30374],{"class":106},[96,37114,37115,37117,37119,37121],{"class":98,"line":19},[96,37116,30371],{"class":102},[96,37118,31394],{"class":106},[96,37120,31362],{"class":102},[96,37122,31399],{"class":106},[96,37124,37125,37127,37129,37131],{"class":98,"line":1162},[96,37126,30716],{"class":102},[96,37128,33881],{"class":106},[96,37130,30371],{"class":102},[96,37132,33886],{"class":106},[96,37134,37135,37137,37139,37141],{"class":98,"line":1177},[96,37136,30716],{"class":102},[96,37138,31377],{"class":106},[96,37140,30371],{"class":102},[96,37142,31382],{"class":106},[96,37144,37145],{"class":98,"line":1183},[96,37146,33901],{"class":165},[96,37148,37149,37151,37153,37155],{"class":98,"line":1197},[96,37150,30716],{"class":102},[96,37152,31347],{"class":106},[96,37154,30371],{"class":102},[96,37156,31352],{"class":106},[96,37158,37159,37161,37163,37165],{"class":98,"line":1203},[96,37160,30716],{"class":102},[96,37162,31893],{"class":106},[96,37164,30371],{"class":102},[96,37166,35536],{"class":106},[96,37168,37169,37171,37174,37176],{"class":98,"line":1294},[96,37170,30716],{"class":102},[96,37172,37173],{"class":106}," 练习.AlexNet.model ",[96,37175,30371],{"class":102},[96,37177,35536],{"class":106},[96,37179,37180],{"class":98,"line":1300},[96,37181,2383],{"emptyLinePlaceholder":23},[96,37183,37184],{"class":98,"line":1312},[96,37185,2383],{"emptyLinePlaceholder":23},[96,37187,37188],{"class":98,"line":1595},[96,37189,33930],{"class":165},[96,37191,37192,37194,37196],{"class":98,"line":1600},[96,37193,31926],{"class":102},[96,37195,33937],{"class":1946},[96,37197,31932],{"class":106},[96,37199,37200,37202,37204,37206,37208,37210,37212],{"class":98,"line":1606},[96,37201,33944],{"class":106},[96,37203,152],{"class":102},[96,37205,31434],{"class":106},[96,37207,31437],{"class":5200},[96,37209,152],{"class":102},[96,37211,31442],{"class":211},[96,37213,31445],{"class":106},[96,37215,37216,37218,37220,37222],{"class":98,"line":1611},[96,37217,33961],{"class":5200},[96,37219,152],{"class":102},[96,37221,33966],{"class":155},[96,37223,31445],{"class":106},[96,37225,37226,37228,37230,37232,37234,37236,37238],{"class":98,"line":1625},[96,37227,33973],{"class":5200},[96,37229,152],{"class":102},[96,37231,31472],{"class":106},[96,37233,31475],{"class":5200},[96,37235,152],{"class":102},[96,37237,35428],{"class":155},[96,37239,31483],{"class":106},[96,37241,37242,37244,37246,37248],{"class":98,"line":1630},[96,37243,33990],{"class":5200},[96,37245,152],{"class":102},[96,37247,31455],{"class":155},[96,37249,113],{"class":106},[96,37251,37252,37254,37256,37258,37260,37262],{"class":98,"line":1636},[96,37253,34001],{"class":106},[96,37255,152],{"class":102},[96,37257,31513],{"class":106},[96,37259,31516],{"class":5200},[96,37261,152],{"class":102},[96,37263,34012],{"class":106},[96,37265,37266],{"class":98,"line":1657},[96,37267,34017],{"class":165},[96,37269,37270,37272,37274,37276],{"class":98,"line":1662},[96,37271,34022],{"class":5200},[96,37273,152],{"class":102},[96,37275,324],{"class":155},[96,37277,31445],{"class":106},[96,37279,37280,37282,37284,37286],{"class":98,"line":1676},[96,37281,34033],{"class":5200},[96,37283,152],{"class":102},[96,37285,31455],{"class":155},[96,37287,31445],{"class":106},[96,37289,37290,37292,37294,37296],{"class":98,"line":1681},[96,37291,34044],{"class":5200},[96,37293,152],{"class":102},[96,37295,298],{"class":155},[96,37297,113],{"class":106},[96,37299,37300,37302],{"class":98,"line":1710},[96,37301,4073],{"class":102},[96,37303,34057],{"class":106},[96,37305,37306],{"class":98,"line":1715},[96,37307,2383],{"emptyLinePlaceholder":23},[96,37309,37310],{"class":98,"line":1732},[96,37311,34066],{"class":165},[96,37313,37314,37316,37318],{"class":98,"line":1737},[96,37315,31926],{"class":102},[96,37317,34073],{"class":1946},[96,37319,34076],{"class":106},[96,37321,37322],{"class":98,"line":1742},[96,37323,34081],{"class":165},[96,37325,37326,37328,37330,37332,37334,37336,37338],{"class":98,"line":1747},[96,37327,31216],{"class":106},[96,37329,152],{"class":102},[96,37331,31223],{"class":211},[96,37333,1687],{"class":102},[96,37335,31228],{"class":106},[96,37337,1684],{"class":102},[96,37339,34098],{"class":211},[96,37341,37342,37344,37346],{"class":98,"line":1761},[96,37343,31268],{"class":106},[96,37345,152],{"class":102},[96,37347,32268],{"class":106},[96,37349,37350],{"class":98,"line":1766},[96,37351,2383],{"emptyLinePlaceholder":23},[96,37353,37354],{"class":98,"line":2560},[96,37355,34115],{"class":165},[96,37357,37358,37360,37362],{"class":98,"line":2574},[96,37359,34120],{"class":106},[96,37361,152],{"class":102},[96,37363,32321],{"class":155},[96,37365,37366,37368,37370],{"class":98,"line":2582},[96,37367,34129],{"class":106},[96,37369,152],{"class":102},[96,37371,3068],{"class":155},[96,37373,37374],{"class":98,"line":2587},[96,37375,2383],{"emptyLinePlaceholder":23},[96,37377,37378],{"class":98,"line":2593},[96,37379,34142],{"class":165},[96,37381,37382],{"class":98,"line":2599},[96,37383,34147],{"class":165},[96,37385,37386],{"class":98,"line":2604},[96,37387,34152],{"class":165},[96,37389,37390,37392],{"class":98,"line":7932},[96,37391,34157],{"class":102},[96,37393,32863],{"class":106},[96,37395,37396],{"class":98,"line":7956},[96,37397,34164],{"class":165},[96,37399,37400,37402,37404,37406],{"class":98,"line":7961},[96,37401,3386],{"class":102},[96,37403,34171],{"class":106},[96,37405,26022],{"class":102},[96,37407,34176],{"class":106},[96,37409,37410,37412,37414],{"class":98,"line":7967},[96,37411,34181],{"class":106},[96,37413,152],{"class":102},[96,37415,34186],{"class":106},[96,37417,37418,37420,37422],{"class":98,"line":7994},[96,37419,34191],{"class":106},[96,37421,152],{"class":102},[96,37423,34196],{"class":106},[96,37425,37426],{"class":98,"line":7999},[96,37427,34201],{"class":165},[96,37429,37430],{"class":98,"line":8005},[96,37431,32854],{"class":106},[96,37433,37434],{"class":98,"line":8017},[96,37435,34210],{"class":165},[96,37437,37438,37440,37442],{"class":98,"line":8029},[96,37439,32639],{"class":106},[96,37441,152],{"class":102},[96,37443,34219],{"class":106},[96,37445,37446],{"class":98,"line":8041},[96,37447,34224],{"class":165},[96,37449,37450,37452,37454,37456,37458,37460,37462],{"class":98,"line":9700},[96,37451,32656],{"class":106},[96,37453,152],{"class":102},[96,37455,32661],{"class":106},[96,37457,32664],{"class":5200},[96,37459,152],{"class":102},[96,37461,324],{"class":155},[96,37463,113],{"class":106},[96,37465,37466],{"class":98,"line":9725},[96,37467,34245],{"class":165},[96,37469,37470],{"class":98,"line":9748},[96,37471,34250],{"class":165},[96,37473,37474],{"class":98,"line":9772},[96,37475,34255],{"class":165},[96,37477,37478,37480,37482,37484,37486],{"class":98,"line":9777},[96,37479,34260],{"class":106},[96,37481,9461],{"class":102},[96,37483,32766],{"class":106},[96,37485,2932],{"class":102},[96,37487,34269],{"class":106},[96,37489,37490],{"class":98,"line":9782},[96,37491,34274],{"class":165},[96,37493,37494,37496,37498,37500,37502],{"class":98,"line":9787},[96,37495,34279],{"class":106},[96,37497,9461],{"class":102},[96,37499,34284],{"class":106},[96,37501,298],{"class":155},[96,37503,113],{"class":106},[96,37505,37506],{"class":98,"line":9796},[96,37507,2383],{"emptyLinePlaceholder":23},[96,37509,37510],{"class":98,"line":9801},[96,37511,34297],{"class":165},[96,37513,37514,37516,37518,37520,37522],{"class":98,"line":9807},[96,37515,34302],{"class":106},[96,37517,152],{"class":102},[96,37519,34307],{"class":106},[96,37521,691],{"class":102},[96,37523,34312],{"class":106},[96,37525,37526],{"class":98,"line":9828},[96,37527,34317],{"class":165},[96,37529,37530,37532,37534,37536],{"class":98,"line":9834},[96,37531,32430],{"class":155},[96,37533,107],{"class":106},[96,37535,34326],{"class":211},[96,37537,34329],{"class":106},[96,37539,37540],{"class":98,"line":9848},[96,37541,2383],{"emptyLinePlaceholder":23},[96,37543,37544],{"class":98,"line":9854},[96,37545,34338],{"class":165},[96,37547,37548,37550,37552,37554,37556],{"class":98,"line":9881},[96,37549,1514],{"class":102},[96,37551,31199],{"class":155},[96,37553,2932],{"class":102},[96,37555,31204],{"class":211},[96,37557,3722],{"class":106},[96,37559,37560],{"class":98,"line":9890},[96,37561,34355],{"class":165},[96,37563,37564,37566,37568],{"class":98,"line":9896},[96,37565,31268],{"class":106},[96,37567,152],{"class":102},[96,37569,37068],{"class":106},[96,37571,37572],{"class":98,"line":9904},[96,37573,34368],{"class":165},[96,37575,37576],{"class":98,"line":9909},[96,37577,34373],{"class":165},[96,37579,37580,37582,37584],{"class":98,"line":16588},[96,37581,34378],{"class":106},[96,37583,34381],{"class":211},[96,37585,30476],{"class":106},[96,37587,37588],{"class":98,"line":16594},[96,37589,34388],{"class":165},[96,37591,37592,37594,37596],{"class":98,"line":16617},[96,37593,34001],{"class":106},[96,37595,152],{"class":102},[96,37597,34397],{"class":106},[96,37599,37600],{"class":98,"line":16623},[96,37601,34402],{"class":165},[96,37603,37604],{"class":98,"line":16646},[96,37605,34407],{"class":106},[96,37607,37608],{"class":98,"line":16660},[96,37609,2383],{"emptyLinePlaceholder":23},[96,37611,37612],{"class":98,"line":16680},[96,37613,34416],{"class":165},[96,37615,37616],{"class":98,"line":16686},[96,37617,34421],{"class":165},[96,37619,37620,37622,37624,37626,37628,37630,37632],{"class":98,"line":16697},[96,37621,31216],{"class":106},[96,37623,152],{"class":102},[96,37625,31223],{"class":211},[96,37627,1687],{"class":102},[96,37629,31228],{"class":106},[96,37631,1684],{"class":102},[96,37633,34098],{"class":211},[96,37635,37636,37638,37640],{"class":98,"line":16720},[96,37637,31268],{"class":106},[96,37639,152],{"class":102},[96,37641,32268],{"class":106},[96,37643,37644],{"class":98,"line":16742},[96,37645,34450],{"class":165},[96,37647,37648],{"class":98,"line":16747},[96,37649,34455],{"class":165},[96,37651,37652,37654,37656,37658,37660,37662,37664,37666,37668,37670,37672,37674,37676,37678,37680,37682,37684,37686,37688,37690,37692,37694,37696],{"class":98,"line":16753},[96,37653,34460],{"class":106},[96,37655,152],{"class":102},[96,37657,997],{"class":106},[96,37659,34467],{"class":211},[96,37661,485],{"class":106},[96,37663,34472],{"class":211},[96,37665,485],{"class":106},[96,37667,34477],{"class":211},[96,37669,485],{"class":106},[96,37671,34482],{"class":211},[96,37673,485],{"class":106},[96,37675,34487],{"class":211},[96,37677,485],{"class":106},[96,37679,34492],{"class":211},[96,37681,485],{"class":106},[96,37683,34497],{"class":211},[96,37685,485],{"class":106},[96,37687,34502],{"class":211},[96,37689,485],{"class":106},[96,37691,34507],{"class":211},[96,37693,485],{"class":106},[96,37695,34512],{"class":211},[96,37697,33225],{"class":106},[96,37699,37700,37702],{"class":98,"line":16767},[96,37701,34157],{"class":102},[96,37703,32863],{"class":106},[96,37705,37706],{"class":98,"line":16780},[96,37707,34525],{"class":165},[96,37709,37710,37712,37714,37716],{"class":98,"line":16785},[96,37711,3386],{"class":102},[96,37713,34532],{"class":106},[96,37715,26022],{"class":102},[96,37717,34176],{"class":106},[96,37719,37720,37722,37724],{"class":98,"line":16799},[96,37721,32589],{"class":106},[96,37723,152],{"class":102},[96,37725,32594],{"class":106},[96,37727,37728,37730,37732],{"class":98,"line":16804},[96,37729,32604],{"class":106},[96,37731,152],{"class":102},[96,37733,32609],{"class":106},[96,37735,37736],{"class":98,"line":16810},[96,37737,2383],{"emptyLinePlaceholder":23},[96,37739,37740],{"class":98,"line":16815},[96,37741,34561],{"class":165},[96,37743,37744],{"class":98,"line":16829},[96,37745,32854],{"class":106},[96,37747,37748],{"class":98,"line":16834},[96,37749,34570],{"class":165},[96,37751,37752,37754,37756],{"class":98,"line":16839},[96,37753,32639],{"class":106},[96,37755,152],{"class":102},[96,37757,32644],{"class":106},[96,37759,37760],{"class":98,"line":16853},[96,37761,34583],{"class":165},[96,37763,37764,37766,37768,37770,37772,37774,37776],{"class":98,"line":16865},[96,37765,32656],{"class":106},[96,37767,152],{"class":102},[96,37769,32661],{"class":106},[96,37771,32664],{"class":5200},[96,37773,152],{"class":102},[96,37775,324],{"class":155},[96,37777,113],{"class":106},[96,37779,37780],{"class":98,"line":16870},[96,37781,34604],{"class":165},[96,37783,37784,37786,37788],{"class":98,"line":16883},[96,37785,34609],{"class":106},[96,37787,152],{"class":102},[96,37789,34614],{"class":106},[96,37791,37792,37794,37796],{"class":98,"line":16888},[96,37793,34619],{"class":106},[96,37795,152],{"class":102},[96,37797,34624],{"class":106},[96,37799,37800,37802,37804,37806,37808,37810,37812,37814],{"class":98,"line":16893},[96,37801,34629],{"class":155},[96,37803,107],{"class":106},[96,37805,34634],{"class":211},[96,37807,34637],{"class":106},[96,37809,34640],{"class":211},[96,37811,485],{"class":106},[96,37813,34645],{"class":211},[96,37815,34648],{"class":106},[67,37817,37819],{"id":37818},"_22vgg","2.2.VGG",[21982,37821,37823],{"id":37822},"_221原理","2.2.1.原理",[14,37825,37826],{},[1445,37827],{"alt":18,"src":37828},"\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,37830,37831],{},[1445,37832],{"alt":18,"src":37833},"\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,37835,37836],{},[1445,37837],{"alt":18,"src":37838},"\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,37840,37841],{},"参数详细描述：",[14,37843,37844],{},[1445,37845],{"alt":18,"src":37846},"\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,37848,37849],{},[1445,37850],{"alt":18,"src":37851},"\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,37853,37854],{},[1445,37855],{"alt":18,"src":37856},"\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,37858,37859],{},[1445,37860],{"alt":18,"src":37861},"\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,37863,37864],{},[1445,37865],{"alt":18,"src":37866},"\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",[21982,37868,37870],{"id":37869},"_222代码实现","2.2.2.代码实现",[50,37872,37873],{},[53,37874,37875],{},"网络搭建",[87,37877,37879],{"className":30357,"code":37878,"language":30359,"meta":18,"style":18},"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",[93,37880,37881,37887,37899,37909,37919,37923,37940,37948,37967,37972,37977,37989,38027,38032,38068,38072,38101,38106,38111,38122,38158,38162,38198,38202,38230,38234,38239,38250,38286,38290,38326,38330,38366,38370,38398,38402,38407,38418,38455,38459,38495,38499,38535,38539,38567,38571,38576,38587,38623,38627,38663,38667,38703,38707,38735,38739,38744,38755,38760,38765,38770,38791,38795,38807,38811,38823,38827,38831,38836,38841,38856,38861,38871,38876,38891,38896,38915,38920,38929,38934,38944,38949,38954,38968,38973,38987,38995,38999,39003,39011,39022,39033,39044,39055,39066,39077,39083,39087,39092,39105,39125,39131,39140],{"__ignoreMap":18},[96,37882,37883,37885],{"class":98,"line":99},[96,37884,30371],{"class":102},[96,37886,30374],{"class":106},[96,37888,37889,37891,37894,37896],{"class":98,"line":19},[96,37890,30716],{"class":102},[96,37892,37893],{"class":106}," sympy.core.sympify ",[96,37895,30371],{"class":102},[96,37897,37898],{"class":106}," kernS\n",[96,37900,37901,37903,37905,37907],{"class":98,"line":1162},[96,37902,30716],{"class":102},[96,37904,30719],{"class":106},[96,37906,30371],{"class":102},[96,37908,30724],{"class":106},[96,37910,37911,37913,37915,37917],{"class":98,"line":1177},[96,37912,30716],{"class":102},[96,37914,30736],{"class":106},[96,37916,30371],{"class":102},[96,37918,30741],{"class":106},[96,37920,37921],{"class":98,"line":1183},[96,37922,2383],{"emptyLinePlaceholder":23},[96,37924,37925,37927,37930,37932,37934,37936,37938],{"class":98,"line":1197},[96,37926,14678],{"class":102},[96,37928,37929],{"class":1946}," VGG16",[96,37931,107],{"class":106},[96,37933,30757],{"class":1946},[96,37935,665],{"class":106},[96,37937,30762],{"class":1946},[96,37939,30765],{"class":106},[96,37941,37942,37944,37946],{"class":98,"line":1203},[96,37943,30780],{"class":102},[96,37945,30783],{"class":155},[96,37947,30786],{"class":106},[96,37949,37950,37952,37954,37957,37959,37961,37963,37965],{"class":98,"line":1294},[96,37951,30796],{"class":155},[96,37953,107],{"class":106},[96,37955,37956],{"class":155},"VGG16",[96,37958,12419],{"class":106},[96,37960,30802],{"class":155},[96,37962,30805],{"class":106},[96,37964,30808],{"class":155},[96,37966,1959],{"class":106},[96,37968,37969],{"class":98,"line":1300},[96,37970,37971],{"class":165},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[96,37973,37974],{"class":98,"line":1312},[96,37975,37976],{"class":165},"        # 这里用的是灰度图\n",[96,37978,37979,37981,37984,37986],{"class":98,"line":1595},[96,37980,30824],{"class":155},[96,37982,37983],{"class":106},".block1",[96,37985,152],{"class":102},[96,37987,37988],{"class":106},"nn.Sequential(\n",[96,37990,37991,37994,37996,37998,38000,38002,38004,38006,38008,38010,38012,38014,38016,38018,38020,38022,38024],{"class":98,"line":1600},[96,37992,37993],{"class":106},"            nn.Conv2d(",[96,37995,30835],{"class":5200},[96,37997,152],{"class":102},[96,37999,324],{"class":155},[96,38001,485],{"class":106},[96,38003,30844],{"class":5200},[96,38005,152],{"class":102},[96,38007,310],{"class":155},[96,38009,485],{"class":106},[96,38011,30853],{"class":5200},[96,38013,152],{"class":102},[96,38015,178],{"class":155},[96,38017,485],{"class":106},[96,38019,30862],{"class":5200},[96,38021,152],{"class":102},[96,38023,324],{"class":155},[96,38025,38026],{"class":106},"),\n",[96,38028,38029],{"class":98,"line":1606},[96,38030,38031],{"class":106},"            nn.ReLU(),\n",[96,38033,38034,38036,38038,38040,38042,38044,38046,38048,38050,38052,38054,38056,38058,38060,38062,38064,38066],{"class":98,"line":1611},[96,38035,37993],{"class":106},[96,38037,30835],{"class":5200},[96,38039,152],{"class":102},[96,38041,310],{"class":155},[96,38043,485],{"class":106},[96,38045,30844],{"class":5200},[96,38047,152],{"class":102},[96,38049,310],{"class":155},[96,38051,485],{"class":106},[96,38053,30853],{"class":5200},[96,38055,152],{"class":102},[96,38057,178],{"class":155},[96,38059,485],{"class":106},[96,38061,30862],{"class":5200},[96,38063,152],{"class":102},[96,38065,324],{"class":155},[96,38067,38026],{"class":106},[96,38069,38070],{"class":98,"line":1625},[96,38071,38031],{"class":106},[96,38073,38074,38077,38079,38081,38083,38085,38087,38089,38091,38093,38095,38097,38099],{"class":98,"line":1630},[96,38075,38076],{"class":106},"            nn.MaxPool2d(",[96,38078,30853],{"class":5200},[96,38080,152],{"class":102},[96,38082,184],{"class":155},[96,38084,485],{"class":106},[96,38086,30908],{"class":5200},[96,38088,152],{"class":102},[96,38090,184],{"class":155},[96,38092,485],{"class":106},[96,38094,30862],{"class":5200},[96,38096,152],{"class":102},[96,38098,298],{"class":155},[96,38100,113],{"class":106},[96,38102,38103],{"class":98,"line":1636},[96,38104,38105],{"class":106},"        )\n",[96,38107,38108],{"class":98,"line":1657},[96,38109,38110],{"class":165},"        # 第二层\n",[96,38112,38113,38115,38118,38120],{"class":98,"line":1662},[96,38114,30824],{"class":155},[96,38116,38117],{"class":106},".block2",[96,38119,152],{"class":102},[96,38121,37988],{"class":106},[96,38123,38124,38126,38128,38130,38132,38134,38136,38138,38140,38142,38144,38146,38148,38150,38152,38154,38156],{"class":98,"line":1676},[96,38125,37993],{"class":106},[96,38127,30835],{"class":5200},[96,38129,152],{"class":102},[96,38131,310],{"class":155},[96,38133,485],{"class":106},[96,38135,30844],{"class":5200},[96,38137,152],{"class":102},[96,38139,32049],{"class":155},[96,38141,485],{"class":106},[96,38143,30853],{"class":5200},[96,38145,152],{"class":102},[96,38147,178],{"class":155},[96,38149,485],{"class":106},[96,38151,30862],{"class":5200},[96,38153,152],{"class":102},[96,38155,324],{"class":155},[96,38157,38026],{"class":106},[96,38159,38160],{"class":98,"line":1681},[96,38161,38031],{"class":106},[96,38163,38164,38166,38168,38170,38172,38174,38176,38178,38180,38182,38184,38186,38188,38190,38192,38194,38196],{"class":98,"line":1710},[96,38165,37993],{"class":106},[96,38167,30835],{"class":5200},[96,38169,152],{"class":102},[96,38171,32049],{"class":155},[96,38173,485],{"class":106},[96,38175,30844],{"class":5200},[96,38177,152],{"class":102},[96,38179,32049],{"class":155},[96,38181,485],{"class":106},[96,38183,30853],{"class":5200},[96,38185,152],{"class":102},[96,38187,178],{"class":155},[96,38189,485],{"class":106},[96,38191,30862],{"class":5200},[96,38193,152],{"class":102},[96,38195,324],{"class":155},[96,38197,38026],{"class":106},[96,38199,38200],{"class":98,"line":1715},[96,38201,38031],{"class":106},[96,38203,38204,38206,38208,38210,38212,38214,38216,38218,38220,38222,38224,38226,38228],{"class":98,"line":1732},[96,38205,38076],{"class":106},[96,38207,30853],{"class":5200},[96,38209,152],{"class":102},[96,38211,184],{"class":155},[96,38213,485],{"class":106},[96,38215,30908],{"class":5200},[96,38217,152],{"class":102},[96,38219,184],{"class":155},[96,38221,485],{"class":106},[96,38223,30862],{"class":5200},[96,38225,152],{"class":102},[96,38227,298],{"class":155},[96,38229,113],{"class":106},[96,38231,38232],{"class":98,"line":1737},[96,38233,38105],{"class":106},[96,38235,38236],{"class":98,"line":1742},[96,38237,38238],{"class":165},"        # 第三层\n",[96,38240,38241,38243,38246,38248],{"class":98,"line":1747},[96,38242,30824],{"class":155},[96,38244,38245],{"class":106},".block3",[96,38247,152],{"class":102},[96,38249,37988],{"class":106},[96,38251,38252,38254,38256,38258,38260,38262,38264,38266,38268,38270,38272,38274,38276,38278,38280,38282,38284],{"class":98,"line":1761},[96,38253,37993],{"class":106},[96,38255,30835],{"class":5200},[96,38257,152],{"class":102},[96,38259,32049],{"class":155},[96,38261,485],{"class":106},[96,38263,30844],{"class":5200},[96,38265,152],{"class":102},[96,38267,34849],{"class":155},[96,38269,485],{"class":106},[96,38271,30853],{"class":5200},[96,38273,152],{"class":102},[96,38275,178],{"class":155},[96,38277,485],{"class":106},[96,38279,30862],{"class":5200},[96,38281,152],{"class":102},[96,38283,324],{"class":155},[96,38285,38026],{"class":106},[96,38287,38288],{"class":98,"line":1766},[96,38289,38031],{"class":106},[96,38291,38292,38294,38296,38298,38300,38302,38304,38306,38308,38310,38312,38314,38316,38318,38320,38322,38324],{"class":98,"line":2560},[96,38293,37993],{"class":106},[96,38295,30835],{"class":5200},[96,38297,152],{"class":102},[96,38299,34849],{"class":155},[96,38301,485],{"class":106},[96,38303,30844],{"class":5200},[96,38305,152],{"class":102},[96,38307,34849],{"class":155},[96,38309,485],{"class":106},[96,38311,30853],{"class":5200},[96,38313,152],{"class":102},[96,38315,178],{"class":155},[96,38317,485],{"class":106},[96,38319,30862],{"class":5200},[96,38321,152],{"class":102},[96,38323,324],{"class":155},[96,38325,38026],{"class":106},[96,38327,38328],{"class":98,"line":2574},[96,38329,38031],{"class":106},[96,38331,38332,38334,38336,38338,38340,38342,38344,38346,38348,38350,38352,38354,38356,38358,38360,38362,38364],{"class":98,"line":2582},[96,38333,37993],{"class":106},[96,38335,30835],{"class":5200},[96,38337,152],{"class":102},[96,38339,34849],{"class":155},[96,38341,485],{"class":106},[96,38343,30844],{"class":5200},[96,38345,152],{"class":102},[96,38347,34849],{"class":155},[96,38349,485],{"class":106},[96,38351,30853],{"class":5200},[96,38353,152],{"class":102},[96,38355,178],{"class":155},[96,38357,485],{"class":106},[96,38359,30862],{"class":5200},[96,38361,152],{"class":102},[96,38363,324],{"class":155},[96,38365,38026],{"class":106},[96,38367,38368],{"class":98,"line":2587},[96,38369,38031],{"class":106},[96,38371,38372,38374,38376,38378,38380,38382,38384,38386,38388,38390,38392,38394,38396],{"class":98,"line":2593},[96,38373,38076],{"class":106},[96,38375,30853],{"class":5200},[96,38377,152],{"class":102},[96,38379,184],{"class":155},[96,38381,485],{"class":106},[96,38383,30908],{"class":5200},[96,38385,152],{"class":102},[96,38387,184],{"class":155},[96,38389,485],{"class":106},[96,38391,30862],{"class":5200},[96,38393,152],{"class":102},[96,38395,298],{"class":155},[96,38397,113],{"class":106},[96,38399,38400],{"class":98,"line":2599},[96,38401,38105],{"class":106},[96,38403,38404],{"class":98,"line":2604},[96,38405,38406],{"class":165},"        # 第四层\n",[96,38408,38409,38411,38414,38416],{"class":98,"line":7932},[96,38410,30824],{"class":155},[96,38412,38413],{"class":106},".block4",[96,38415,152],{"class":102},[96,38417,37988],{"class":106},[96,38419,38420,38422,38424,38426,38428,38430,38432,38434,38437,38439,38441,38443,38445,38447,38449,38451,38453],{"class":98,"line":7956},[96,38421,37993],{"class":106},[96,38423,30835],{"class":5200},[96,38425,152],{"class":102},[96,38427,34849],{"class":155},[96,38429,485],{"class":106},[96,38431,30844],{"class":5200},[96,38433,152],{"class":102},[96,38435,38436],{"class":155},"512",[96,38438,485],{"class":106},[96,38440,30853],{"class":5200},[96,38442,152],{"class":102},[96,38444,178],{"class":155},[96,38446,485],{"class":106},[96,38448,30862],{"class":5200},[96,38450,152],{"class":102},[96,38452,324],{"class":155},[96,38454,38026],{"class":106},[96,38456,38457],{"class":98,"line":7961},[96,38458,38031],{"class":106},[96,38460,38461,38463,38465,38467,38469,38471,38473,38475,38477,38479,38481,38483,38485,38487,38489,38491,38493],{"class":98,"line":7967},[96,38462,37993],{"class":106},[96,38464,30835],{"class":5200},[96,38466,152],{"class":102},[96,38468,38436],{"class":155},[96,38470,485],{"class":106},[96,38472,30844],{"class":5200},[96,38474,152],{"class":102},[96,38476,38436],{"class":155},[96,38478,485],{"class":106},[96,38480,30853],{"class":5200},[96,38482,152],{"class":102},[96,38484,178],{"class":155},[96,38486,485],{"class":106},[96,38488,30862],{"class":5200},[96,38490,152],{"class":102},[96,38492,324],{"class":155},[96,38494,38026],{"class":106},[96,38496,38497],{"class":98,"line":7994},[96,38498,38031],{"class":106},[96,38500,38501,38503,38505,38507,38509,38511,38513,38515,38517,38519,38521,38523,38525,38527,38529,38531,38533],{"class":98,"line":7999},[96,38502,37993],{"class":106},[96,38504,30835],{"class":5200},[96,38506,152],{"class":102},[96,38508,38436],{"class":155},[96,38510,485],{"class":106},[96,38512,30844],{"class":5200},[96,38514,152],{"class":102},[96,38516,38436],{"class":155},[96,38518,485],{"class":106},[96,38520,30853],{"class":5200},[96,38522,152],{"class":102},[96,38524,178],{"class":155},[96,38526,485],{"class":106},[96,38528,30862],{"class":5200},[96,38530,152],{"class":102},[96,38532,324],{"class":155},[96,38534,38026],{"class":106},[96,38536,38537],{"class":98,"line":8005},[96,38538,38031],{"class":106},[96,38540,38541,38543,38545,38547,38549,38551,38553,38555,38557,38559,38561,38563,38565],{"class":98,"line":8017},[96,38542,38076],{"class":106},[96,38544,30853],{"class":5200},[96,38546,152],{"class":102},[96,38548,184],{"class":155},[96,38550,485],{"class":106},[96,38552,30908],{"class":5200},[96,38554,152],{"class":102},[96,38556,184],{"class":155},[96,38558,485],{"class":106},[96,38560,30862],{"class":5200},[96,38562,152],{"class":102},[96,38564,298],{"class":155},[96,38566,113],{"class":106},[96,38568,38569],{"class":98,"line":8029},[96,38570,38105],{"class":106},[96,38572,38573],{"class":98,"line":8041},[96,38574,38575],{"class":165},"        # 第五层\n",[96,38577,38578,38580,38583,38585],{"class":98,"line":9700},[96,38579,30824],{"class":155},[96,38581,38582],{"class":106},".block5",[96,38584,152],{"class":102},[96,38586,37988],{"class":106},[96,38588,38589,38591,38593,38595,38597,38599,38601,38603,38605,38607,38609,38611,38613,38615,38617,38619,38621],{"class":98,"line":9725},[96,38590,37993],{"class":106},[96,38592,30835],{"class":5200},[96,38594,152],{"class":102},[96,38596,38436],{"class":155},[96,38598,485],{"class":106},[96,38600,30844],{"class":5200},[96,38602,152],{"class":102},[96,38604,38436],{"class":155},[96,38606,485],{"class":106},[96,38608,30853],{"class":5200},[96,38610,152],{"class":102},[96,38612,178],{"class":155},[96,38614,485],{"class":106},[96,38616,30862],{"class":5200},[96,38618,152],{"class":102},[96,38620,324],{"class":155},[96,38622,38026],{"class":106},[96,38624,38625],{"class":98,"line":9748},[96,38626,38031],{"class":106},[96,38628,38629,38631,38633,38635,38637,38639,38641,38643,38645,38647,38649,38651,38653,38655,38657,38659,38661],{"class":98,"line":9772},[96,38630,37993],{"class":106},[96,38632,30835],{"class":5200},[96,38634,152],{"class":102},[96,38636,38436],{"class":155},[96,38638,485],{"class":106},[96,38640,30844],{"class":5200},[96,38642,152],{"class":102},[96,38644,38436],{"class":155},[96,38646,485],{"class":106},[96,38648,30853],{"class":5200},[96,38650,152],{"class":102},[96,38652,178],{"class":155},[96,38654,485],{"class":106},[96,38656,30862],{"class":5200},[96,38658,152],{"class":102},[96,38660,324],{"class":155},[96,38662,38026],{"class":106},[96,38664,38665],{"class":98,"line":9777},[96,38666,38031],{"class":106},[96,38668,38669,38671,38673,38675,38677,38679,38681,38683,38685,38687,38689,38691,38693,38695,38697,38699,38701],{"class":98,"line":9782},[96,38670,37993],{"class":106},[96,38672,30835],{"class":5200},[96,38674,152],{"class":102},[96,38676,38436],{"class":155},[96,38678,485],{"class":106},[96,38680,30844],{"class":5200},[96,38682,152],{"class":102},[96,38684,38436],{"class":155},[96,38686,485],{"class":106},[96,38688,30853],{"class":5200},[96,38690,152],{"class":102},[96,38692,178],{"class":155},[96,38694,485],{"class":106},[96,38696,30862],{"class":5200},[96,38698,152],{"class":102},[96,38700,324],{"class":155},[96,38702,38026],{"class":106},[96,38704,38705],{"class":98,"line":9787},[96,38706,38031],{"class":106},[96,38708,38709,38711,38713,38715,38717,38719,38721,38723,38725,38727,38729,38731,38733],{"class":98,"line":9796},[96,38710,38076],{"class":106},[96,38712,30853],{"class":5200},[96,38714,152],{"class":102},[96,38716,184],{"class":155},[96,38718,485],{"class":106},[96,38720,30908],{"class":5200},[96,38722,152],{"class":102},[96,38724,184],{"class":155},[96,38726,485],{"class":106},[96,38728,30862],{"class":5200},[96,38730,152],{"class":102},[96,38732,298],{"class":155},[96,38734,113],{"class":106},[96,38736,38737],{"class":98,"line":9801},[96,38738,38105],{"class":106},[96,38740,38741],{"class":98,"line":9807},[96,38742,38743],{"class":165},"        # 全连接层\n",[96,38745,38746,38748,38751,38753],{"class":98,"line":9828},[96,38747,30824],{"class":155},[96,38749,38750],{"class":106},".block6",[96,38752,152],{"class":102},[96,38754,37988],{"class":106},[96,38756,38757],{"class":98,"line":9834},[96,38758,38759],{"class":165},"            # 平展操作\n",[96,38761,38762],{"class":98,"line":9848},[96,38763,38764],{"class":165},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[96,38766,38767],{"class":98,"line":9854},[96,38768,38769],{"class":106},"            nn.Flatten(),\n",[96,38771,38772,38775,38777,38779,38781,38783,38785,38787,38789],{"class":98,"line":9881},[96,38773,38774],{"class":106},"            nn.Linear(",[96,38776,476],{"class":155},[96,38778,562],{"class":102},[96,38780,476],{"class":155},[96,38782,562],{"class":102},[96,38784,38436],{"class":155},[96,38786,485],{"class":106},[96,38788,34849],{"class":155},[96,38790,38026],{"class":106},[96,38792,38793],{"class":98,"line":9890},[96,38794,38031],{"class":106},[96,38796,38797,38799,38801,38803,38805],{"class":98,"line":9896},[96,38798,38774],{"class":106},[96,38800,34849],{"class":155},[96,38802,485],{"class":106},[96,38804,32049],{"class":155},[96,38806,38026],{"class":106},[96,38808,38809],{"class":98,"line":9904},[96,38810,38031],{"class":106},[96,38812,38813,38815,38817,38819,38821],{"class":98,"line":9909},[96,38814,38774],{"class":106},[96,38816,32049],{"class":155},[96,38818,485],{"class":106},[96,38820,553],{"class":155},[96,38822,113],{"class":106},[96,38824,38825],{"class":98,"line":16588},[96,38826,38105],{"class":106},[96,38828,38829],{"class":98,"line":16594},[96,38830,2383],{"emptyLinePlaceholder":23},[96,38832,38833],{"class":98,"line":16617},[96,38834,38835],{"class":165},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[96,38837,38838],{"class":98,"line":16623},[96,38839,38840],{"class":165},"        # 循环遍历模型\n",[96,38842,38843,38845,38848,38850,38853],{"class":98,"line":16646},[96,38844,3386],{"class":102},[96,38846,38847],{"class":106}," m ",[96,38849,26022],{"class":102},[96,38851,38852],{"class":155}," self",[96,38854,38855],{"class":106},".modules():\n",[96,38857,38858],{"class":98,"line":16660},[96,38859,38860],{"class":165},"            # print(m)\n",[96,38862,38863,38865,38868],{"class":98,"line":16680},[96,38864,4625],{"class":102},[96,38866,38867],{"class":155}," isinstance",[96,38869,38870],{"class":106},"(m,nn.Conv2d):\n",[96,38872,38873],{"class":98,"line":16686},[96,38874,38875],{"class":165},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[96,38877,38878,38881,38884,38886,38889],{"class":98,"line":16697},[96,38879,38880],{"class":106},"                nn.init.kaiming_normal_(m.weight,",[96,38882,38883],{"class":5200},"nonlinearity",[96,38885,152],{"class":102},[96,38887,38888],{"class":211},"'relu'",[96,38890,113],{"class":106},[96,38892,38893],{"class":98,"line":16720},[96,38894,38895],{"class":165},"                # 判断b参数是否存在\n",[96,38897,38898,38901,38904,38907,38910,38913],{"class":98,"line":16742},[96,38899,38900],{"class":102},"                if",[96,38902,38903],{"class":106}," m.bias ",[96,38905,38906],{"class":102},"is",[96,38908,38909],{"class":102}," not",[96,38911,38912],{"class":155}," None",[96,38914,3722],{"class":106},[96,38916,38917],{"class":98,"line":16747},[96,38918,38919],{"class":165},"                    # 如果参数不存在的化初始化b=0\n",[96,38921,38922,38925,38927],{"class":98,"line":16753},[96,38923,38924],{"class":106},"                    nn.init.constant_(m.bias,",[96,38926,298],{"class":155},[96,38928,113],{"class":106},[96,38930,38931],{"class":98,"line":16767},[96,38932,38933],{"class":165},"            # 全连接层初始化\n",[96,38935,38936,38939,38941],{"class":98,"line":16780},[96,38937,38938],{"class":102},"            elif",[96,38940,38867],{"class":155},[96,38942,38943],{"class":106},"(m,nn.Linear):\n",[96,38945,38946],{"class":98,"line":16785},[96,38947,38948],{"class":165},"                # 这个初始化方法是利用的是正太分布的方式\n",[96,38950,38951],{"class":98,"line":16799},[96,38952,38953],{"class":165},"                # 均值为0，方差为0.01\n",[96,38955,38956,38959,38961,38963,38966],{"class":98,"line":16804},[96,38957,38958],{"class":106},"                nn.init.normal_(m.weight,",[96,38960,298],{"class":155},[96,38962,485],{"class":106},[96,38964,38965],{"class":155},"0.01",[96,38967,113],{"class":106},[96,38969,38970],{"class":98,"line":16810},[96,38971,38972],{"class":165},"                # 初始化b参数\n",[96,38974,38975,38977,38979,38981,38983,38985],{"class":98,"line":16815},[96,38976,38900],{"class":102},[96,38978,38903],{"class":106},[96,38980,38906],{"class":102},[96,38982,38909],{"class":102},[96,38984,38912],{"class":155},[96,38986,3722],{"class":106},[96,38988,38989,38991,38993],{"class":98,"line":16829},[96,38990,38924],{"class":106},[96,38992,298],{"class":155},[96,38994,113],{"class":106},[96,38996,38997],{"class":98,"line":16834},[96,38998,2383],{"emptyLinePlaceholder":23},[96,39000,39001],{"class":98,"line":16839},[96,39002,35144],{"class":165},[96,39004,39005,39007,39009],{"class":98,"line":16853},[96,39006,30780],{"class":102},[96,39008,31072],{"class":1946},[96,39010,31075],{"class":106},[96,39012,39013,39015,39017,39019],{"class":98,"line":16865},[96,39014,31080],{"class":106},[96,39016,152],{"class":102},[96,39018,30802],{"class":155},[96,39020,39021],{"class":106},".block1(x)\n",[96,39023,39024,39026,39028,39030],{"class":98,"line":16870},[96,39025,31080],{"class":106},[96,39027,152],{"class":102},[96,39029,30802],{"class":155},[96,39031,39032],{"class":106},".block2(x)\n",[96,39034,39035,39037,39039,39041],{"class":98,"line":16883},[96,39036,31080],{"class":106},[96,39038,152],{"class":102},[96,39040,30802],{"class":155},[96,39042,39043],{"class":106},".block3(x)\n",[96,39045,39046,39048,39050,39052],{"class":98,"line":16888},[96,39047,31080],{"class":106},[96,39049,152],{"class":102},[96,39051,30802],{"class":155},[96,39053,39054],{"class":106},".block4(x)\n",[96,39056,39057,39059,39061,39063],{"class":98,"line":16893},[96,39058,31080],{"class":106},[96,39060,152],{"class":102},[96,39062,30802],{"class":155},[96,39064,39065],{"class":106},".block5(x)\n",[96,39067,39068,39070,39072,39074],{"class":98,"line":16898},[96,39069,31080],{"class":106},[96,39071,152],{"class":102},[96,39073,30802],{"class":155},[96,39075,39076],{"class":106},".block6(x)\n",[96,39078,39079,39081],{"class":98,"line":16911},[96,39080,14736],{"class":102},[96,39082,31188],{"class":106},[96,39084,39085],{"class":98,"line":16916},[96,39086,2383],{"emptyLinePlaceholder":23},[96,39088,39089],{"class":98,"line":32612},[96,39090,39091],{"class":165},"# 验证模型\n",[96,39093,39094,39096,39098,39100,39103],{"class":98,"line":32618},[96,39095,1514],{"class":102},[96,39097,31199],{"class":155},[96,39099,2932],{"class":102},[96,39101,39102],{"class":211},"'__main__'",[96,39104,3722],{"class":106},[96,39106,39107,39109,39111,39113,39115,39117,39119,39121,39123],{"class":98,"line":32624},[96,39108,31216],{"class":106},[96,39110,152],{"class":102},[96,39112,30430],{"class":106},[96,39114,31223],{"class":211},[96,39116,1687],{"class":102},[96,39118,31228],{"class":106},[96,39120,1684],{"class":102},[96,39122,30455],{"class":211},[96,39124,113],{"class":106},[96,39126,39127,39129],{"class":98,"line":32630},[96,39128,31278],{"class":155},[96,39130,30464],{"class":106},[96,39132,39133,39135,39137],{"class":98,"line":32636},[96,39134,31268],{"class":106},[96,39136,152],{"class":102},[96,39138,39139],{"class":106},"VGG16().to(device)\n",[96,39141,39142,39144,39146,39148,39150,39152,39154,39156],{"class":98,"line":32647},[96,39143,31278],{"class":155},[96,39145,31281],{"class":106},[96,39147,324],{"class":155},[96,39149,485],{"class":106},[96,39151,31480],{"class":155},[96,39153,485],{"class":106},[96,39155,31480],{"class":155},[96,39157,31294],{"class":106},[50,39159,39160],{"start":19},[53,39161,39162],{},"训练代码",[14,39164,39165],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[14,39167,39168],{},"解决方式:",[14,39170,39171],{},"①权重初始化",[87,39173,39175],{"className":30357,"code":39174,"language":30359,"meta":18,"style":18},"# 权重初始化,保证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",[93,39176,39177,39182,39187,39199,39204,39212,39217,39230,39235,39249,39254,39263,39268,39277,39282,39287,39300,39305,39319],{"__ignoreMap":18},[96,39178,39179],{"class":98,"line":99},[96,39180,39181],{"class":165},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[96,39183,39184],{"class":98,"line":19},[96,39185,39186],{"class":165},"# 循环遍历模型\n",[96,39188,39189,39191,39193,39195,39197],{"class":98,"line":1162},[96,39190,3008],{"class":102},[96,39192,38847],{"class":106},[96,39194,26022],{"class":102},[96,39196,38852],{"class":155},[96,39198,38855],{"class":106},[96,39200,39201],{"class":98,"line":1177},[96,39202,39203],{"class":165},"    # print(m)\n",[96,39205,39206,39208,39210],{"class":98,"line":1183},[96,39207,3084],{"class":102},[96,39209,38867],{"class":155},[96,39211,38870],{"class":106},[96,39213,39214],{"class":98,"line":1197},[96,39215,39216],{"class":165},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[96,39218,39219,39222,39224,39226,39228],{"class":98,"line":1203},[96,39220,39221],{"class":106},"        nn.init.kaiming_normal_(m.weight,",[96,39223,38883],{"class":5200},[96,39225,152],{"class":102},[96,39227,38888],{"class":211},[96,39229,113],{"class":106},[96,39231,39232],{"class":98,"line":1294},[96,39233,39234],{"class":165},"        # 判断b参数是否存在\n",[96,39236,39237,39239,39241,39243,39245,39247],{"class":98,"line":1300},[96,39238,2480],{"class":102},[96,39240,38903],{"class":106},[96,39242,38906],{"class":102},[96,39244,38909],{"class":102},[96,39246,38912],{"class":155},[96,39248,3722],{"class":106},[96,39250,39251],{"class":98,"line":1312},[96,39252,39253],{"class":165},"            # 如果参数不存在的化初始化b=0\n",[96,39255,39256,39259,39261],{"class":98,"line":1595},[96,39257,39258],{"class":106},"            nn.init.constant_(m.bias,",[96,39260,298],{"class":155},[96,39262,113],{"class":106},[96,39264,39265],{"class":98,"line":1600},[96,39266,39267],{"class":165},"    # 全连接层初始化\n",[96,39269,39270,39273,39275],{"class":98,"line":1606},[96,39271,39272],{"class":102},"    elif",[96,39274,38867],{"class":155},[96,39276,38943],{"class":106},[96,39278,39279],{"class":98,"line":1611},[96,39280,39281],{"class":165},"        # 这个初始化方法是利用的是正太分布的方式\n",[96,39283,39284],{"class":98,"line":1625},[96,39285,39286],{"class":165},"        # 均值为0，方差为0.01\n",[96,39288,39289,39292,39294,39296,39298],{"class":98,"line":1630},[96,39290,39291],{"class":106},"        nn.init.normal_(m.weight,",[96,39293,298],{"class":155},[96,39295,485],{"class":106},[96,39297,38965],{"class":155},[96,39299,113],{"class":106},[96,39301,39302],{"class":98,"line":1636},[96,39303,39304],{"class":165},"        # 初始化b参数\n",[96,39306,39307,39309,39311,39313,39315,39317],{"class":98,"line":1657},[96,39308,2480],{"class":102},[96,39310,38903],{"class":106},[96,39312,38906],{"class":102},[96,39314,38909],{"class":102},[96,39316,38912],{"class":155},[96,39318,3722],{"class":106},[96,39320,39321,39323,39325],{"class":98,"line":1662},[96,39322,39258],{"class":106},[96,39324,298],{"class":155},[96,39326,113],{"class":106},[14,39328,39329],{},"②尽可能地增加批次",[14,39331,39332],{},"训练完整代码：",[87,39334,39335],{"className":30357,"code":37878,"language":30359,"meta":18,"style":18},[93,39336,39337,39343,39353,39363,39373,39377,39393,39401,39419,39423,39427,39437,39473,39477,39513,39517,39545,39549,39553,39563,39599,39603,39639,39643,39671,39675,39679,39689,39725,39729,39765,39769,39805,39809,39837,39841,39845,39855,39891,39895,39931,39935,39971,39975,40003,40007,40011,40021,40057,40061,40097,40101,40137,40141,40169,40173,40177,40187,40191,40195,40199,40219,40223,40235,40239,40251,40255,40259,40263,40267,40279,40283,40291,40295,40307,40311,40325,40329,40337,40341,40349,40353,40357,40369,40373,40387,40395,40399,40403,40411,40421,40431,40441,40451,40461,40471,40477,40481,40485,40497,40517,40523,40531],{"__ignoreMap":18},[96,39338,39339,39341],{"class":98,"line":99},[96,39340,30371],{"class":102},[96,39342,30374],{"class":106},[96,39344,39345,39347,39349,39351],{"class":98,"line":19},[96,39346,30716],{"class":102},[96,39348,37893],{"class":106},[96,39350,30371],{"class":102},[96,39352,37898],{"class":106},[96,39354,39355,39357,39359,39361],{"class":98,"line":1162},[96,39356,30716],{"class":102},[96,39358,30719],{"class":106},[96,39360,30371],{"class":102},[96,39362,30724],{"class":106},[96,39364,39365,39367,39369,39371],{"class":98,"line":1177},[96,39366,30716],{"class":102},[96,39368,30736],{"class":106},[96,39370,30371],{"class":102},[96,39372,30741],{"class":106},[96,39374,39375],{"class":98,"line":1183},[96,39376,2383],{"emptyLinePlaceholder":23},[96,39378,39379,39381,39383,39385,39387,39389,39391],{"class":98,"line":1197},[96,39380,14678],{"class":102},[96,39382,37929],{"class":1946},[96,39384,107],{"class":106},[96,39386,30757],{"class":1946},[96,39388,665],{"class":106},[96,39390,30762],{"class":1946},[96,39392,30765],{"class":106},[96,39394,39395,39397,39399],{"class":98,"line":1203},[96,39396,30780],{"class":102},[96,39398,30783],{"class":155},[96,39400,30786],{"class":106},[96,39402,39403,39405,39407,39409,39411,39413,39415,39417],{"class":98,"line":1294},[96,39404,30796],{"class":155},[96,39406,107],{"class":106},[96,39408,37956],{"class":155},[96,39410,12419],{"class":106},[96,39412,30802],{"class":155},[96,39414,30805],{"class":106},[96,39416,30808],{"class":155},[96,39418,1959],{"class":106},[96,39420,39421],{"class":98,"line":1300},[96,39422,37971],{"class":165},[96,39424,39425],{"class":98,"line":1312},[96,39426,37976],{"class":165},[96,39428,39429,39431,39433,39435],{"class":98,"line":1595},[96,39430,30824],{"class":155},[96,39432,37983],{"class":106},[96,39434,152],{"class":102},[96,39436,37988],{"class":106},[96,39438,39439,39441,39443,39445,39447,39449,39451,39453,39455,39457,39459,39461,39463,39465,39467,39469,39471],{"class":98,"line":1600},[96,39440,37993],{"class":106},[96,39442,30835],{"class":5200},[96,39444,152],{"class":102},[96,39446,324],{"class":155},[96,39448,485],{"class":106},[96,39450,30844],{"class":5200},[96,39452,152],{"class":102},[96,39454,310],{"class":155},[96,39456,485],{"class":106},[96,39458,30853],{"class":5200},[96,39460,152],{"class":102},[96,39462,178],{"class":155},[96,39464,485],{"class":106},[96,39466,30862],{"class":5200},[96,39468,152],{"class":102},[96,39470,324],{"class":155},[96,39472,38026],{"class":106},[96,39474,39475],{"class":98,"line":1606},[96,39476,38031],{"class":106},[96,39478,39479,39481,39483,39485,39487,39489,39491,39493,39495,39497,39499,39501,39503,39505,39507,39509,39511],{"class":98,"line":1611},[96,39480,37993],{"class":106},[96,39482,30835],{"class":5200},[96,39484,152],{"class":102},[96,39486,310],{"class":155},[96,39488,485],{"class":106},[96,39490,30844],{"class":5200},[96,39492,152],{"class":102},[96,39494,310],{"class":155},[96,39496,485],{"class":106},[96,39498,30853],{"class":5200},[96,39500,152],{"class":102},[96,39502,178],{"class":155},[96,39504,485],{"class":106},[96,39506,30862],{"class":5200},[96,39508,152],{"class":102},[96,39510,324],{"class":155},[96,39512,38026],{"class":106},[96,39514,39515],{"class":98,"line":1625},[96,39516,38031],{"class":106},[96,39518,39519,39521,39523,39525,39527,39529,39531,39533,39535,39537,39539,39541,39543],{"class":98,"line":1630},[96,39520,38076],{"class":106},[96,39522,30853],{"class":5200},[96,39524,152],{"class":102},[96,39526,184],{"class":155},[96,39528,485],{"class":106},[96,39530,30908],{"class":5200},[96,39532,152],{"class":102},[96,39534,184],{"class":155},[96,39536,485],{"class":106},[96,39538,30862],{"class":5200},[96,39540,152],{"class":102},[96,39542,298],{"class":155},[96,39544,113],{"class":106},[96,39546,39547],{"class":98,"line":1636},[96,39548,38105],{"class":106},[96,39550,39551],{"class":98,"line":1657},[96,39552,38110],{"class":165},[96,39554,39555,39557,39559,39561],{"class":98,"line":1662},[96,39556,30824],{"class":155},[96,39558,38117],{"class":106},[96,39560,152],{"class":102},[96,39562,37988],{"class":106},[96,39564,39565,39567,39569,39571,39573,39575,39577,39579,39581,39583,39585,39587,39589,39591,39593,39595,39597],{"class":98,"line":1676},[96,39566,37993],{"class":106},[96,39568,30835],{"class":5200},[96,39570,152],{"class":102},[96,39572,310],{"class":155},[96,39574,485],{"class":106},[96,39576,30844],{"class":5200},[96,39578,152],{"class":102},[96,39580,32049],{"class":155},[96,39582,485],{"class":106},[96,39584,30853],{"class":5200},[96,39586,152],{"class":102},[96,39588,178],{"class":155},[96,39590,485],{"class":106},[96,39592,30862],{"class":5200},[96,39594,152],{"class":102},[96,39596,324],{"class":155},[96,39598,38026],{"class":106},[96,39600,39601],{"class":98,"line":1681},[96,39602,38031],{"class":106},[96,39604,39605,39607,39609,39611,39613,39615,39617,39619,39621,39623,39625,39627,39629,39631,39633,39635,39637],{"class":98,"line":1710},[96,39606,37993],{"class":106},[96,39608,30835],{"class":5200},[96,39610,152],{"class":102},[96,39612,32049],{"class":155},[96,39614,485],{"class":106},[96,39616,30844],{"class":5200},[96,39618,152],{"class":102},[96,39620,32049],{"class":155},[96,39622,485],{"class":106},[96,39624,30853],{"class":5200},[96,39626,152],{"class":102},[96,39628,178],{"class":155},[96,39630,485],{"class":106},[96,39632,30862],{"class":5200},[96,39634,152],{"class":102},[96,39636,324],{"class":155},[96,39638,38026],{"class":106},[96,39640,39641],{"class":98,"line":1715},[96,39642,38031],{"class":106},[96,39644,39645,39647,39649,39651,39653,39655,39657,39659,39661,39663,39665,39667,39669],{"class":98,"line":1732},[96,39646,38076],{"class":106},[96,39648,30853],{"class":5200},[96,39650,152],{"class":102},[96,39652,184],{"class":155},[96,39654,485],{"class":106},[96,39656,30908],{"class":5200},[96,39658,152],{"class":102},[96,39660,184],{"class":155},[96,39662,485],{"class":106},[96,39664,30862],{"class":5200},[96,39666,152],{"class":102},[96,39668,298],{"class":155},[96,39670,113],{"class":106},[96,39672,39673],{"class":98,"line":1737},[96,39674,38105],{"class":106},[96,39676,39677],{"class":98,"line":1742},[96,39678,38238],{"class":165},[96,39680,39681,39683,39685,39687],{"class":98,"line":1747},[96,39682,30824],{"class":155},[96,39684,38245],{"class":106},[96,39686,152],{"class":102},[96,39688,37988],{"class":106},[96,39690,39691,39693,39695,39697,39699,39701,39703,39705,39707,39709,39711,39713,39715,39717,39719,39721,39723],{"class":98,"line":1761},[96,39692,37993],{"class":106},[96,39694,30835],{"class":5200},[96,39696,152],{"class":102},[96,39698,32049],{"class":155},[96,39700,485],{"class":106},[96,39702,30844],{"class":5200},[96,39704,152],{"class":102},[96,39706,34849],{"class":155},[96,39708,485],{"class":106},[96,39710,30853],{"class":5200},[96,39712,152],{"class":102},[96,39714,178],{"class":155},[96,39716,485],{"class":106},[96,39718,30862],{"class":5200},[96,39720,152],{"class":102},[96,39722,324],{"class":155},[96,39724,38026],{"class":106},[96,39726,39727],{"class":98,"line":1766},[96,39728,38031],{"class":106},[96,39730,39731,39733,39735,39737,39739,39741,39743,39745,39747,39749,39751,39753,39755,39757,39759,39761,39763],{"class":98,"line":2560},[96,39732,37993],{"class":106},[96,39734,30835],{"class":5200},[96,39736,152],{"class":102},[96,39738,34849],{"class":155},[96,39740,485],{"class":106},[96,39742,30844],{"class":5200},[96,39744,152],{"class":102},[96,39746,34849],{"class":155},[96,39748,485],{"class":106},[96,39750,30853],{"class":5200},[96,39752,152],{"class":102},[96,39754,178],{"class":155},[96,39756,485],{"class":106},[96,39758,30862],{"class":5200},[96,39760,152],{"class":102},[96,39762,324],{"class":155},[96,39764,38026],{"class":106},[96,39766,39767],{"class":98,"line":2574},[96,39768,38031],{"class":106},[96,39770,39771,39773,39775,39777,39779,39781,39783,39785,39787,39789,39791,39793,39795,39797,39799,39801,39803],{"class":98,"line":2582},[96,39772,37993],{"class":106},[96,39774,30835],{"class":5200},[96,39776,152],{"class":102},[96,39778,34849],{"class":155},[96,39780,485],{"class":106},[96,39782,30844],{"class":5200},[96,39784,152],{"class":102},[96,39786,34849],{"class":155},[96,39788,485],{"class":106},[96,39790,30853],{"class":5200},[96,39792,152],{"class":102},[96,39794,178],{"class":155},[96,39796,485],{"class":106},[96,39798,30862],{"class":5200},[96,39800,152],{"class":102},[96,39802,324],{"class":155},[96,39804,38026],{"class":106},[96,39806,39807],{"class":98,"line":2587},[96,39808,38031],{"class":106},[96,39810,39811,39813,39815,39817,39819,39821,39823,39825,39827,39829,39831,39833,39835],{"class":98,"line":2593},[96,39812,38076],{"class":106},[96,39814,30853],{"class":5200},[96,39816,152],{"class":102},[96,39818,184],{"class":155},[96,39820,485],{"class":106},[96,39822,30908],{"class":5200},[96,39824,152],{"class":102},[96,39826,184],{"class":155},[96,39828,485],{"class":106},[96,39830,30862],{"class":5200},[96,39832,152],{"class":102},[96,39834,298],{"class":155},[96,39836,113],{"class":106},[96,39838,39839],{"class":98,"line":2599},[96,39840,38105],{"class":106},[96,39842,39843],{"class":98,"line":2604},[96,39844,38406],{"class":165},[96,39846,39847,39849,39851,39853],{"class":98,"line":7932},[96,39848,30824],{"class":155},[96,39850,38413],{"class":106},[96,39852,152],{"class":102},[96,39854,37988],{"class":106},[96,39856,39857,39859,39861,39863,39865,39867,39869,39871,39873,39875,39877,39879,39881,39883,39885,39887,39889],{"class":98,"line":7956},[96,39858,37993],{"class":106},[96,39860,30835],{"class":5200},[96,39862,152],{"class":102},[96,39864,34849],{"class":155},[96,39866,485],{"class":106},[96,39868,30844],{"class":5200},[96,39870,152],{"class":102},[96,39872,38436],{"class":155},[96,39874,485],{"class":106},[96,39876,30853],{"class":5200},[96,39878,152],{"class":102},[96,39880,178],{"class":155},[96,39882,485],{"class":106},[96,39884,30862],{"class":5200},[96,39886,152],{"class":102},[96,39888,324],{"class":155},[96,39890,38026],{"class":106},[96,39892,39893],{"class":98,"line":7961},[96,39894,38031],{"class":106},[96,39896,39897,39899,39901,39903,39905,39907,39909,39911,39913,39915,39917,39919,39921,39923,39925,39927,39929],{"class":98,"line":7967},[96,39898,37993],{"class":106},[96,39900,30835],{"class":5200},[96,39902,152],{"class":102},[96,39904,38436],{"class":155},[96,39906,485],{"class":106},[96,39908,30844],{"class":5200},[96,39910,152],{"class":102},[96,39912,38436],{"class":155},[96,39914,485],{"class":106},[96,39916,30853],{"class":5200},[96,39918,152],{"class":102},[96,39920,178],{"class":155},[96,39922,485],{"class":106},[96,39924,30862],{"class":5200},[96,39926,152],{"class":102},[96,39928,324],{"class":155},[96,39930,38026],{"class":106},[96,39932,39933],{"class":98,"line":7994},[96,39934,38031],{"class":106},[96,39936,39937,39939,39941,39943,39945,39947,39949,39951,39953,39955,39957,39959,39961,39963,39965,39967,39969],{"class":98,"line":7999},[96,39938,37993],{"class":106},[96,39940,30835],{"class":5200},[96,39942,152],{"class":102},[96,39944,38436],{"class":155},[96,39946,485],{"class":106},[96,39948,30844],{"class":5200},[96,39950,152],{"class":102},[96,39952,38436],{"class":155},[96,39954,485],{"class":106},[96,39956,30853],{"class":5200},[96,39958,152],{"class":102},[96,39960,178],{"class":155},[96,39962,485],{"class":106},[96,39964,30862],{"class":5200},[96,39966,152],{"class":102},[96,39968,324],{"class":155},[96,39970,38026],{"class":106},[96,39972,39973],{"class":98,"line":8005},[96,39974,38031],{"class":106},[96,39976,39977,39979,39981,39983,39985,39987,39989,39991,39993,39995,39997,39999,40001],{"class":98,"line":8017},[96,39978,38076],{"class":106},[96,39980,30853],{"class":5200},[96,39982,152],{"class":102},[96,39984,184],{"class":155},[96,39986,485],{"class":106},[96,39988,30908],{"class":5200},[96,39990,152],{"class":102},[96,39992,184],{"class":155},[96,39994,485],{"class":106},[96,39996,30862],{"class":5200},[96,39998,152],{"class":102},[96,40000,298],{"class":155},[96,40002,113],{"class":106},[96,40004,40005],{"class":98,"line":8029},[96,40006,38105],{"class":106},[96,40008,40009],{"class":98,"line":8041},[96,40010,38575],{"class":165},[96,40012,40013,40015,40017,40019],{"class":98,"line":9700},[96,40014,30824],{"class":155},[96,40016,38582],{"class":106},[96,40018,152],{"class":102},[96,40020,37988],{"class":106},[96,40022,40023,40025,40027,40029,40031,40033,40035,40037,40039,40041,40043,40045,40047,40049,40051,40053,40055],{"class":98,"line":9725},[96,40024,37993],{"class":106},[96,40026,30835],{"class":5200},[96,40028,152],{"class":102},[96,40030,38436],{"class":155},[96,40032,485],{"class":106},[96,40034,30844],{"class":5200},[96,40036,152],{"class":102},[96,40038,38436],{"class":155},[96,40040,485],{"class":106},[96,40042,30853],{"class":5200},[96,40044,152],{"class":102},[96,40046,178],{"class":155},[96,40048,485],{"class":106},[96,40050,30862],{"class":5200},[96,40052,152],{"class":102},[96,40054,324],{"class":155},[96,40056,38026],{"class":106},[96,40058,40059],{"class":98,"line":9748},[96,40060,38031],{"class":106},[96,40062,40063,40065,40067,40069,40071,40073,40075,40077,40079,40081,40083,40085,40087,40089,40091,40093,40095],{"class":98,"line":9772},[96,40064,37993],{"class":106},[96,40066,30835],{"class":5200},[96,40068,152],{"class":102},[96,40070,38436],{"class":155},[96,40072,485],{"class":106},[96,40074,30844],{"class":5200},[96,40076,152],{"class":102},[96,40078,38436],{"class":155},[96,40080,485],{"class":106},[96,40082,30853],{"class":5200},[96,40084,152],{"class":102},[96,40086,178],{"class":155},[96,40088,485],{"class":106},[96,40090,30862],{"class":5200},[96,40092,152],{"class":102},[96,40094,324],{"class":155},[96,40096,38026],{"class":106},[96,40098,40099],{"class":98,"line":9777},[96,40100,38031],{"class":106},[96,40102,40103,40105,40107,40109,40111,40113,40115,40117,40119,40121,40123,40125,40127,40129,40131,40133,40135],{"class":98,"line":9782},[96,40104,37993],{"class":106},[96,40106,30835],{"class":5200},[96,40108,152],{"class":102},[96,40110,38436],{"class":155},[96,40112,485],{"class":106},[96,40114,30844],{"class":5200},[96,40116,152],{"class":102},[96,40118,38436],{"class":155},[96,40120,485],{"class":106},[96,40122,30853],{"class":5200},[96,40124,152],{"class":102},[96,40126,178],{"class":155},[96,40128,485],{"class":106},[96,40130,30862],{"class":5200},[96,40132,152],{"class":102},[96,40134,324],{"class":155},[96,40136,38026],{"class":106},[96,40138,40139],{"class":98,"line":9787},[96,40140,38031],{"class":106},[96,40142,40143,40145,40147,40149,40151,40153,40155,40157,40159,40161,40163,40165,40167],{"class":98,"line":9796},[96,40144,38076],{"class":106},[96,40146,30853],{"class":5200},[96,40148,152],{"class":102},[96,40150,184],{"class":155},[96,40152,485],{"class":106},[96,40154,30908],{"class":5200},[96,40156,152],{"class":102},[96,40158,184],{"class":155},[96,40160,485],{"class":106},[96,40162,30862],{"class":5200},[96,40164,152],{"class":102},[96,40166,298],{"class":155},[96,40168,113],{"class":106},[96,40170,40171],{"class":98,"line":9801},[96,40172,38105],{"class":106},[96,40174,40175],{"class":98,"line":9807},[96,40176,38743],{"class":165},[96,40178,40179,40181,40183,40185],{"class":98,"line":9828},[96,40180,30824],{"class":155},[96,40182,38750],{"class":106},[96,40184,152],{"class":102},[96,40186,37988],{"class":106},[96,40188,40189],{"class":98,"line":9834},[96,40190,38759],{"class":165},[96,40192,40193],{"class":98,"line":9848},[96,40194,38764],{"class":165},[96,40196,40197],{"class":98,"line":9854},[96,40198,38769],{"class":106},[96,40200,40201,40203,40205,40207,40209,40211,40213,40215,40217],{"class":98,"line":9881},[96,40202,38774],{"class":106},[96,40204,476],{"class":155},[96,40206,562],{"class":102},[96,40208,476],{"class":155},[96,40210,562],{"class":102},[96,40212,38436],{"class":155},[96,40214,485],{"class":106},[96,40216,34849],{"class":155},[96,40218,38026],{"class":106},[96,40220,40221],{"class":98,"line":9890},[96,40222,38031],{"class":106},[96,40224,40225,40227,40229,40231,40233],{"class":98,"line":9896},[96,40226,38774],{"class":106},[96,40228,34849],{"class":155},[96,40230,485],{"class":106},[96,40232,32049],{"class":155},[96,40234,38026],{"class":106},[96,40236,40237],{"class":98,"line":9904},[96,40238,38031],{"class":106},[96,40240,40241,40243,40245,40247,40249],{"class":98,"line":9909},[96,40242,38774],{"class":106},[96,40244,32049],{"class":155},[96,40246,485],{"class":106},[96,40248,553],{"class":155},[96,40250,113],{"class":106},[96,40252,40253],{"class":98,"line":16588},[96,40254,38105],{"class":106},[96,40256,40257],{"class":98,"line":16594},[96,40258,2383],{"emptyLinePlaceholder":23},[96,40260,40261],{"class":98,"line":16617},[96,40262,38835],{"class":165},[96,40264,40265],{"class":98,"line":16623},[96,40266,38840],{"class":165},[96,40268,40269,40271,40273,40275,40277],{"class":98,"line":16646},[96,40270,3386],{"class":102},[96,40272,38847],{"class":106},[96,40274,26022],{"class":102},[96,40276,38852],{"class":155},[96,40278,38855],{"class":106},[96,40280,40281],{"class":98,"line":16660},[96,40282,38860],{"class":165},[96,40284,40285,40287,40289],{"class":98,"line":16680},[96,40286,4625],{"class":102},[96,40288,38867],{"class":155},[96,40290,38870],{"class":106},[96,40292,40293],{"class":98,"line":16686},[96,40294,38875],{"class":165},[96,40296,40297,40299,40301,40303,40305],{"class":98,"line":16697},[96,40298,38880],{"class":106},[96,40300,38883],{"class":5200},[96,40302,152],{"class":102},[96,40304,38888],{"class":211},[96,40306,113],{"class":106},[96,40308,40309],{"class":98,"line":16720},[96,40310,38895],{"class":165},[96,40312,40313,40315,40317,40319,40321,40323],{"class":98,"line":16742},[96,40314,38900],{"class":102},[96,40316,38903],{"class":106},[96,40318,38906],{"class":102},[96,40320,38909],{"class":102},[96,40322,38912],{"class":155},[96,40324,3722],{"class":106},[96,40326,40327],{"class":98,"line":16747},[96,40328,38919],{"class":165},[96,40330,40331,40333,40335],{"class":98,"line":16753},[96,40332,38924],{"class":106},[96,40334,298],{"class":155},[96,40336,113],{"class":106},[96,40338,40339],{"class":98,"line":16767},[96,40340,38933],{"class":165},[96,40342,40343,40345,40347],{"class":98,"line":16780},[96,40344,38938],{"class":102},[96,40346,38867],{"class":155},[96,40348,38943],{"class":106},[96,40350,40351],{"class":98,"line":16785},[96,40352,38948],{"class":165},[96,40354,40355],{"class":98,"line":16799},[96,40356,38953],{"class":165},[96,40358,40359,40361,40363,40365,40367],{"class":98,"line":16804},[96,40360,38958],{"class":106},[96,40362,298],{"class":155},[96,40364,485],{"class":106},[96,40366,38965],{"class":155},[96,40368,113],{"class":106},[96,40370,40371],{"class":98,"line":16810},[96,40372,38972],{"class":165},[96,40374,40375,40377,40379,40381,40383,40385],{"class":98,"line":16815},[96,40376,38900],{"class":102},[96,40378,38903],{"class":106},[96,40380,38906],{"class":102},[96,40382,38909],{"class":102},[96,40384,38912],{"class":155},[96,40386,3722],{"class":106},[96,40388,40389,40391,40393],{"class":98,"line":16829},[96,40390,38924],{"class":106},[96,40392,298],{"class":155},[96,40394,113],{"class":106},[96,40396,40397],{"class":98,"line":16834},[96,40398,2383],{"emptyLinePlaceholder":23},[96,40400,40401],{"class":98,"line":16839},[96,40402,35144],{"class":165},[96,40404,40405,40407,40409],{"class":98,"line":16853},[96,40406,30780],{"class":102},[96,40408,31072],{"class":1946},[96,40410,31075],{"class":106},[96,40412,40413,40415,40417,40419],{"class":98,"line":16865},[96,40414,31080],{"class":106},[96,40416,152],{"class":102},[96,40418,30802],{"class":155},[96,40420,39021],{"class":106},[96,40422,40423,40425,40427,40429],{"class":98,"line":16870},[96,40424,31080],{"class":106},[96,40426,152],{"class":102},[96,40428,30802],{"class":155},[96,40430,39032],{"class":106},[96,40432,40433,40435,40437,40439],{"class":98,"line":16883},[96,40434,31080],{"class":106},[96,40436,152],{"class":102},[96,40438,30802],{"class":155},[96,40440,39043],{"class":106},[96,40442,40443,40445,40447,40449],{"class":98,"line":16888},[96,40444,31080],{"class":106},[96,40446,152],{"class":102},[96,40448,30802],{"class":155},[96,40450,39054],{"class":106},[96,40452,40453,40455,40457,40459],{"class":98,"line":16893},[96,40454,31080],{"class":106},[96,40456,152],{"class":102},[96,40458,30802],{"class":155},[96,40460,39065],{"class":106},[96,40462,40463,40465,40467,40469],{"class":98,"line":16898},[96,40464,31080],{"class":106},[96,40466,152],{"class":102},[96,40468,30802],{"class":155},[96,40470,39076],{"class":106},[96,40472,40473,40475],{"class":98,"line":16911},[96,40474,14736],{"class":102},[96,40476,31188],{"class":106},[96,40478,40479],{"class":98,"line":16916},[96,40480,2383],{"emptyLinePlaceholder":23},[96,40482,40483],{"class":98,"line":32612},[96,40484,39091],{"class":165},[96,40486,40487,40489,40491,40493,40495],{"class":98,"line":32618},[96,40488,1514],{"class":102},[96,40490,31199],{"class":155},[96,40492,2932],{"class":102},[96,40494,39102],{"class":211},[96,40496,3722],{"class":106},[96,40498,40499,40501,40503,40505,40507,40509,40511,40513,40515],{"class":98,"line":32624},[96,40500,31216],{"class":106},[96,40502,152],{"class":102},[96,40504,30430],{"class":106},[96,40506,31223],{"class":211},[96,40508,1687],{"class":102},[96,40510,31228],{"class":106},[96,40512,1684],{"class":102},[96,40514,30455],{"class":211},[96,40516,113],{"class":106},[96,40518,40519,40521],{"class":98,"line":32630},[96,40520,31278],{"class":155},[96,40522,30464],{"class":106},[96,40524,40525,40527,40529],{"class":98,"line":32636},[96,40526,31268],{"class":106},[96,40528,152],{"class":102},[96,40530,39139],{"class":106},[96,40532,40533,40535,40537,40539,40541,40543,40545,40547],{"class":98,"line":32647},[96,40534,31278],{"class":155},[96,40536,31281],{"class":106},[96,40538,324],{"class":155},[96,40540,485],{"class":106},[96,40542,31480],{"class":155},[96,40544,485],{"class":106},[96,40546,31480],{"class":155},[96,40548,31294],{"class":106},[50,40550,40551],{"start":1162},[53,40552,40553],{},"测试代码",[87,40555,40557],{"className":30357,"code":40556,"language":30359,"meta":18,"style":18},"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",[93,40558,40559,40565,40575,40585,40589,40599,40610,40614,40618,40622,40630,40646,40656,40672,40682,40696,40700,40710,40720,40730,40736,40740,40744,40752,40756,40772,40780,40784,40788,40796,40804,40808,40812,40816,40820,40826,40830,40840,40848,40856,40860,40864,40868,40876,40880,40896,40900,40904,40908,40920,40924,40936,40940,40944,40956,40960,40970,40974,40978,40990,40994,41003,41007,41011,41019,41023,41031,41035,41039,41043,41047,41051,41067,41075,41079,41083,41131,41137,41141,41151,41159,41167,41171,41175,41179,41183,41191,41195,41211,41215,41223,41231],{"__ignoreMap":18},[96,40560,40561,40563],{"class":98,"line":99},[96,40562,30371],{"class":102},[96,40564,30374],{"class":106},[96,40566,40567,40569,40571,40573],{"class":98,"line":19},[96,40568,30371],{"class":102},[96,40570,31394],{"class":106},[96,40572,31362],{"class":102},[96,40574,31399],{"class":106},[96,40576,40577,40579,40581,40583],{"class":98,"line":1162},[96,40578,30716],{"class":102},[96,40580,31377],{"class":106},[96,40582,30371],{"class":102},[96,40584,31382],{"class":106},[96,40586,40587],{"class":98,"line":1177},[96,40588,33901],{"class":165},[96,40590,40591,40593,40595,40597],{"class":98,"line":1183},[96,40592,30716],{"class":102},[96,40594,31347],{"class":106},[96,40596,30371],{"class":102},[96,40598,31352],{"class":106},[96,40600,40601,40603,40605,40607],{"class":98,"line":1197},[96,40602,30716],{"class":102},[96,40604,31893],{"class":106},[96,40606,30371],{"class":102},[96,40608,40609],{"class":155}," VGG16\n",[96,40611,40612],{"class":98,"line":1203},[96,40613,2383],{"emptyLinePlaceholder":23},[96,40615,40616],{"class":98,"line":1294},[96,40617,2383],{"emptyLinePlaceholder":23},[96,40619,40620],{"class":98,"line":1300},[96,40621,33930],{"class":165},[96,40623,40624,40626,40628],{"class":98,"line":1312},[96,40625,31926],{"class":102},[96,40627,33937],{"class":1946},[96,40629,31932],{"class":106},[96,40631,40632,40634,40636,40638,40640,40642,40644],{"class":98,"line":1595},[96,40633,33944],{"class":106},[96,40635,152],{"class":102},[96,40637,31434],{"class":106},[96,40639,31437],{"class":5200},[96,40641,152],{"class":102},[96,40643,31442],{"class":211},[96,40645,31445],{"class":106},[96,40647,40648,40650,40652,40654],{"class":98,"line":1600},[96,40649,33961],{"class":5200},[96,40651,152],{"class":102},[96,40653,33966],{"class":155},[96,40655,31445],{"class":106},[96,40657,40658,40660,40662,40664,40666,40668,40670],{"class":98,"line":1606},[96,40659,33973],{"class":5200},[96,40661,152],{"class":102},[96,40663,31472],{"class":106},[96,40665,31475],{"class":5200},[96,40667,152],{"class":102},[96,40669,31480],{"class":155},[96,40671,31483],{"class":106},[96,40673,40674,40676,40678,40680],{"class":98,"line":1611},[96,40675,33990],{"class":5200},[96,40677,152],{"class":102},[96,40679,31455],{"class":155},[96,40681,113],{"class":106},[96,40683,40684,40686,40688,40690,40692,40694],{"class":98,"line":1625},[96,40685,34001],{"class":106},[96,40687,152],{"class":102},[96,40689,31513],{"class":106},[96,40691,31516],{"class":5200},[96,40693,152],{"class":102},[96,40695,34012],{"class":106},[96,40697,40698],{"class":98,"line":1630},[96,40699,34017],{"class":165},[96,40701,40702,40704,40706,40708],{"class":98,"line":1636},[96,40703,34022],{"class":5200},[96,40705,152],{"class":102},[96,40707,324],{"class":155},[96,40709,31445],{"class":106},[96,40711,40712,40714,40716,40718],{"class":98,"line":1657},[96,40713,34033],{"class":5200},[96,40715,152],{"class":102},[96,40717,31455],{"class":155},[96,40719,31445],{"class":106},[96,40721,40722,40724,40726,40728],{"class":98,"line":1662},[96,40723,34044],{"class":5200},[96,40725,152],{"class":102},[96,40727,298],{"class":155},[96,40729,113],{"class":106},[96,40731,40732,40734],{"class":98,"line":1676},[96,40733,4073],{"class":102},[96,40735,34057],{"class":106},[96,40737,40738],{"class":98,"line":1681},[96,40739,2383],{"emptyLinePlaceholder":23},[96,40741,40742],{"class":98,"line":1710},[96,40743,34066],{"class":165},[96,40745,40746,40748,40750],{"class":98,"line":1715},[96,40747,31926],{"class":102},[96,40749,34073],{"class":1946},[96,40751,34076],{"class":106},[96,40753,40754],{"class":98,"line":1732},[96,40755,34081],{"class":165},[96,40757,40758,40760,40762,40764,40766,40768,40770],{"class":98,"line":1737},[96,40759,31216],{"class":106},[96,40761,152],{"class":102},[96,40763,31223],{"class":211},[96,40765,1687],{"class":102},[96,40767,31228],{"class":106},[96,40769,1684],{"class":102},[96,40771,34098],{"class":211},[96,40773,40774,40776,40778],{"class":98,"line":1742},[96,40775,31268],{"class":106},[96,40777,152],{"class":102},[96,40779,32268],{"class":106},[96,40781,40782],{"class":98,"line":1747},[96,40783,2383],{"emptyLinePlaceholder":23},[96,40785,40786],{"class":98,"line":1761},[96,40787,34115],{"class":165},[96,40789,40790,40792,40794],{"class":98,"line":1766},[96,40791,34120],{"class":106},[96,40793,152],{"class":102},[96,40795,32321],{"class":155},[96,40797,40798,40800,40802],{"class":98,"line":2560},[96,40799,34129],{"class":106},[96,40801,152],{"class":102},[96,40803,3068],{"class":155},[96,40805,40806],{"class":98,"line":2574},[96,40807,2383],{"emptyLinePlaceholder":23},[96,40809,40810],{"class":98,"line":2582},[96,40811,34142],{"class":165},[96,40813,40814],{"class":98,"line":2587},[96,40815,34147],{"class":165},[96,40817,40818],{"class":98,"line":2593},[96,40819,34152],{"class":165},[96,40821,40822,40824],{"class":98,"line":2599},[96,40823,34157],{"class":102},[96,40825,32863],{"class":106},[96,40827,40828],{"class":98,"line":2604},[96,40829,34164],{"class":165},[96,40831,40832,40834,40836,40838],{"class":98,"line":7932},[96,40833,3386],{"class":102},[96,40835,34171],{"class":106},[96,40837,26022],{"class":102},[96,40839,34176],{"class":106},[96,40841,40842,40844,40846],{"class":98,"line":7956},[96,40843,34181],{"class":106},[96,40845,152],{"class":102},[96,40847,34186],{"class":106},[96,40849,40850,40852,40854],{"class":98,"line":7961},[96,40851,34191],{"class":106},[96,40853,152],{"class":102},[96,40855,34196],{"class":106},[96,40857,40858],{"class":98,"line":7967},[96,40859,34201],{"class":165},[96,40861,40862],{"class":98,"line":7994},[96,40863,32854],{"class":106},[96,40865,40866],{"class":98,"line":7999},[96,40867,34210],{"class":165},[96,40869,40870,40872,40874],{"class":98,"line":8005},[96,40871,32639],{"class":106},[96,40873,152],{"class":102},[96,40875,34219],{"class":106},[96,40877,40878],{"class":98,"line":8017},[96,40879,34224],{"class":165},[96,40881,40882,40884,40886,40888,40890,40892,40894],{"class":98,"line":8029},[96,40883,32656],{"class":106},[96,40885,152],{"class":102},[96,40887,32661],{"class":106},[96,40889,32664],{"class":5200},[96,40891,152],{"class":102},[96,40893,324],{"class":155},[96,40895,113],{"class":106},[96,40897,40898],{"class":98,"line":8041},[96,40899,34245],{"class":165},[96,40901,40902],{"class":98,"line":9700},[96,40903,34250],{"class":165},[96,40905,40906],{"class":98,"line":9725},[96,40907,34255],{"class":165},[96,40909,40910,40912,40914,40916,40918],{"class":98,"line":9748},[96,40911,34260],{"class":106},[96,40913,9461],{"class":102},[96,40915,32766],{"class":106},[96,40917,2932],{"class":102},[96,40919,34269],{"class":106},[96,40921,40922],{"class":98,"line":9772},[96,40923,34274],{"class":165},[96,40925,40926,40928,40930,40932,40934],{"class":98,"line":9777},[96,40927,34279],{"class":106},[96,40929,9461],{"class":102},[96,40931,34284],{"class":106},[96,40933,298],{"class":155},[96,40935,113],{"class":106},[96,40937,40938],{"class":98,"line":9782},[96,40939,2383],{"emptyLinePlaceholder":23},[96,40941,40942],{"class":98,"line":9787},[96,40943,34297],{"class":165},[96,40945,40946,40948,40950,40952,40954],{"class":98,"line":9796},[96,40947,34302],{"class":106},[96,40949,152],{"class":102},[96,40951,34307],{"class":106},[96,40953,691],{"class":102},[96,40955,34312],{"class":106},[96,40957,40958],{"class":98,"line":9801},[96,40959,34317],{"class":165},[96,40961,40962,40964,40966,40968],{"class":98,"line":9807},[96,40963,32430],{"class":155},[96,40965,107],{"class":106},[96,40967,34326],{"class":211},[96,40969,34329],{"class":106},[96,40971,40972],{"class":98,"line":9828},[96,40973,2383],{"emptyLinePlaceholder":23},[96,40975,40976],{"class":98,"line":9834},[96,40977,34338],{"class":165},[96,40979,40980,40982,40984,40986,40988],{"class":98,"line":9848},[96,40981,1514],{"class":102},[96,40983,31199],{"class":155},[96,40985,2932],{"class":102},[96,40987,31204],{"class":211},[96,40989,3722],{"class":106},[96,40991,40992],{"class":98,"line":9854},[96,40993,34355],{"class":165},[96,40995,40996,40998,41000],{"class":98,"line":9881},[96,40997,31268],{"class":106},[96,40999,152],{"class":102},[96,41001,41002],{"class":106},"VGG16()\n",[96,41004,41005],{"class":98,"line":9890},[96,41006,34368],{"class":165},[96,41008,41009],{"class":98,"line":9896},[96,41010,34373],{"class":165},[96,41012,41013,41015,41017],{"class":98,"line":9904},[96,41014,34378],{"class":106},[96,41016,34381],{"class":211},[96,41018,30476],{"class":106},[96,41020,41021],{"class":98,"line":9909},[96,41022,34388],{"class":165},[96,41024,41025,41027,41029],{"class":98,"line":16588},[96,41026,34001],{"class":106},[96,41028,152],{"class":102},[96,41030,34397],{"class":106},[96,41032,41033],{"class":98,"line":16594},[96,41034,34402],{"class":165},[96,41036,41037],{"class":98,"line":16617},[96,41038,34407],{"class":106},[96,41040,41041],{"class":98,"line":16623},[96,41042,2383],{"emptyLinePlaceholder":23},[96,41044,41045],{"class":98,"line":16646},[96,41046,34416],{"class":165},[96,41048,41049],{"class":98,"line":16660},[96,41050,34421],{"class":165},[96,41052,41053,41055,41057,41059,41061,41063,41065],{"class":98,"line":16680},[96,41054,31216],{"class":106},[96,41056,152],{"class":102},[96,41058,31223],{"class":211},[96,41060,1687],{"class":102},[96,41062,31228],{"class":106},[96,41064,1684],{"class":102},[96,41066,34098],{"class":211},[96,41068,41069,41071,41073],{"class":98,"line":16686},[96,41070,31268],{"class":106},[96,41072,152],{"class":102},[96,41074,32268],{"class":106},[96,41076,41077],{"class":98,"line":16697},[96,41078,34450],{"class":165},[96,41080,41081],{"class":98,"line":16720},[96,41082,34455],{"class":165},[96,41084,41085,41087,41089,41091,41093,41095,41097,41099,41101,41103,41105,41107,41109,41111,41113,41115,41117,41119,41121,41123,41125,41127,41129],{"class":98,"line":16742},[96,41086,34460],{"class":106},[96,41088,152],{"class":102},[96,41090,997],{"class":106},[96,41092,34467],{"class":211},[96,41094,485],{"class":106},[96,41096,34472],{"class":211},[96,41098,485],{"class":106},[96,41100,34477],{"class":211},[96,41102,485],{"class":106},[96,41104,34482],{"class":211},[96,41106,485],{"class":106},[96,41108,34487],{"class":211},[96,41110,485],{"class":106},[96,41112,34492],{"class":211},[96,41114,485],{"class":106},[96,41116,34497],{"class":211},[96,41118,485],{"class":106},[96,41120,34502],{"class":211},[96,41122,485],{"class":106},[96,41124,34507],{"class":211},[96,41126,485],{"class":106},[96,41128,34512],{"class":211},[96,41130,33225],{"class":106},[96,41132,41133,41135],{"class":98,"line":16747},[96,41134,34157],{"class":102},[96,41136,32863],{"class":106},[96,41138,41139],{"class":98,"line":16753},[96,41140,34525],{"class":165},[96,41142,41143,41145,41147,41149],{"class":98,"line":16767},[96,41144,3386],{"class":102},[96,41146,34532],{"class":106},[96,41148,26022],{"class":102},[96,41150,34176],{"class":106},[96,41152,41153,41155,41157],{"class":98,"line":16780},[96,41154,32589],{"class":106},[96,41156,152],{"class":102},[96,41158,32594],{"class":106},[96,41160,41161,41163,41165],{"class":98,"line":16785},[96,41162,32604],{"class":106},[96,41164,152],{"class":102},[96,41166,32609],{"class":106},[96,41168,41169],{"class":98,"line":16799},[96,41170,2383],{"emptyLinePlaceholder":23},[96,41172,41173],{"class":98,"line":16804},[96,41174,34561],{"class":165},[96,41176,41177],{"class":98,"line":16810},[96,41178,32854],{"class":106},[96,41180,41181],{"class":98,"line":16815},[96,41182,34570],{"class":165},[96,41184,41185,41187,41189],{"class":98,"line":16829},[96,41186,32639],{"class":106},[96,41188,152],{"class":102},[96,41190,32644],{"class":106},[96,41192,41193],{"class":98,"line":16834},[96,41194,34583],{"class":165},[96,41196,41197,41199,41201,41203,41205,41207,41209],{"class":98,"line":16839},[96,41198,32656],{"class":106},[96,41200,152],{"class":102},[96,41202,32661],{"class":106},[96,41204,32664],{"class":5200},[96,41206,152],{"class":102},[96,41208,324],{"class":155},[96,41210,113],{"class":106},[96,41212,41213],{"class":98,"line":16853},[96,41214,34604],{"class":165},[96,41216,41217,41219,41221],{"class":98,"line":16865},[96,41218,34609],{"class":106},[96,41220,152],{"class":102},[96,41222,34614],{"class":106},[96,41224,41225,41227,41229],{"class":98,"line":16870},[96,41226,34619],{"class":106},[96,41228,152],{"class":102},[96,41230,34624],{"class":106},[96,41232,41233,41235,41237,41239,41241,41243,41245,41247],{"class":98,"line":16883},[96,41234,34629],{"class":155},[96,41236,107],{"class":106},[96,41238,34634],{"class":211},[96,41240,34637],{"class":106},[96,41242,34640],{"class":211},[96,41244,485],{"class":106},[96,41246,34645],{"class":211},[96,41248,34648],{"class":106},[67,41250,41252],{"id":41251},"_23googlenet","2.3.GoogLeNet",[21982,41254,41256],{"id":41255},"_231原理","2.3.1.原理",[50,41258,41259],{},[53,41260,41261],{},"网络结构",[14,41263,41264],{},[1445,41265],{"alt":18,"src":41266},"\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,41268,41269],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[14,41271,41272],{},[1445,41273],{"alt":18,"src":41274},"\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,41276,41277],{},[1445,41278],{"alt":18,"src":41279},"\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,41281,41282],{},[1445,41283],{"alt":18,"src":41284},"\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",[50,41286,41287],{"start":19},[53,41288,41289],{},"1x1卷积的优点",[14,41291,41292],{},[1445,41293],{"alt":18,"src":41294},"\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",[50,41296,41297],{"start":1162},[53,41298,41299],{},"全局平均池化层优点",[14,41301,41302],{},[1445,41303],{"alt":18,"src":41304},"\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,41306,41307],{},[1445,41308],{"alt":18,"src":41309},"\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",[50,41311,41312],{"start":1177},[53,41313,41314],{},"参数详细描述",[14,41316,41317],{},[1445,41318],{"alt":18,"src":41319},"\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,41321,41322],{},[1445,41323],{"alt":18,"src":41324},"\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,41326,41327],{},[1445,41328],{"alt":18,"src":41329},"\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,41331,41332],{},[1445,41333],{"alt":18,"src":41334},"\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,41336,41337],{},[1445,41338],{"alt":18,"src":41339},"\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,41341,41342],{},[1445,41343],{"alt":18,"src":41344},"\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,41346,41347],{},[1445,41348],{"alt":18,"src":41349},"\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,41351,41352],{},[1445,41353],{"alt":18,"src":41354},"\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,41356,41357],{},[1445,41358],{"alt":18,"src":41359},"\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,41361,41362],{},[1445,41363],{"alt":18,"src":41364},"\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,41366,41367],{},[1445,41368],{"alt":18,"src":41369},"\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,41371,41372],{},[1445,41373],{"alt":18,"src":41374},"\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,41376,41377],{},[1445,41378],{"alt":18,"src":41379},"\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,41381,41382],{},[1445,41383],{"alt":18,"src":41384},"\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,41386,41387],{},[1445,41388],{"alt":18,"src":41389},"\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,41391,41392],{},[1445,41393],{"alt":18,"src":41394},"\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,41396,41397],{},[1445,41398],{"alt":18,"src":41399},"\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,41401,41402],{},[1445,41403],{"alt":18,"src":41404},"\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,41406,41407],{},[1445,41408],{"alt":18,"src":41409},"\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,41411,41412],{},[1445,41413],{"alt":18,"src":41414},"\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,41416,41417],{},[1445,41418],{"alt":18,"src":41419},"\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",[21982,41421,41423],{"id":41422},"_232代码实现","2.3.2.代码实现",[50,41425,41426],{},[53,41427,30690],{},[14,41429,41430],{},"根据原理一步一步搭建即可",[87,41432,41434],{"className":30357,"code":41433,"language":30359,"meta":18,"style":18},"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",[93,41435,41436,41442,41452,41462,41466,41483,41492,41507,41517,41522,41555,41560,41597,41644,41649,41685,41732,41737,41742,41777,41809,41813,41821,41837,41861,41886,41907,41912,41927,41931,41935,41940,41957,41962,41971,41986,41997,42041,42045,42073,42077,42088,42116,42120,42157,42161,42189,42193,42204,42240,42272,42300,42304,42315,42349,42381,42413,42446,42480,42508,42512,42523,42556,42588,42602,42606,42619,42623,42628,42640,42648,42670,42675,42680,42685,42690,42695,42700,42714,42722,42731,42744,42759,42768,42772,42780,42791,42802,42813,42824,42835,42841,42845,42850,42862,42882,42891],{"__ignoreMap":18},[96,41437,41438,41440],{"class":98,"line":99},[96,41439,30371],{"class":102},[96,41441,30374],{"class":106},[96,41443,41444,41446,41448,41450],{"class":98,"line":19},[96,41445,30716],{"class":102},[96,41447,30719],{"class":106},[96,41449,30371],{"class":102},[96,41451,30724],{"class":106},[96,41453,41454,41456,41458,41460],{"class":98,"line":1162},[96,41455,30716],{"class":102},[96,41457,30736],{"class":106},[96,41459,30371],{"class":102},[96,41461,30741],{"class":106},[96,41463,41464],{"class":98,"line":1177},[96,41465,2383],{"emptyLinePlaceholder":23},[96,41467,41468,41470,41473,41475,41477,41479,41481],{"class":98,"line":1183},[96,41469,14678],{"class":102},[96,41471,41472],{"class":1946}," Inception",[96,41474,107],{"class":106},[96,41476,30757],{"class":1946},[96,41478,665],{"class":106},[96,41480,30762],{"class":1946},[96,41482,30765],{"class":106},[96,41484,41485,41487,41489],{"class":98,"line":1197},[96,41486,30780],{"class":102},[96,41488,30783],{"class":155},[96,41490,41491],{"class":106},"(self,in_channels,c1,c2,c3,c4):\n",[96,41493,41494,41496,41499,41501,41503,41505],{"class":98,"line":1203},[96,41495,30796],{"class":155},[96,41497,41498],{"class":106},"(Inception,",[96,41500,30802],{"class":155},[96,41502,30805],{"class":106},[96,41504,30808],{"class":155},[96,41506,1959],{"class":106},[96,41508,41509,41511,41513,41515],{"class":98,"line":1294},[96,41510,30824],{"class":155},[96,41512,34750],{"class":106},[96,41514,152],{"class":102},[96,41516,34755],{"class":106},[96,41518,41519],{"class":98,"line":1300},[96,41520,41521],{"class":165},"        # 路线1：定义1*1卷积\n",[96,41523,41524,41526,41529,41531,41533,41535,41537,41540,41542,41544,41547,41549,41551,41553],{"class":98,"line":1312},[96,41525,30824],{"class":155},[96,41527,41528],{"class":106},".p1_1",[96,41530,152],{"class":102},[96,41532,30832],{"class":106},[96,41534,30835],{"class":5200},[96,41536,152],{"class":102},[96,41538,41539],{"class":106},"in_channels,",[96,41541,30844],{"class":5200},[96,41543,152],{"class":102},[96,41545,41546],{"class":106},"c1,",[96,41548,30853],{"class":5200},[96,41550,152],{"class":102},[96,41552,324],{"class":155},[96,41554,113],{"class":106},[96,41556,41557],{"class":98,"line":1595},[96,41558,41559],{"class":165},"        # 路线2：定义1*1卷积和3*3\n",[96,41561,41562,41564,41567,41569,41571,41573,41575,41577,41579,41581,41584,41586,41589,41591,41593,41595],{"class":98,"line":1600},[96,41563,30824],{"class":155},[96,41565,41566],{"class":106},".p2_1",[96,41568,152],{"class":102},[96,41570,30832],{"class":106},[96,41572,30835],{"class":5200},[96,41574,152],{"class":102},[96,41576,41539],{"class":106},[96,41578,30844],{"class":5200},[96,41580,152],{"class":102},[96,41582,41583],{"class":106},"c2[",[96,41585,298],{"class":155},[96,41587,41588],{"class":106},"],",[96,41590,30853],{"class":5200},[96,41592,152],{"class":102},[96,41594,324],{"class":155},[96,41596,113],{"class":106},[96,41598,41599,41601,41604,41606,41608,41610,41612,41614,41616,41618,41620,41622,41624,41626,41628,41630,41632,41634,41636,41638,41640,41642],{"class":98,"line":1606},[96,41600,30824],{"class":155},[96,41602,41603],{"class":106},".p2_2",[96,41605,152],{"class":102},[96,41607,30832],{"class":106},[96,41609,30835],{"class":5200},[96,41611,152],{"class":102},[96,41613,41583],{"class":106},[96,41615,298],{"class":155},[96,41617,41588],{"class":106},[96,41619,30844],{"class":5200},[96,41621,152],{"class":102},[96,41623,41583],{"class":106},[96,41625,324],{"class":155},[96,41627,41588],{"class":106},[96,41629,30853],{"class":5200},[96,41631,152],{"class":102},[96,41633,178],{"class":155},[96,41635,485],{"class":106},[96,41637,30862],{"class":5200},[96,41639,152],{"class":102},[96,41641,324],{"class":155},[96,41643,113],{"class":106},[96,41645,41646],{"class":98,"line":1611},[96,41647,41648],{"class":165},"        # 路线3：定义1*1卷积和5*5\n",[96,41650,41651,41653,41656,41658,41660,41662,41664,41666,41668,41670,41673,41675,41677,41679,41681,41683],{"class":98,"line":1625},[96,41652,30824],{"class":155},[96,41654,41655],{"class":106},".p3_1",[96,41657,152],{"class":102},[96,41659,30832],{"class":106},[96,41661,30835],{"class":5200},[96,41663,152],{"class":102},[96,41665,41539],{"class":106},[96,41667,30844],{"class":5200},[96,41669,152],{"class":102},[96,41671,41672],{"class":106},"c3[",[96,41674,298],{"class":155},[96,41676,41588],{"class":106},[96,41678,30853],{"class":5200},[96,41680,152],{"class":102},[96,41682,324],{"class":155},[96,41684,113],{"class":106},[96,41686,41687,41689,41692,41694,41696,41698,41700,41702,41704,41706,41708,41710,41712,41714,41716,41718,41720,41722,41724,41726,41728,41730],{"class":98,"line":1630},[96,41688,30824],{"class":155},[96,41690,41691],{"class":106},".p3_2",[96,41693,152],{"class":102},[96,41695,30832],{"class":106},[96,41697,30835],{"class":5200},[96,41699,152],{"class":102},[96,41701,41672],{"class":106},[96,41703,298],{"class":155},[96,41705,41588],{"class":106},[96,41707,30844],{"class":5200},[96,41709,152],{"class":102},[96,41711,41672],{"class":106},[96,41713,324],{"class":155},[96,41715,41588],{"class":106},[96,41717,30853],{"class":5200},[96,41719,152],{"class":102},[96,41721,426],{"class":155},[96,41723,485],{"class":106},[96,41725,30862],{"class":5200},[96,41727,152],{"class":102},[96,41729,184],{"class":155},[96,41731,113],{"class":106},[96,41733,41734],{"class":98,"line":1636},[96,41735,41736],{"class":165},"        # 路线4：定义3*3最大池化和1*1卷积\n",[96,41738,41739],{"class":98,"line":1657},[96,41740,41741],{"class":165},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[96,41743,41744,41746,41749,41751,41753,41755,41757,41759,41761,41763,41765,41767,41769,41771,41773,41775],{"class":98,"line":1662},[96,41745,30824],{"class":155},[96,41747,41748],{"class":106},".p4_1",[96,41750,152],{"class":102},[96,41752,34808],{"class":106},[96,41754,30853],{"class":5200},[96,41756,152],{"class":102},[96,41758,178],{"class":155},[96,41760,485],{"class":106},[96,41762,30908],{"class":5200},[96,41764,152],{"class":102},[96,41766,324],{"class":155},[96,41768,485],{"class":106},[96,41770,30862],{"class":5200},[96,41772,152],{"class":102},[96,41774,324],{"class":155},[96,41776,113],{"class":106},[96,41778,41779,41781,41784,41786,41788,41790,41792,41794,41796,41798,41801,41803,41805,41807],{"class":98,"line":1676},[96,41780,30824],{"class":155},[96,41782,41783],{"class":106},".p4_2",[96,41785,152],{"class":102},[96,41787,30832],{"class":106},[96,41789,30835],{"class":5200},[96,41791,152],{"class":102},[96,41793,41539],{"class":106},[96,41795,30844],{"class":5200},[96,41797,152],{"class":102},[96,41799,41800],{"class":106},"c4,",[96,41802,30853],{"class":5200},[96,41804,152],{"class":102},[96,41806,324],{"class":155},[96,41808,113],{"class":106},[96,41810,41811],{"class":98,"line":1681},[96,41812,2383],{"emptyLinePlaceholder":23},[96,41814,41815,41817,41819],{"class":98,"line":1710},[96,41816,30780],{"class":102},[96,41818,31072],{"class":1946},[96,41820,31075],{"class":106},[96,41822,41823,41826,41828,41830,41832,41834],{"class":98,"line":1715},[96,41824,41825],{"class":106},"        p1",[96,41827,152],{"class":102},[96,41829,30802],{"class":155},[96,41831,35163],{"class":106},[96,41833,30802],{"class":155},[96,41835,41836],{"class":106},".p1_1(x))\n",[96,41838,41839,41841,41843,41845,41847,41849,41852,41854,41856,41858],{"class":98,"line":1732},[96,41840,7069],{"class":106},[96,41842,152],{"class":102},[96,41844,30802],{"class":155},[96,41846,35163],{"class":106},[96,41848,30802],{"class":155},[96,41850,41851],{"class":106},".p2_2(",[96,41853,30802],{"class":155},[96,41855,35163],{"class":106},[96,41857,30802],{"class":155},[96,41859,41860],{"class":106},".p2_1(x))))\n",[96,41862,41863,41866,41868,41870,41872,41874,41877,41879,41881,41883],{"class":98,"line":1737},[96,41864,41865],{"class":106},"        p3",[96,41867,152],{"class":102},[96,41869,30802],{"class":155},[96,41871,35163],{"class":106},[96,41873,30802],{"class":155},[96,41875,41876],{"class":106},".p3_2(",[96,41878,30802],{"class":155},[96,41880,35163],{"class":106},[96,41882,30802],{"class":155},[96,41884,41885],{"class":106},".p3_1(x))))\n",[96,41887,41888,41891,41893,41895,41897,41899,41902,41904],{"class":98,"line":1742},[96,41889,41890],{"class":106},"        p4",[96,41892,152],{"class":102},[96,41894,30802],{"class":155},[96,41896,35163],{"class":106},[96,41898,30802],{"class":155},[96,41900,41901],{"class":106},".p4_2(",[96,41903,30802],{"class":155},[96,41905,41906],{"class":106},".p4_1(x)))\n",[96,41908,41909],{"class":98,"line":1747},[96,41910,41911],{"class":165},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[96,41913,41914,41916,41919,41921,41923,41925],{"class":98,"line":1761},[96,41915,14736],{"class":102},[96,41917,41918],{"class":106}," torch.cat((p1,p2,p3,p4),",[96,41920,32664],{"class":5200},[96,41922,152],{"class":102},[96,41924,324],{"class":155},[96,41926,113],{"class":106},[96,41928,41929],{"class":98,"line":1766},[96,41930,2383],{"emptyLinePlaceholder":23},[96,41932,41933],{"class":98,"line":2560},[96,41934,2383],{"emptyLinePlaceholder":23},[96,41936,41937],{"class":98,"line":2574},[96,41938,41939],{"class":165},"# 搭建GoogLeNet网络\n",[96,41941,41942,41944,41947,41949,41951,41953,41955],{"class":98,"line":2582},[96,41943,14678],{"class":102},[96,41945,41946],{"class":1946}," GoogLeNet",[96,41948,107],{"class":106},[96,41950,30757],{"class":1946},[96,41952,665],{"class":106},[96,41954,30762],{"class":1946},[96,41956,30765],{"class":106},[96,41958,41959],{"class":98,"line":2587},[96,41960,41961],{"class":165},"    # 必须把Inception导入到里边\n",[96,41963,41964,41966,41968],{"class":98,"line":2593},[96,41965,30780],{"class":102},[96,41967,30783],{"class":155},[96,41969,41970],{"class":106},"(self,Inception):\n",[96,41972,41973,41975,41978,41980,41982,41984],{"class":98,"line":2599},[96,41974,30796],{"class":155},[96,41976,41977],{"class":106},"(GoogLeNet,",[96,41979,30802],{"class":155},[96,41981,30805],{"class":106},[96,41983,30808],{"class":155},[96,41985,1959],{"class":106},[96,41987,41988,41990,41993,41995],{"class":98,"line":2604},[96,41989,30824],{"class":155},[96,41991,41992],{"class":106},".b1",[96,41994,152],{"class":102},[96,41996,37988],{"class":106},[96,41998,41999,42001,42003,42005,42007,42009,42011,42013,42015,42017,42019,42021,42023,42025,42027,42029,42031,42033,42035,42037,42039],{"class":98,"line":7932},[96,42000,37993],{"class":106},[96,42002,30835],{"class":5200},[96,42004,152],{"class":102},[96,42006,324],{"class":155},[96,42008,485],{"class":106},[96,42010,30844],{"class":5200},[96,42012,152],{"class":102},[96,42014,310],{"class":155},[96,42016,485],{"class":106},[96,42018,30853],{"class":5200},[96,42020,152],{"class":102},[96,42022,476],{"class":155},[96,42024,485],{"class":106},[96,42026,30908],{"class":5200},[96,42028,152],{"class":102},[96,42030,184],{"class":155},[96,42032,485],{"class":106},[96,42034,30862],{"class":5200},[96,42036,152],{"class":102},[96,42038,178],{"class":155},[96,42040,38026],{"class":106},[96,42042,42043],{"class":98,"line":7956},[96,42044,38031],{"class":106},[96,42046,42047,42049,42051,42053,42055,42057,42059,42061,42063,42065,42067,42069,42071],{"class":98,"line":7961},[96,42048,38076],{"class":106},[96,42050,30853],{"class":5200},[96,42052,152],{"class":102},[96,42054,178],{"class":155},[96,42056,485],{"class":106},[96,42058,30908],{"class":5200},[96,42060,152],{"class":102},[96,42062,184],{"class":155},[96,42064,485],{"class":106},[96,42066,30862],{"class":5200},[96,42068,152],{"class":102},[96,42070,324],{"class":155},[96,42072,113],{"class":106},[96,42074,42075],{"class":98,"line":7967},[96,42076,38105],{"class":106},[96,42078,42079,42081,42084,42086],{"class":98,"line":7994},[96,42080,30824],{"class":155},[96,42082,42083],{"class":106},".b2",[96,42085,152],{"class":102},[96,42087,37988],{"class":106},[96,42089,42090,42092,42094,42096,42098,42100,42102,42104,42106,42108,42110,42112,42114],{"class":98,"line":7999},[96,42091,37993],{"class":106},[96,42093,30835],{"class":5200},[96,42095,152],{"class":102},[96,42097,310],{"class":155},[96,42099,485],{"class":106},[96,42101,30844],{"class":5200},[96,42103,152],{"class":102},[96,42105,310],{"class":155},[96,42107,485],{"class":106},[96,42109,30853],{"class":5200},[96,42111,152],{"class":102},[96,42113,324],{"class":155},[96,42115,38026],{"class":106},[96,42117,42118],{"class":98,"line":8005},[96,42119,38031],{"class":106},[96,42121,42122,42124,42126,42128,42130,42132,42134,42136,42139,42141,42143,42145,42147,42149,42151,42153,42155],{"class":98,"line":8017},[96,42123,37993],{"class":106},[96,42125,30835],{"class":5200},[96,42127,152],{"class":102},[96,42129,310],{"class":155},[96,42131,485],{"class":106},[96,42133,30844],{"class":5200},[96,42135,152],{"class":102},[96,42137,42138],{"class":155},"192",[96,42140,485],{"class":106},[96,42142,30853],{"class":5200},[96,42144,152],{"class":102},[96,42146,178],{"class":155},[96,42148,485],{"class":106},[96,42150,30862],{"class":5200},[96,42152,152],{"class":102},[96,42154,324],{"class":155},[96,42156,38026],{"class":106},[96,42158,42159],{"class":98,"line":8029},[96,42160,38031],{"class":106},[96,42162,42163,42165,42167,42169,42171,42173,42175,42177,42179,42181,42183,42185,42187],{"class":98,"line":8041},[96,42164,38076],{"class":106},[96,42166,30853],{"class":5200},[96,42168,152],{"class":102},[96,42170,178],{"class":155},[96,42172,485],{"class":106},[96,42174,30908],{"class":5200},[96,42176,152],{"class":102},[96,42178,184],{"class":155},[96,42180,485],{"class":106},[96,42182,30862],{"class":5200},[96,42184,152],{"class":102},[96,42186,324],{"class":155},[96,42188,113],{"class":106},[96,42190,42191],{"class":98,"line":9700},[96,42192,38105],{"class":106},[96,42194,42195,42197,42200,42202],{"class":98,"line":9725},[96,42196,30824],{"class":155},[96,42198,42199],{"class":106},".b3",[96,42201,152],{"class":102},[96,42203,37988],{"class":106},[96,42205,42206,42209,42211,42213,42215,42218,42220,42222,42224,42227,42229,42231,42233,42236,42238],{"class":98,"line":9748},[96,42207,42208],{"class":106},"            Inception(",[96,42210,42138],{"class":155},[96,42212,485],{"class":106},[96,42214,310],{"class":155},[96,42216,42217],{"class":106},",(",[96,42219,316],{"class":155},[96,42221,485],{"class":106},[96,42223,32049],{"class":155},[96,42225,42226],{"class":106},"),(",[96,42228,708],{"class":155},[96,42230,485],{"class":106},[96,42232,304],{"class":155},[96,42234,42235],{"class":106},"),",[96,42237,304],{"class":155},[96,42239,38026],{"class":106},[96,42241,42242,42244,42246,42248,42250,42252,42254,42256,42258,42260,42262,42264,42266,42268,42270],{"class":98,"line":9772},[96,42243,42208],{"class":106},[96,42245,34849],{"class":155},[96,42247,485],{"class":106},[96,42249,32049],{"class":155},[96,42251,42217],{"class":106},[96,42253,32049],{"class":155},[96,42255,485],{"class":106},[96,42257,42138],{"class":155},[96,42259,42226],{"class":106},[96,42261,304],{"class":155},[96,42263,485],{"class":106},[96,42265,316],{"class":155},[96,42267,42235],{"class":106},[96,42269,310],{"class":155},[96,42271,38026],{"class":106},[96,42273,42274,42276,42278,42280,42282,42284,42286,42288,42290,42292,42294,42296,42298],{"class":98,"line":9777},[96,42275,38076],{"class":106},[96,42277,30853],{"class":5200},[96,42279,152],{"class":102},[96,42281,178],{"class":155},[96,42283,485],{"class":106},[96,42285,30908],{"class":5200},[96,42287,152],{"class":102},[96,42289,184],{"class":155},[96,42291,485],{"class":106},[96,42293,30862],{"class":5200},[96,42295,152],{"class":102},[96,42297,324],{"class":155},[96,42299,113],{"class":106},[96,42301,42302],{"class":98,"line":9782},[96,42303,38105],{"class":106},[96,42305,42306,42308,42311,42313],{"class":98,"line":9787},[96,42307,30824],{"class":155},[96,42309,42310],{"class":106},".b4",[96,42312,152],{"class":102},[96,42314,37988],{"class":106},[96,42316,42317,42319,42322,42324,42326,42328,42330,42332,42335,42337,42339,42341,42343,42345,42347],{"class":98,"line":9796},[96,42318,42208],{"class":106},[96,42320,42321],{"class":155},"480",[96,42323,485],{"class":106},[96,42325,42138],{"class":155},[96,42327,42217],{"class":106},[96,42329,316],{"class":155},[96,42331,485],{"class":106},[96,42333,42334],{"class":155},"208",[96,42336,42226],{"class":106},[96,42338,708],{"class":155},[96,42340,485],{"class":106},[96,42342,714],{"class":155},[96,42344,42235],{"class":106},[96,42346,310],{"class":155},[96,42348,38026],{"class":106},[96,42350,42351,42353,42355,42357,42359,42361,42363,42365,42367,42369,42371,42373,42375,42377,42379],{"class":98,"line":9801},[96,42352,42208],{"class":106},[96,42354,38436],{"class":155},[96,42356,485],{"class":106},[96,42358,21032],{"class":155},[96,42360,42217],{"class":106},[96,42362,725],{"class":155},[96,42364,485],{"class":106},[96,42366,31480],{"class":155},[96,42368,42226],{"class":106},[96,42370,907],{"class":155},[96,42372,485],{"class":106},[96,42374,310],{"class":155},[96,42376,42235],{"class":106},[96,42378,310],{"class":155},[96,42380,38026],{"class":106},[96,42382,42383,42385,42387,42389,42391,42393,42395,42397,42399,42401,42403,42405,42407,42409,42411],{"class":98,"line":9807},[96,42384,42208],{"class":106},[96,42386,38436],{"class":155},[96,42388,485],{"class":106},[96,42390,32049],{"class":155},[96,42392,42217],{"class":106},[96,42394,32049],{"class":155},[96,42396,485],{"class":106},[96,42398,34849],{"class":155},[96,42400,42226],{"class":106},[96,42402,907],{"class":155},[96,42404,485],{"class":106},[96,42406,310],{"class":155},[96,42408,42235],{"class":106},[96,42410,310],{"class":155},[96,42412,38026],{"class":106},[96,42414,42415,42417,42419,42421,42423,42425,42427,42429,42432,42434,42436,42438,42440,42442,42444],{"class":98,"line":9828},[96,42416,42208],{"class":106},[96,42418,38436],{"class":155},[96,42420,485],{"class":106},[96,42422,725],{"class":155},[96,42424,42217],{"class":106},[96,42426,32049],{"class":155},[96,42428,485],{"class":106},[96,42430,42431],{"class":155},"288",[96,42433,42226],{"class":106},[96,42435,304],{"class":155},[96,42437,485],{"class":106},[96,42439,310],{"class":155},[96,42441,42235],{"class":106},[96,42443,310],{"class":155},[96,42445,38026],{"class":106},[96,42447,42448,42450,42453,42455,42457,42459,42461,42463,42466,42468,42470,42472,42474,42476,42478],{"class":98,"line":9834},[96,42449,42208],{"class":106},[96,42451,42452],{"class":155},"528",[96,42454,485],{"class":106},[96,42456,34849],{"class":155},[96,42458,42217],{"class":106},[96,42460,21032],{"class":155},[96,42462,485],{"class":106},[96,42464,42465],{"class":155},"320",[96,42467,42226],{"class":106},[96,42469,304],{"class":155},[96,42471,485],{"class":106},[96,42473,32049],{"class":155},[96,42475,42235],{"class":106},[96,42477,32049],{"class":155},[96,42479,38026],{"class":106},[96,42481,42482,42484,42486,42488,42490,42492,42494,42496,42498,42500,42502,42504,42506],{"class":98,"line":9848},[96,42483,38076],{"class":106},[96,42485,30853],{"class":5200},[96,42487,152],{"class":102},[96,42489,178],{"class":155},[96,42491,485],{"class":106},[96,42493,30908],{"class":5200},[96,42495,152],{"class":102},[96,42497,184],{"class":155},[96,42499,485],{"class":106},[96,42501,30862],{"class":5200},[96,42503,152],{"class":102},[96,42505,324],{"class":155},[96,42507,113],{"class":106},[96,42509,42510],{"class":98,"line":9854},[96,42511,38105],{"class":106},[96,42513,42514,42516,42519,42521],{"class":98,"line":9881},[96,42515,30824],{"class":155},[96,42517,42518],{"class":106},".b5",[96,42520,152],{"class":102},[96,42522,37988],{"class":106},[96,42524,42525,42527,42530,42532,42534,42536,42538,42540,42542,42544,42546,42548,42550,42552,42554],{"class":98,"line":9890},[96,42526,42208],{"class":106},[96,42528,42529],{"class":155},"832",[96,42531,485],{"class":106},[96,42533,34849],{"class":155},[96,42535,42217],{"class":106},[96,42537,21032],{"class":155},[96,42539,485],{"class":106},[96,42541,42465],{"class":155},[96,42543,42226],{"class":106},[96,42545,304],{"class":155},[96,42547,485],{"class":106},[96,42549,32049],{"class":155},[96,42551,42235],{"class":106},[96,42553,32049],{"class":155},[96,42555,38026],{"class":106},[96,42557,42558,42560,42562,42564,42566,42568,42570,42572,42574,42576,42578,42580,42582,42584,42586],{"class":98,"line":9896},[96,42559,42208],{"class":106},[96,42561,42529],{"class":155},[96,42563,485],{"class":106},[96,42565,34919],{"class":155},[96,42567,42217],{"class":106},[96,42569,42138],{"class":155},[96,42571,485],{"class":106},[96,42573,34919],{"class":155},[96,42575,42226],{"class":106},[96,42577,714],{"class":155},[96,42579,485],{"class":106},[96,42581,32049],{"class":155},[96,42583,42235],{"class":106},[96,42585,32049],{"class":155},[96,42587,38026],{"class":106},[96,42589,42590,42593,42595,42597,42599],{"class":98,"line":9904},[96,42591,42592],{"class":106},"            nn.AdaptiveAvgPool2d((",[96,42594,324],{"class":155},[96,42596,485],{"class":106},[96,42598,324],{"class":155},[96,42600,42601],{"class":106},")),\n",[96,42603,42604],{"class":98,"line":9909},[96,42605,38769],{"class":106},[96,42607,42608,42610,42613,42615,42617],{"class":98,"line":16588},[96,42609,38774],{"class":106},[96,42611,42612],{"class":155},"1024",[96,42614,485],{"class":106},[96,42616,553],{"class":155},[96,42618,113],{"class":106},[96,42620,42621],{"class":98,"line":16594},[96,42622,38105],{"class":106},[96,42624,42625],{"class":98,"line":16617},[96,42626,42627],{"class":165},"        # 对模型参数初始化\n",[96,42629,42630,42632,42634,42636,42638],{"class":98,"line":16623},[96,42631,3386],{"class":102},[96,42633,38847],{"class":106},[96,42635,26022],{"class":102},[96,42637,38852],{"class":155},[96,42639,38855],{"class":106},[96,42641,42642,42644,42646],{"class":98,"line":16646},[96,42643,4625],{"class":102},[96,42645,38867],{"class":155},[96,42647,38870],{"class":106},[96,42649,42650,42652,42655,42657,42660,42662,42664,42666,42668],{"class":98,"line":16660},[96,42651,38880],{"class":106},[96,42653,42654],{"class":5200},"mode",[96,42656,152],{"class":102},[96,42658,42659],{"class":211},"'fan_out'",[96,42661,485],{"class":106},[96,42663,38883],{"class":5200},[96,42665,152],{"class":102},[96,42667,38888],{"class":211},[96,42669,113],{"class":106},[96,42671,42672],{"class":98,"line":16680},[96,42673,42674],{"class":165},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[96,42676,42677],{"class":98,"line":16686},[96,42678,42679],{"class":165},"                # ② mode = 'fan_out'决定使用的fan值：\n",[96,42681,42682],{"class":98,"line":16697},[96,42683,42684],{"class":165},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[96,42686,42687],{"class":98,"line":16720},[96,42688,42689],{"class":165},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[96,42691,42692],{"class":98,"line":16742},[96,42693,42694],{"class":165},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[96,42696,42697],{"class":98,"line":16747},[96,42698,42699],{"class":165},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[96,42701,42702,42704,42706,42708,42710,42712],{"class":98,"line":16753},[96,42703,38900],{"class":102},[96,42705,38903],{"class":106},[96,42707,38906],{"class":102},[96,42709,38909],{"class":102},[96,42711,38912],{"class":155},[96,42713,3722],{"class":106},[96,42715,42716,42718,42720],{"class":98,"line":16767},[96,42717,38924],{"class":106},[96,42719,298],{"class":155},[96,42721,113],{"class":106},[96,42723,42724,42727,42729],{"class":98,"line":16780},[96,42725,42726],{"class":102},"                elif",[96,42728,38867],{"class":155},[96,42730,38943],{"class":106},[96,42732,42733,42736,42738,42740,42742],{"class":98,"line":16785},[96,42734,42735],{"class":106},"                    nn.init.normal_(m.weight,",[96,42737,298],{"class":155},[96,42739,485],{"class":106},[96,42741,38965],{"class":155},[96,42743,113],{"class":106},[96,42745,42746,42749,42751,42753,42755,42757],{"class":98,"line":16799},[96,42747,42748],{"class":102},"                    if",[96,42750,38903],{"class":106},[96,42752,38906],{"class":102},[96,42754,38909],{"class":102},[96,42756,38912],{"class":155},[96,42758,3722],{"class":106},[96,42760,42761,42764,42766],{"class":98,"line":16804},[96,42762,42763],{"class":106},"                        nn.init.constant_(m.bias,",[96,42765,298],{"class":155},[96,42767,113],{"class":106},[96,42769,42770],{"class":98,"line":16810},[96,42771,35144],{"class":165},[96,42773,42774,42776,42778],{"class":98,"line":16815},[96,42775,30780],{"class":102},[96,42777,31072],{"class":1946},[96,42779,31075],{"class":106},[96,42781,42782,42784,42786,42788],{"class":98,"line":16829},[96,42783,31080],{"class":106},[96,42785,152],{"class":102},[96,42787,30802],{"class":155},[96,42789,42790],{"class":106},".b1(x)\n",[96,42792,42793,42795,42797,42799],{"class":98,"line":16834},[96,42794,31080],{"class":106},[96,42796,152],{"class":102},[96,42798,30802],{"class":155},[96,42800,42801],{"class":106},".b2(x)\n",[96,42803,42804,42806,42808,42810],{"class":98,"line":16839},[96,42805,31080],{"class":106},[96,42807,152],{"class":102},[96,42809,30802],{"class":155},[96,42811,42812],{"class":106},".b3(x)\n",[96,42814,42815,42817,42819,42821],{"class":98,"line":16853},[96,42816,31080],{"class":106},[96,42818,152],{"class":102},[96,42820,30802],{"class":155},[96,42822,42823],{"class":106},".b4(x)\n",[96,42825,42826,42828,42830,42832],{"class":98,"line":16865},[96,42827,31080],{"class":106},[96,42829,152],{"class":102},[96,42831,30802],{"class":155},[96,42833,42834],{"class":106},".b5(x)\n",[96,42836,42837,42839],{"class":98,"line":16870},[96,42838,14736],{"class":102},[96,42840,31188],{"class":106},[96,42842,42843],{"class":98,"line":16883},[96,42844,2383],{"emptyLinePlaceholder":23},[96,42846,42847],{"class":98,"line":16888},[96,42848,42849],{"class":165},"# 模型展示\n",[96,42851,42852,42854,42856,42858,42860],{"class":98,"line":16893},[96,42853,1514],{"class":102},[96,42855,31199],{"class":155},[96,42857,2932],{"class":102},[96,42859,31204],{"class":211},[96,42861,3722],{"class":106},[96,42863,42864,42866,42868,42870,42872,42874,42876,42878,42880],{"class":98,"line":16898},[96,42865,31216],{"class":106},[96,42867,152],{"class":102},[96,42869,30430],{"class":106},[96,42871,31223],{"class":211},[96,42873,1687],{"class":102},[96,42875,31228],{"class":106},[96,42877,1684],{"class":102},[96,42879,30455],{"class":211},[96,42881,113],{"class":106},[96,42883,42884,42886,42888],{"class":98,"line":16911},[96,42885,31268],{"class":106},[96,42887,152],{"class":102},[96,42889,42890],{"class":106},"GoogLeNet(Inception).to(device)\n",[96,42892,42893,42895,42897,42899,42901,42903,42905,42907],{"class":98,"line":16916},[96,42894,31278],{"class":155},[96,42896,31281],{"class":106},[96,42898,324],{"class":155},[96,42900,485],{"class":106},[96,42902,31480],{"class":155},[96,42904,485],{"class":106},[96,42906,31480],{"class":155},[96,42908,31294],{"class":106},[50,42910,42911],{"start":19},[53,42912,39162],{},[87,42914,42916],{"className":30357,"code":42915,"language":30359,"meta":18,"style":18},"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",[93,42917,42918,42924,42930,42940,42946,42956,42966,42976,42986,42996,43000,43011,43021,43025,43029,43033,43041,43053,43063,43079,43089,43121,43135,43145,43155,43159,43169,43183,43193,43203,43213,43219,43223,43227,43231,43235,43239,43247,43267,43271,43275,43279,43283,43287,43303,43307,43311,43319,43323,43327,43335,43339,43343,43347,43355,43359,43363,43367,43371,43379,43383,43391,43395,43403,43407,43415,43419,43427,43431,43435,43443,43447,43451,43455,43467,43491,43505,43509,43513,43517,43525,43529,43537,43541,43549,43553,43561,43565,43573,43577,43585,43589,43601,43605,43613,43617,43625,43629,43633,43637,43641,43649,43653,43669,43673,43681,43685,43689,43693,43697,43701,43705,43709,43725,43729,43741,43745,43757,43761,43773,43777,43785,43789,43797,43801,43805,43809,43815,43819,43827,43831,43847,43851,43859,43863,43879,43891,43895,43907,43911,43915,43923,43927,43931,43939,43943,43951,43955,43963,43967,43971,44013,44055,44059,44063,44079,44083,44099,44103,44107,44115,44119,44123,44135,44173,44177,44181,44189,44193,44207,44217,44223,44229,44235,44241,44245,44249,44255,44259,44263,44271,44275,44293,44297,44301,44305,44321,44325,44329,44333,44337,44341,44361,44381,44385,44389,44393,44401,44409,44413,44429,44449,44469,44473,44477,44485,44493,44497,44501,44505,44517,44521,44531,44539,44556],{"__ignoreMap":18},[96,42919,42920,42922],{"class":98,"line":99},[96,42921,30371],{"class":102},[96,42923,31801],{"class":106},[96,42925,42926,42928],{"class":98,"line":19},[96,42927,30371],{"class":102},[96,42929,31808],{"class":106},[96,42931,42932,42934,42936,42938],{"class":98,"line":1162},[96,42933,30371],{"class":102},[96,42935,31819],{"class":106},[96,42937,31362],{"class":102},[96,42939,31824],{"class":106},[96,42941,42942,42944],{"class":98,"line":1177},[96,42943,30371],{"class":102},[96,42945,30374],{"class":106},[96,42947,42948,42950,42952,42954],{"class":98,"line":1183},[96,42949,30716],{"class":102},[96,42951,31394],{"class":106},[96,42953,30371],{"class":102},[96,42955,31841],{"class":106},[96,42957,42958,42960,42962,42964],{"class":98,"line":1197},[96,42959,30716],{"class":102},[96,42961,31347],{"class":106},[96,42963,30371],{"class":102},[96,42965,31352],{"class":106},[96,42967,42968,42970,42972,42974],{"class":98,"line":1203},[96,42969,30716],{"class":102},[96,42971,31377],{"class":106},[96,42973,30371],{"class":102},[96,42975,31382],{"class":106},[96,42977,42978,42980,42982,42984],{"class":98,"line":1294},[96,42979,30371],{"class":102},[96,42981,31394],{"class":106},[96,42983,31362],{"class":102},[96,42985,31399],{"class":106},[96,42987,42988,42990,42992,42994],{"class":98,"line":1300},[96,42989,30371],{"class":102},[96,42991,31411],{"class":106},[96,42993,31362],{"class":102},[96,42995,31416],{"class":106},[96,42997,42998],{"class":98,"line":1312},[96,42999,31886],{"class":165},[96,43001,43002,43004,43006,43008],{"class":98,"line":1595},[96,43003,30716],{"class":102},[96,43005,31893],{"class":106},[96,43007,30371],{"class":102},[96,43009,43010],{"class":106}," GoogLeNet, Inception\n",[96,43012,43013,43015,43017,43019],{"class":98,"line":1600},[96,43014,30716],{"class":102},[96,43016,30719],{"class":106},[96,43018,30371],{"class":102},[96,43020,30724],{"class":106},[96,43022,43023],{"class":98,"line":1606},[96,43024,2383],{"emptyLinePlaceholder":23},[96,43026,43027],{"class":98,"line":1611},[96,43028,2383],{"emptyLinePlaceholder":23},[96,43030,43031],{"class":98,"line":1625},[96,43032,31921],{"class":165},[96,43034,43035,43037,43039],{"class":98,"line":1630},[96,43036,31926],{"class":102},[96,43038,31929],{"class":1946},[96,43040,31932],{"class":106},[96,43042,43043,43045,43047,43049,43051],{"class":98,"line":1636},[96,43044,31937],{"class":106},[96,43046,152],{"class":102},[96,43048,31434],{"class":106},[96,43050,31442],{"class":211},[96,43052,31445],{"class":106},[96,43054,43055,43057,43059,43061],{"class":98,"line":1657},[96,43056,31950],{"class":5200},[96,43058,152],{"class":102},[96,43060,31455],{"class":155},[96,43062,31445],{"class":106},[96,43064,43065,43067,43069,43071,43073,43075,43077],{"class":98,"line":1662},[96,43066,31961],{"class":5200},[96,43068,152],{"class":102},[96,43070,31472],{"class":106},[96,43072,31475],{"class":5200},[96,43074,152],{"class":102},[96,43076,35428],{"class":155},[96,43078,31483],{"class":106},[96,43080,43081,43083,43085,43087],{"class":98,"line":1676},[96,43082,31978],{"class":5200},[96,43084,152],{"class":102},[96,43086,31455],{"class":155},[96,43088,113],{"class":106},[96,43090,43091,43093,43095,43097,43099,43101,43103,43105,43107,43109,43111,43113,43115,43117,43119],{"class":98,"line":1681},[96,43092,31989],{"class":106},[96,43094,152],{"class":102},[96,43096,31994],{"class":106},[96,43098,31997],{"class":155},[96,43100,107],{"class":106},[96,43102,32002],{"class":155},[96,43104,562],{"class":102},[96,43106,7342],{"class":155},[96,43108,32009],{"class":106},[96,43110,31997],{"class":155},[96,43112,107],{"class":106},[96,43114,32016],{"class":155},[96,43116,562],{"class":102},[96,43118,7342],{"class":155},[96,43120,32023],{"class":106},[96,43122,43123,43125,43127,43129,43131,43133],{"class":98,"line":1710},[96,43124,32028],{"class":106},[96,43126,152],{"class":102},[96,43128,32033],{"class":106},[96,43130,31516],{"class":5200},[96,43132,152],{"class":102},[96,43134,31521],{"class":106},[96,43136,43137,43139,43141,43143],{"class":98,"line":1715},[96,43138,32044],{"class":5200},[96,43140,152],{"class":102},[96,43142,304],{"class":155},[96,43144,31445],{"class":106},[96,43146,43147,43149,43151,43153],{"class":98,"line":1732},[96,43148,32056],{"class":5200},[96,43150,152],{"class":102},[96,43152,31455],{"class":155},[96,43154,31445],{"class":106},[96,43156,43157],{"class":98,"line":1737},[96,43158,32067],{"class":165},[96,43160,43161,43163,43165,43167],{"class":98,"line":1742},[96,43162,32072],{"class":5200},[96,43164,152],{"class":102},[96,43166,502],{"class":155},[96,43168,113],{"class":106},[96,43170,43171,43173,43175,43177,43179,43181],{"class":98,"line":1747},[96,43172,32083],{"class":106},[96,43174,152],{"class":102},[96,43176,31513],{"class":106},[96,43178,31516],{"class":5200},[96,43180,152],{"class":102},[96,43182,32094],{"class":106},[96,43184,43185,43187,43189,43191],{"class":98,"line":1761},[96,43186,32099],{"class":5200},[96,43188,152],{"class":102},[96,43190,304],{"class":155},[96,43192,31445],{"class":106},[96,43194,43195,43197,43199,43201],{"class":98,"line":1766},[96,43196,32110],{"class":5200},[96,43198,152],{"class":102},[96,43200,31455],{"class":155},[96,43202,31445],{"class":106},[96,43204,43205,43207,43209,43211],{"class":98,"line":2560},[96,43206,32121],{"class":5200},[96,43208,152],{"class":102},[96,43210,502],{"class":155},[96,43212,113],{"class":106},[96,43214,43215,43217],{"class":98,"line":2574},[96,43216,4073],{"class":102},[96,43218,32134],{"class":106},[96,43220,43221],{"class":98,"line":2582},[96,43222,2383],{"emptyLinePlaceholder":23},[96,43224,43225],{"class":98,"line":2587},[96,43226,32143],{"class":165},[96,43228,43229],{"class":98,"line":2593},[96,43230,32148],{"class":165},[96,43232,43233],{"class":98,"line":2599},[96,43234,2383],{"emptyLinePlaceholder":23},[96,43236,43237],{"class":98,"line":2604},[96,43238,32157],{"class":165},[96,43240,43241,43243,43245],{"class":98,"line":7932},[96,43242,31926],{"class":102},[96,43244,32164],{"class":1946},[96,43246,32167],{"class":106},[96,43248,43249,43251,43253,43255,43257,43259,43261,43263,43265],{"class":98,"line":7956},[96,43250,31216],{"class":106},[96,43252,152],{"class":102},[96,43254,30430],{"class":106},[96,43256,31223],{"class":211},[96,43258,1687],{"class":102},[96,43260,31228],{"class":106},[96,43262,1684],{"class":102},[96,43264,32186],{"class":211},[96,43266,113],{"class":106},[96,43268,43269],{"class":98,"line":7961},[96,43270,2383],{"emptyLinePlaceholder":23},[96,43272,43273],{"class":98,"line":7967},[96,43274,2383],{"emptyLinePlaceholder":23},[96,43276,43277],{"class":98,"line":7994},[96,43278,32201],{"class":165},[96,43280,43281],{"class":98,"line":7999},[96,43282,32206],{"class":165},[96,43284,43285],{"class":98,"line":8005},[96,43286,32211],{"class":165},[96,43288,43289,43291,43293,43295,43297,43299,43301],{"class":98,"line":8017},[96,43290,32216],{"class":106},[96,43292,152],{"class":102},[96,43294,32221],{"class":106},[96,43296,32224],{"class":5200},[96,43298,152],{"class":102},[96,43300,32229],{"class":155},[96,43302,113],{"class":106},[96,43304,43305],{"class":98,"line":8029},[96,43306,2383],{"emptyLinePlaceholder":23},[96,43308,43309],{"class":98,"line":8041},[96,43310,32240],{"class":165},[96,43312,43313,43315,43317],{"class":98,"line":9700},[96,43314,32245],{"class":106},[96,43316,152],{"class":102},[96,43318,32250],{"class":106},[96,43320,43321],{"class":98,"line":9725},[96,43322,2383],{"emptyLinePlaceholder":23},[96,43324,43325],{"class":98,"line":9748},[96,43326,32259],{"class":165},[96,43328,43329,43331,43333],{"class":98,"line":9772},[96,43330,31268],{"class":106},[96,43332,152],{"class":102},[96,43334,32268],{"class":106},[96,43336,43337],{"class":98,"line":9777},[96,43338,32273],{"class":165},[96,43340,43341],{"class":98,"line":9782},[96,43342,32278],{"class":165},[96,43344,43345],{"class":98,"line":9787},[96,43346,32283],{"class":165},[96,43348,43349,43351,43353],{"class":98,"line":9796},[96,43350,32288],{"class":106},[96,43352,152],{"class":102},[96,43354,32293],{"class":106},[96,43356,43357],{"class":98,"line":9801},[96,43358,2383],{"emptyLinePlaceholder":23},[96,43360,43361],{"class":98,"line":9807},[96,43362,2383],{"emptyLinePlaceholder":23},[96,43364,43365],{"class":98,"line":9828},[96,43366,32306],{"class":165},[96,43368,43369],{"class":98,"line":9834},[96,43370,32311],{"class":165},[96,43372,43373,43375,43377],{"class":98,"line":9848},[96,43374,32316],{"class":106},[96,43376,152],{"class":102},[96,43378,32321],{"class":155},[96,43380,43381],{"class":98,"line":9854},[96,43382,32326],{"class":165},[96,43384,43385,43387,43389],{"class":98,"line":9881},[96,43386,32331],{"class":106},[96,43388,152],{"class":102},[96,43390,32336],{"class":106},[96,43392,43393],{"class":98,"line":9890},[96,43394,32341],{"class":165},[96,43396,43397,43399,43401],{"class":98,"line":9896},[96,43398,32346],{"class":106},[96,43400,152],{"class":102},[96,43402,32336],{"class":106},[96,43404,43405],{"class":98,"line":9904},[96,43406,32355],{"class":165},[96,43408,43409,43411,43413],{"class":98,"line":9909},[96,43410,32360],{"class":106},[96,43412,152],{"class":102},[96,43414,32336],{"class":106},[96,43416,43417],{"class":98,"line":16588},[96,43418,32369],{"class":165},[96,43420,43421,43423,43425],{"class":98,"line":16594},[96,43422,32374],{"class":106},[96,43424,152],{"class":102},[96,43426,32336],{"class":106},[96,43428,43429],{"class":98,"line":16617},[96,43430,2383],{"emptyLinePlaceholder":23},[96,43432,43433],{"class":98,"line":16623},[96,43434,32387],{"class":165},[96,43436,43437,43439,43441],{"class":98,"line":16646},[96,43438,32392],{"class":106},[96,43440,152],{"class":102},[96,43442,32397],{"class":106},[96,43444,43445],{"class":98,"line":16660},[96,43446,2383],{"emptyLinePlaceholder":23},[96,43448,43449],{"class":98,"line":16680},[96,43450,2383],{"emptyLinePlaceholder":23},[96,43452,43453],{"class":98,"line":16686},[96,43454,32410],{"class":165},[96,43456,43457,43459,43461,43463,43465],{"class":98,"line":16697},[96,43458,3184],{"class":102},[96,43460,32417],{"class":106},[96,43462,26022],{"class":102},[96,43464,32422],{"class":155},[96,43466,32425],{"class":106},[96,43468,43469,43471,43473,43475,43477,43479,43481,43483,43485,43487,43489],{"class":98,"line":16720},[96,43470,32430],{"class":155},[96,43472,107],{"class":106},[96,43474,32435],{"class":211},[96,43476,32438],{"class":155},[96,43478,691],{"class":211},[96,43480,32438],{"class":155},[96,43482,358],{"class":211},[96,43484,32447],{"class":106},[96,43486,639],{"class":102},[96,43488,324],{"class":155},[96,43490,30476],{"class":106},[96,43492,43493,43495,43497,43499,43501,43503],{"class":98,"line":16742},[96,43494,32430],{"class":155},[96,43496,107],{"class":106},[96,43498,32462],{"class":211},[96,43500,562],{"class":102},[96,43502,553],{"class":155},[96,43504,113],{"class":106},[96,43506,43507],{"class":98,"line":16747},[96,43508,2383],{"emptyLinePlaceholder":23},[96,43510,43511],{"class":98,"line":16753},[96,43512,32477],{"class":165},[96,43514,43515],{"class":98,"line":16767},[96,43516,32482],{"class":165},[96,43518,43519,43521,43523],{"class":98,"line":16780},[96,43520,32487],{"class":106},[96,43522,152],{"class":102},[96,43524,32321],{"class":155},[96,43526,43527],{"class":98,"line":16785},[96,43528,32496],{"class":165},[96,43530,43531,43533,43535],{"class":98,"line":16799},[96,43532,32501],{"class":106},[96,43534,152],{"class":102},[96,43536,3068],{"class":155},[96,43538,43539],{"class":98,"line":16804},[96,43540,32510],{"class":165},[96,43542,43543,43545,43547],{"class":98,"line":16810},[96,43544,32515],{"class":106},[96,43546,152],{"class":102},[96,43548,32321],{"class":155},[96,43550,43551],{"class":98,"line":16815},[96,43552,32524],{"class":165},[96,43554,43555,43557,43559],{"class":98,"line":16829},[96,43556,32529],{"class":106},[96,43558,152],{"class":102},[96,43560,3068],{"class":155},[96,43562,43563],{"class":98,"line":16834},[96,43564,32538],{"class":165},[96,43566,43567,43569,43571],{"class":98,"line":16839},[96,43568,32543],{"class":106},[96,43570,152],{"class":102},[96,43572,3068],{"class":155},[96,43574,43575],{"class":98,"line":16853},[96,43576,32552],{"class":165},[96,43578,43579,43581,43583],{"class":98,"line":16865},[96,43580,32557],{"class":106},[96,43582,152],{"class":102},[96,43584,3068],{"class":155},[96,43586,43587],{"class":98,"line":16870},[96,43588,32566],{"class":165},[96,43590,43591,43593,43595,43597,43599],{"class":98,"line":16883},[96,43592,3386],{"class":102},[96,43594,31580],{"class":106},[96,43596,26022],{"class":102},[96,43598,31585],{"class":155},[96,43600,32579],{"class":106},[96,43602,43603],{"class":98,"line":16888},[96,43604,32584],{"class":165},[96,43606,43607,43609,43611],{"class":98,"line":16893},[96,43608,32589],{"class":106},[96,43610,152],{"class":102},[96,43612,32594],{"class":106},[96,43614,43615],{"class":98,"line":16898},[96,43616,32599],{"class":165},[96,43618,43619,43621,43623],{"class":98,"line":16911},[96,43620,32604],{"class":106},[96,43622,152],{"class":102},[96,43624,32609],{"class":106},[96,43626,43627],{"class":98,"line":16916},[96,43628,32615],{"class":165},[96,43630,43631],{"class":98,"line":32612},[96,43632,32621],{"class":106},[96,43634,43635],{"class":98,"line":32618},[96,43636,32627],{"class":165},[96,43638,43639],{"class":98,"line":32624},[96,43640,32633],{"class":165},[96,43642,43643,43645,43647],{"class":98,"line":32630},[96,43644,32639],{"class":106},[96,43646,152],{"class":102},[96,43648,32644],{"class":106},[96,43650,43651],{"class":98,"line":32636},[96,43652,32650],{"class":165},[96,43654,43655,43657,43659,43661,43663,43665,43667],{"class":98,"line":32647},[96,43656,32656],{"class":106},[96,43658,152],{"class":102},[96,43660,32661],{"class":106},[96,43662,32664],{"class":5200},[96,43664,152],{"class":102},[96,43666,324],{"class":155},[96,43668,113],{"class":106},[96,43670,43671],{"class":98,"line":32653},[96,43672,32676],{"class":165},[96,43674,43675,43677,43679],{"class":98,"line":32673},[96,43676,32682],{"class":106},[96,43678,152],{"class":102},[96,43680,32687],{"class":106},[96,43682,43683],{"class":98,"line":32679},[96,43684,32693],{"class":165},[96,43686,43687],{"class":98,"line":32690},[96,43688,32699],{"class":106},[96,43690,43691],{"class":98,"line":32696},[96,43692,32705],{"class":165},[96,43694,43695],{"class":98,"line":32702},[96,43696,32711],{"class":106},[96,43698,43699],{"class":98,"line":32708},[96,43700,32717],{"class":165},[96,43702,43703],{"class":98,"line":32714},[96,43704,32723],{"class":106},[96,43706,43707],{"class":98,"line":32720},[96,43708,32729],{"class":165},[96,43710,43711,43713,43715,43717,43719,43721,43723],{"class":98,"line":32726},[96,43712,32735],{"class":106},[96,43714,9461],{"class":102},[96,43716,32740],{"class":106},[96,43718,562],{"class":102},[96,43720,32745],{"class":106},[96,43722,298],{"class":155},[96,43724,113],{"class":106},[96,43726,43727],{"class":98,"line":32732},[96,43728,32755],{"class":165},[96,43730,43731,43733,43735,43737,43739],{"class":98,"line":32752},[96,43732,32761],{"class":106},[96,43734,9461],{"class":102},[96,43736,32766],{"class":106},[96,43738,2932],{"class":102},[96,43740,32771],{"class":106},[96,43742,43743],{"class":98,"line":32758},[96,43744,32777],{"class":165},[96,43746,43747,43749,43751,43753,43755],{"class":98,"line":32774},[96,43748,32783],{"class":106},[96,43750,9461],{"class":102},[96,43752,32745],{"class":106},[96,43754,298],{"class":155},[96,43756,113],{"class":106},[96,43758,43759],{"class":98,"line":32780},[96,43760,32797],{"class":165},[96,43762,43763,43765,43767,43769,43771],{"class":98,"line":32794},[96,43764,3386],{"class":102},[96,43766,32805],{"class":106},[96,43768,26022],{"class":102},[96,43770,31585],{"class":155},[96,43772,32812],{"class":106},[96,43774,43775],{"class":98,"line":32800},[96,43776,32818],{"class":165},[96,43778,43779,43781,43783],{"class":98,"line":32815},[96,43780,32589],{"class":106},[96,43782,152],{"class":102},[96,43784,32594],{"class":106},[96,43786,43787],{"class":98,"line":32821},[96,43788,32833],{"class":165},[96,43790,43791,43793,43795],{"class":98,"line":32830},[96,43792,32604],{"class":106},[96,43794,152],{"class":102},[96,43796,32609],{"class":106},[96,43798,43799],{"class":98,"line":32836},[96,43800,32848],{"class":165},[96,43802,43803],{"class":98,"line":32845},[96,43804,32854],{"class":106},[96,43806,43807],{"class":98,"line":32851},[96,43808,36335],{"class":165},[96,43810,43811,43813],{"class":98,"line":32857},[96,43812,32860],{"class":102},[96,43814,32863],{"class":106},[96,43816,43817],{"class":98,"line":32866},[96,43818,32869],{"class":165},[96,43820,43821,43823,43825],{"class":98,"line":32872},[96,43822,36350],{"class":106},[96,43824,152],{"class":102},[96,43826,32644],{"class":106},[96,43828,43829],{"class":98,"line":32883},[96,43830,32886],{"class":165},[96,43832,43833,43835,43837,43839,43841,43843,43845],{"class":98,"line":32889},[96,43834,36363],{"class":106},[96,43836,152],{"class":102},[96,43838,32661],{"class":106},[96,43840,32664],{"class":5200},[96,43842,152],{"class":102},[96,43844,324],{"class":155},[96,43846,113],{"class":106},[96,43848,43849],{"class":98,"line":32908},[96,43850,32911],{"class":165},[96,43852,43853,43855,43857],{"class":98,"line":32914},[96,43854,36384],{"class":106},[96,43856,152],{"class":102},[96,43858,32687],{"class":106},[96,43860,43861],{"class":98,"line":32925},[96,43862,32928],{"class":165},[96,43864,43865,43867,43869,43871,43873,43875,43877],{"class":98,"line":32931},[96,43866,36397],{"class":106},[96,43868,9461],{"class":102},[96,43870,36402],{"class":106},[96,43872,562],{"class":102},[96,43874,32745],{"class":106},[96,43876,298],{"class":155},[96,43878,113],{"class":106},[96,43880,43881,43883,43885,43887,43889],{"class":98,"line":32951},[96,43882,36415],{"class":106},[96,43884,9461],{"class":102},[96,43886,32766],{"class":106},[96,43888,2932],{"class":102},[96,43890,32771],{"class":106},[96,43892,43893],{"class":98,"line":32967},[96,43894,36428],{"class":165},[96,43896,43897,43899,43901,43903,43905],{"class":98,"line":32973},[96,43898,36433],{"class":106},[96,43900,9461],{"class":102},[96,43902,32745],{"class":106},[96,43904,298],{"class":155},[96,43906,113],{"class":106},[96,43908,43909],{"class":98,"line":32987},[96,43910,32990],{"class":165},[96,43912,43913],{"class":98,"line":32993},[96,43914,32996],{"class":165},[96,43916,43917,43919,43921],{"class":98,"line":32999},[96,43918,33002],{"class":106},[96,43920,691],{"class":102},[96,43922,33007],{"class":106},[96,43924,43925],{"class":98,"line":33010},[96,43926,33013],{"class":165},[96,43928,43929],{"class":98,"line":33016},[96,43930,33019],{"class":165},[96,43932,43933,43935,43937],{"class":98,"line":33022},[96,43934,33025],{"class":106},[96,43936,691],{"class":102},[96,43938,33007],{"class":106},[96,43940,43941],{"class":98,"line":33032},[96,43942,33035],{"class":165},[96,43944,43945,43947,43949],{"class":98,"line":33038},[96,43946,33041],{"class":106},[96,43948,691],{"class":102},[96,43950,33046],{"class":106},[96,43952,43953],{"class":98,"line":33049},[96,43954,33052],{"class":165},[96,43956,43957,43959,43961],{"class":98,"line":33055},[96,43958,33058],{"class":106},[96,43960,691],{"class":102},[96,43962,33046],{"class":106},[96,43964,43965],{"class":98,"line":33065},[96,43966,2383],{"emptyLinePlaceholder":23},[96,43968,43969],{"class":98,"line":33070},[96,43970,33073],{"class":165},[96,43972,43973,43975,43977,43979,43981,43983,43985,43987,43989,43991,43993,43995,43997,43999,44001,44003,44005,44007,44009,44011],{"class":98,"line":33076},[96,43974,32430],{"class":155},[96,43976,107],{"class":106},[96,43978,3575],{"class":211},[96,43980,32438],{"class":155},[96,43982,33087],{"class":211},[96,43984,1003],{"class":155},[96,43986,33092],{"class":102},[96,43988,1053],{"class":155},[96,43990,33097],{"class":211},[96,43992,1003],{"class":155},[96,43994,33092],{"class":102},[96,43996,1053],{"class":155},[96,43998,3575],{"class":211},[96,44000,33108],{"class":106},[96,44002,639],{"class":102},[96,44004,324],{"class":155},[96,44006,33115],{"class":106},[96,44008,639],{"class":102},[96,44010,324],{"class":155},[96,44012,33122],{"class":106},[96,44014,44015,44017,44019,44021,44023,44025,44027,44029,44031,44033,44035,44037,44039,44041,44043,44045,44047,44049,44051,44053],{"class":98,"line":33125},[96,44016,32430],{"class":155},[96,44018,107],{"class":106},[96,44020,3575],{"class":211},[96,44022,32438],{"class":155},[96,44024,33136],{"class":211},[96,44026,1003],{"class":155},[96,44028,33092],{"class":102},[96,44030,1053],{"class":155},[96,44032,33145],{"class":211},[96,44034,1003],{"class":155},[96,44036,33092],{"class":102},[96,44038,1053],{"class":155},[96,44040,3575],{"class":211},[96,44042,33156],{"class":106},[96,44044,639],{"class":102},[96,44046,324],{"class":155},[96,44048,33163],{"class":106},[96,44050,639],{"class":102},[96,44052,324],{"class":155},[96,44054,33122],{"class":106},[96,44056,44057],{"class":98,"line":33172},[96,44058,2383],{"emptyLinePlaceholder":23},[96,44060,44061],{"class":98,"line":33177},[96,44062,33180],{"class":165},[96,44064,44065,44067,44069,44071,44073,44075,44077],{"class":98,"line":33183},[96,44066,2480],{"class":102},[96,44068,33188],{"class":106},[96,44070,639],{"class":102},[96,44072,324],{"class":155},[96,44074,1047],{"class":106},[96,44076,1067],{"class":102},[96,44078,33199],{"class":106},[96,44080,44081],{"class":98,"line":33202},[96,44082,33205],{"class":165},[96,44084,44085,44087,44089,44091,44093,44095,44097],{"class":98,"line":33208},[96,44086,33211],{"class":106},[96,44088,146],{"class":155},[96,44090,152],{"class":102},[96,44092,33218],{"class":106},[96,44094,639],{"class":102},[96,44096,324],{"class":155},[96,44098,33225],{"class":106},[96,44100,44101],{"class":98,"line":33228},[96,44102,33231],{"class":165},[96,44104,44105],{"class":98,"line":33234},[96,44106,33237],{"class":165},[96,44108,44109,44111,44113],{"class":98,"line":33240},[96,44110,33243],{"class":106},[96,44112,152],{"class":102},[96,44114,32293],{"class":106},[96,44116,44117],{"class":98,"line":33250},[96,44118,2383],{"emptyLinePlaceholder":23},[96,44120,44121],{"class":98,"line":33255},[96,44122,33258],{"class":165},[96,44124,44125,44127,44129,44131,44133],{"class":98,"line":33261},[96,44126,33264],{"class":106},[96,44128,152],{"class":102},[96,44130,33269],{"class":106},[96,44132,639],{"class":102},[96,44134,33274],{"class":106},[96,44136,44137,44139,44141,44143,44145,44147,44149,44151,44153,44155,44157,44159,44161,44163,44165,44167,44169,44171],{"class":98,"line":33277},[96,44138,32430],{"class":155},[96,44140,107],{"class":106},[96,44142,33284],{"class":211},[96,44144,1003],{"class":155},[96,44146,33289],{"class":102},[96,44148,1053],{"class":155},[96,44150,651],{"class":211},[96,44152,1003],{"class":155},[96,44154,33289],{"class":102},[96,44156,1053],{"class":155},[96,44158,33302],{"class":211},[96,44160,33305],{"class":106},[96,44162,33308],{"class":102},[96,44164,1014],{"class":155},[96,44166,33313],{"class":106},[96,44168,435],{"class":102},[96,44170,1014],{"class":155},[96,44172,30476],{"class":106},[96,44174,44175],{"class":98,"line":33322},[96,44176,36712],{"class":165},[96,44178,44179],{"class":98,"line":33328},[96,44180,36717],{"class":165},[96,44182,44183,44185,44187],{"class":98,"line":33334},[96,44184,36722],{"class":106},[96,44186,33346],{"class":211},[96,44188,113],{"class":106},[96,44190,44191],{"class":98,"line":33340},[96,44192,33366],{"class":165},[96,44194,44195,44197,44199,44201,44203,44205],{"class":98,"line":33351},[96,44196,33372],{"class":106},[96,44198,152],{"class":102},[96,44200,33377],{"class":106},[96,44202,33380],{"class":5200},[96,44204,152],{"class":102},[96,44206,1529],{"class":106},[96,44208,44209,44211,44213,44215],{"class":98,"line":33357},[96,44210,33390],{"class":211},[96,44212,966],{"class":106},[96,44214,33395],{"class":155},[96,44216,33398],{"class":106},[96,44218,44219,44221],{"class":98,"line":33363},[96,44220,33404],{"class":211},[96,44222,33407],{"class":106},[96,44224,44225,44227],{"class":98,"line":33369},[96,44226,33413],{"class":211},[96,44228,33416],{"class":106},[96,44230,44231,44233],{"class":98,"line":33387},[96,44232,33422],{"class":211},[96,44234,33425],{"class":106},[96,44236,44237,44239],{"class":98,"line":33401},[96,44238,33431],{"class":211},[96,44240,33434],{"class":106},[96,44242,44243],{"class":98,"line":33410},[96,44244,33440],{"class":106},[96,44246,44247],{"class":98,"line":33419},[96,44248,33446],{"class":165},[96,44250,44251,44253],{"class":98,"line":33428},[96,44252,4073],{"class":102},[96,44254,33454],{"class":106},[96,44256,44257],{"class":98,"line":33437},[96,44258,2383],{"emptyLinePlaceholder":23},[96,44260,44261],{"class":98,"line":33443},[96,44262,33465],{"class":165},[96,44264,44265,44267,44269],{"class":98,"line":33449},[96,44266,31926],{"class":102},[96,44268,33473],{"class":1946},[96,44270,33476],{"class":106},[96,44272,44273],{"class":98,"line":33457},[96,44274,33482],{"class":165},[96,44276,44277,44279,44281,44283,44285,44287,44289,44291],{"class":98,"line":33462},[96,44278,33488],{"class":106},[96,44280,31672],{"class":5200},[96,44282,152],{"class":102},[96,44284,107],{"class":106},[96,44286,605],{"class":155},[96,44288,485],{"class":106},[96,44290,400],{"class":155},[96,44292,30476],{"class":106},[96,44294,44295],{"class":98,"line":33468},[96,44296,33508],{"class":165},[96,44298,44299],{"class":98,"line":33479},[96,44300,33514],{"class":165},[96,44302,44303],{"class":98,"line":33485},[96,44304,33520],{"class":165},[96,44306,44307,44309,44311,44313,44315,44317,44319],{"class":98,"line":33505},[96,44308,31706],{"class":106},[96,44310,324],{"class":155},[96,44312,485],{"class":106},[96,44314,184],{"class":155},[96,44316,485],{"class":106},[96,44318,324],{"class":155},[96,44320,113],{"class":106},[96,44322,44323],{"class":98,"line":33511},[96,44324,33543],{"class":165},[96,44326,44327],{"class":98,"line":33517},[96,44328,33549],{"class":165},[96,44330,44331],{"class":98,"line":33523},[96,44332,33555],{"class":165},[96,44334,44335],{"class":98,"line":33540},[96,44336,33561],{"class":165},[96,44338,44339],{"class":98,"line":33546},[96,44340,33567],{"class":165},[96,44342,44343,44345,44347,44349,44351,44353,44355,44357,44359],{"class":98,"line":33552},[96,44344,33573],{"class":106},[96,44346,33576],{"class":211},[96,44348,33579],{"class":106},[96,44350,33582],{"class":211},[96,44352,485],{"class":106},[96,44354,33587],{"class":5200},[96,44356,152],{"class":102},[96,44358,33592],{"class":211},[96,44360,113],{"class":106},[96,44362,44363,44365,44367,44369,44371,44373,44375,44377,44379],{"class":98,"line":33558},[96,44364,33573],{"class":106},[96,44366,33576],{"class":211},[96,44368,33604],{"class":106},[96,44370,33607],{"class":211},[96,44372,485],{"class":106},[96,44374,33587],{"class":5200},[96,44376,152],{"class":102},[96,44378,33616],{"class":211},[96,44380,113],{"class":106},[96,44382,44383],{"class":98,"line":33564},[96,44384,33624],{"class":165},[96,44386,44387],{"class":98,"line":33570},[96,44388,33630],{"class":106},[96,44390,44391],{"class":98,"line":33597},[96,44392,33636],{"class":165},[96,44394,44395,44397,44399],{"class":98,"line":33621},[96,44396,33642],{"class":106},[96,44398,33645],{"class":211},[96,44400,113],{"class":106},[96,44402,44403,44405,44407],{"class":98,"line":33627},[96,44404,33653],{"class":106},[96,44406,33656],{"class":211},[96,44408,113],{"class":106},[96,44410,44411],{"class":98,"line":33633},[96,44412,33664],{"class":165},[96,44414,44415,44417,44419,44421,44423,44425,44427],{"class":98,"line":33639},[96,44416,31706],{"class":106},[96,44418,324],{"class":155},[96,44420,485],{"class":106},[96,44422,184],{"class":155},[96,44424,485],{"class":106},[96,44426,184],{"class":155},[96,44428,113],{"class":106},[96,44430,44431,44433,44435,44437,44439,44441,44443,44445,44447],{"class":98,"line":33650},[96,44432,33573],{"class":106},[96,44434,33576],{"class":211},[96,44436,33691],{"class":106},[96,44438,33582],{"class":211},[96,44440,485],{"class":106},[96,44442,33587],{"class":5200},[96,44444,152],{"class":102},[96,44446,33702],{"class":211},[96,44448,113],{"class":106},[96,44450,44451,44453,44455,44457,44459,44461,44463,44465,44467],{"class":98,"line":33661},[96,44452,33573],{"class":106},[96,44454,33576],{"class":211},[96,44456,33714],{"class":106},[96,44458,33607],{"class":211},[96,44460,485],{"class":106},[96,44462,33587],{"class":5200},[96,44464,152],{"class":102},[96,44466,33725],{"class":211},[96,44468,113],{"class":106},[96,44470,44471],{"class":98,"line":33667},[96,44472,33733],{"class":165},[96,44474,44475],{"class":98,"line":33684},[96,44476,33630],{"class":106},[96,44478,44479,44481,44483],{"class":98,"line":33707},[96,44480,33642],{"class":106},[96,44482,33576],{"class":211},[96,44484,113],{"class":106},[96,44486,44487,44489,44491],{"class":98,"line":33730},[96,44488,33653],{"class":106},[96,44490,33755],{"class":211},[96,44492,113],{"class":106},[96,44494,44495],{"class":98,"line":33736},[96,44496,33763],{"class":106},[96,44498,44499],{"class":98,"line":33741},[96,44500,2383],{"emptyLinePlaceholder":23},[96,44502,44503],{"class":98,"line":33750},[96,44504,33774],{"class":165},[96,44506,44507,44509,44511,44513,44515],{"class":98,"line":33760},[96,44508,1514],{"class":102},[96,44510,31199],{"class":155},[96,44512,2932],{"class":102},[96,44514,31204],{"class":211},[96,44516,3722],{"class":106},[96,44518,44519],{"class":98,"line":33766},[96,44520,33793],{"class":165},[96,44522,44523,44526,44528],{"class":98,"line":33771},[96,44524,44525],{"class":106},"    GoogLeNet",[96,44527,152],{"class":102},[96,44529,44530],{"class":106},"GoogLeNet(Inception)\n",[96,44532,44533,44535,44537],{"class":98,"line":33777},[96,44534,33810],{"class":106},[96,44536,152],{"class":102},[96,44538,33815],{"class":106},[96,44540,44541,44543,44545,44548,44550,44552,44554],{"class":98,"line":33790},[96,44542,33372],{"class":106},[96,44544,152],{"class":102},[96,44546,44547],{"class":106},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[96,44549,33828],{"class":5200},[96,44551,152],{"class":102},[96,44553,1058],{"class":155},[96,44555,113],{"class":106},[96,44557,44558],{"class":98,"line":33796},[96,44559,33840],{"class":106},[50,44561,44562],{"start":1162},[53,44563,40553],{},[87,44565,44567],{"className":30357,"code":44566,"language":30359,"meta":18,"style":18},"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",[93,44568,44569,44575,44585,44595,44599,44609,44620,44624,44628,44632,44640,44656,44666,44682,44692,44706,44710,44720,44730,44740,44746,44750,44754,44762,44766,44782,44790,44794,44798,44806,44814,44818,44822,44826,44830,44836,44840,44850,44858,44866,44870,44874,44878,44886,44890,44906,44910,44914,44918,44930,44934,44946,44950,44954,44966,44970,44980,44984,44988,45000,45004,45012,45016,45020,45028,45032,45040,45044,45048,45052,45056,45060,45076,45084,45088,45092,45140,45146,45150,45160,45168,45176,45180,45184,45188,45192,45200,45204,45220,45224,45232,45240],{"__ignoreMap":18},[96,44570,44571,44573],{"class":98,"line":99},[96,44572,30371],{"class":102},[96,44574,30374],{"class":106},[96,44576,44577,44579,44581,44583],{"class":98,"line":19},[96,44578,30371],{"class":102},[96,44580,31394],{"class":106},[96,44582,31362],{"class":102},[96,44584,31399],{"class":106},[96,44586,44587,44589,44591,44593],{"class":98,"line":1162},[96,44588,30716],{"class":102},[96,44590,31377],{"class":106},[96,44592,30371],{"class":102},[96,44594,31382],{"class":106},[96,44596,44597],{"class":98,"line":1177},[96,44598,33901],{"class":165},[96,44600,44601,44603,44605,44607],{"class":98,"line":1183},[96,44602,30716],{"class":102},[96,44604,31347],{"class":106},[96,44606,30371],{"class":102},[96,44608,31352],{"class":106},[96,44610,44611,44613,44615,44617],{"class":98,"line":1197},[96,44612,30716],{"class":102},[96,44614,31893],{"class":106},[96,44616,30371],{"class":102},[96,44618,44619],{"class":106}," GoogLeNet,Inception\n",[96,44621,44622],{"class":98,"line":1203},[96,44623,2383],{"emptyLinePlaceholder":23},[96,44625,44626],{"class":98,"line":1294},[96,44627,2383],{"emptyLinePlaceholder":23},[96,44629,44630],{"class":98,"line":1300},[96,44631,33930],{"class":165},[96,44633,44634,44636,44638],{"class":98,"line":1312},[96,44635,31926],{"class":102},[96,44637,33937],{"class":1946},[96,44639,31932],{"class":106},[96,44641,44642,44644,44646,44648,44650,44652,44654],{"class":98,"line":1595},[96,44643,33944],{"class":106},[96,44645,152],{"class":102},[96,44647,31434],{"class":106},[96,44649,31437],{"class":5200},[96,44651,152],{"class":102},[96,44653,31442],{"class":211},[96,44655,31445],{"class":106},[96,44657,44658,44660,44662,44664],{"class":98,"line":1600},[96,44659,33961],{"class":5200},[96,44661,152],{"class":102},[96,44663,33966],{"class":155},[96,44665,31445],{"class":106},[96,44667,44668,44670,44672,44674,44676,44678,44680],{"class":98,"line":1606},[96,44669,33973],{"class":5200},[96,44671,152],{"class":102},[96,44673,31472],{"class":106},[96,44675,31475],{"class":5200},[96,44677,152],{"class":102},[96,44679,35428],{"class":155},[96,44681,31483],{"class":106},[96,44683,44684,44686,44688,44690],{"class":98,"line":1611},[96,44685,33990],{"class":5200},[96,44687,152],{"class":102},[96,44689,31455],{"class":155},[96,44691,113],{"class":106},[96,44693,44694,44696,44698,44700,44702,44704],{"class":98,"line":1625},[96,44695,34001],{"class":106},[96,44697,152],{"class":102},[96,44699,31513],{"class":106},[96,44701,31516],{"class":5200},[96,44703,152],{"class":102},[96,44705,34012],{"class":106},[96,44707,44708],{"class":98,"line":1630},[96,44709,34017],{"class":165},[96,44711,44712,44714,44716,44718],{"class":98,"line":1636},[96,44713,34022],{"class":5200},[96,44715,152],{"class":102},[96,44717,324],{"class":155},[96,44719,31445],{"class":106},[96,44721,44722,44724,44726,44728],{"class":98,"line":1657},[96,44723,34033],{"class":5200},[96,44725,152],{"class":102},[96,44727,31455],{"class":155},[96,44729,31445],{"class":106},[96,44731,44732,44734,44736,44738],{"class":98,"line":1662},[96,44733,34044],{"class":5200},[96,44735,152],{"class":102},[96,44737,298],{"class":155},[96,44739,113],{"class":106},[96,44741,44742,44744],{"class":98,"line":1676},[96,44743,4073],{"class":102},[96,44745,34057],{"class":106},[96,44747,44748],{"class":98,"line":1681},[96,44749,2383],{"emptyLinePlaceholder":23},[96,44751,44752],{"class":98,"line":1710},[96,44753,34066],{"class":165},[96,44755,44756,44758,44760],{"class":98,"line":1715},[96,44757,31926],{"class":102},[96,44759,34073],{"class":1946},[96,44761,34076],{"class":106},[96,44763,44764],{"class":98,"line":1732},[96,44765,34081],{"class":165},[96,44767,44768,44770,44772,44774,44776,44778,44780],{"class":98,"line":1737},[96,44769,31216],{"class":106},[96,44771,152],{"class":102},[96,44773,31223],{"class":211},[96,44775,1687],{"class":102},[96,44777,31228],{"class":106},[96,44779,1684],{"class":102},[96,44781,34098],{"class":211},[96,44783,44784,44786,44788],{"class":98,"line":1742},[96,44785,31268],{"class":106},[96,44787,152],{"class":102},[96,44789,32268],{"class":106},[96,44791,44792],{"class":98,"line":1747},[96,44793,2383],{"emptyLinePlaceholder":23},[96,44795,44796],{"class":98,"line":1761},[96,44797,34115],{"class":165},[96,44799,44800,44802,44804],{"class":98,"line":1766},[96,44801,34120],{"class":106},[96,44803,152],{"class":102},[96,44805,32321],{"class":155},[96,44807,44808,44810,44812],{"class":98,"line":2560},[96,44809,34129],{"class":106},[96,44811,152],{"class":102},[96,44813,3068],{"class":155},[96,44815,44816],{"class":98,"line":2574},[96,44817,2383],{"emptyLinePlaceholder":23},[96,44819,44820],{"class":98,"line":2582},[96,44821,34142],{"class":165},[96,44823,44824],{"class":98,"line":2587},[96,44825,34147],{"class":165},[96,44827,44828],{"class":98,"line":2593},[96,44829,34152],{"class":165},[96,44831,44832,44834],{"class":98,"line":2599},[96,44833,34157],{"class":102},[96,44835,32863],{"class":106},[96,44837,44838],{"class":98,"line":2604},[96,44839,34164],{"class":165},[96,44841,44842,44844,44846,44848],{"class":98,"line":7932},[96,44843,3386],{"class":102},[96,44845,34171],{"class":106},[96,44847,26022],{"class":102},[96,44849,34176],{"class":106},[96,44851,44852,44854,44856],{"class":98,"line":7956},[96,44853,34181],{"class":106},[96,44855,152],{"class":102},[96,44857,34186],{"class":106},[96,44859,44860,44862,44864],{"class":98,"line":7961},[96,44861,34191],{"class":106},[96,44863,152],{"class":102},[96,44865,34196],{"class":106},[96,44867,44868],{"class":98,"line":7967},[96,44869,34201],{"class":165},[96,44871,44872],{"class":98,"line":7994},[96,44873,32854],{"class":106},[96,44875,44876],{"class":98,"line":7999},[96,44877,34210],{"class":165},[96,44879,44880,44882,44884],{"class":98,"line":8005},[96,44881,32639],{"class":106},[96,44883,152],{"class":102},[96,44885,34219],{"class":106},[96,44887,44888],{"class":98,"line":8017},[96,44889,34224],{"class":165},[96,44891,44892,44894,44896,44898,44900,44902,44904],{"class":98,"line":8029},[96,44893,32656],{"class":106},[96,44895,152],{"class":102},[96,44897,32661],{"class":106},[96,44899,32664],{"class":5200},[96,44901,152],{"class":102},[96,44903,324],{"class":155},[96,44905,113],{"class":106},[96,44907,44908],{"class":98,"line":8041},[96,44909,34245],{"class":165},[96,44911,44912],{"class":98,"line":9700},[96,44913,34250],{"class":165},[96,44915,44916],{"class":98,"line":9725},[96,44917,34255],{"class":165},[96,44919,44920,44922,44924,44926,44928],{"class":98,"line":9748},[96,44921,34260],{"class":106},[96,44923,9461],{"class":102},[96,44925,32766],{"class":106},[96,44927,2932],{"class":102},[96,44929,34269],{"class":106},[96,44931,44932],{"class":98,"line":9772},[96,44933,34274],{"class":165},[96,44935,44936,44938,44940,44942,44944],{"class":98,"line":9777},[96,44937,34279],{"class":106},[96,44939,9461],{"class":102},[96,44941,34284],{"class":106},[96,44943,298],{"class":155},[96,44945,113],{"class":106},[96,44947,44948],{"class":98,"line":9782},[96,44949,2383],{"emptyLinePlaceholder":23},[96,44951,44952],{"class":98,"line":9787},[96,44953,34297],{"class":165},[96,44955,44956,44958,44960,44962,44964],{"class":98,"line":9796},[96,44957,34302],{"class":106},[96,44959,152],{"class":102},[96,44961,34307],{"class":106},[96,44963,691],{"class":102},[96,44965,34312],{"class":106},[96,44967,44968],{"class":98,"line":9801},[96,44969,34317],{"class":165},[96,44971,44972,44974,44976,44978],{"class":98,"line":9807},[96,44973,32430],{"class":155},[96,44975,107],{"class":106},[96,44977,34326],{"class":211},[96,44979,34329],{"class":106},[96,44981,44982],{"class":98,"line":9828},[96,44983,2383],{"emptyLinePlaceholder":23},[96,44985,44986],{"class":98,"line":9834},[96,44987,34338],{"class":165},[96,44989,44990,44992,44994,44996,44998],{"class":98,"line":9848},[96,44991,1514],{"class":102},[96,44993,31199],{"class":155},[96,44995,2932],{"class":102},[96,44997,31204],{"class":211},[96,44999,3722],{"class":106},[96,45001,45002],{"class":98,"line":9854},[96,45003,34355],{"class":165},[96,45005,45006,45008,45010],{"class":98,"line":9881},[96,45007,31268],{"class":106},[96,45009,152],{"class":102},[96,45011,44530],{"class":106},[96,45013,45014],{"class":98,"line":9890},[96,45015,34368],{"class":165},[96,45017,45018],{"class":98,"line":9896},[96,45019,34373],{"class":165},[96,45021,45022,45024,45026],{"class":98,"line":9904},[96,45023,34378],{"class":106},[96,45025,34381],{"class":211},[96,45027,30476],{"class":106},[96,45029,45030],{"class":98,"line":9909},[96,45031,34388],{"class":165},[96,45033,45034,45036,45038],{"class":98,"line":16588},[96,45035,34001],{"class":106},[96,45037,152],{"class":102},[96,45039,34397],{"class":106},[96,45041,45042],{"class":98,"line":16594},[96,45043,34402],{"class":165},[96,45045,45046],{"class":98,"line":16617},[96,45047,34407],{"class":106},[96,45049,45050],{"class":98,"line":16623},[96,45051,2383],{"emptyLinePlaceholder":23},[96,45053,45054],{"class":98,"line":16646},[96,45055,34416],{"class":165},[96,45057,45058],{"class":98,"line":16660},[96,45059,34421],{"class":165},[96,45061,45062,45064,45066,45068,45070,45072,45074],{"class":98,"line":16680},[96,45063,31216],{"class":106},[96,45065,152],{"class":102},[96,45067,31223],{"class":211},[96,45069,1687],{"class":102},[96,45071,31228],{"class":106},[96,45073,1684],{"class":102},[96,45075,34098],{"class":211},[96,45077,45078,45080,45082],{"class":98,"line":16686},[96,45079,31268],{"class":106},[96,45081,152],{"class":102},[96,45083,32268],{"class":106},[96,45085,45086],{"class":98,"line":16697},[96,45087,34450],{"class":165},[96,45089,45090],{"class":98,"line":16720},[96,45091,34455],{"class":165},[96,45093,45094,45096,45098,45100,45102,45104,45106,45108,45110,45112,45114,45116,45118,45120,45122,45124,45126,45128,45130,45132,45134,45136,45138],{"class":98,"line":16742},[96,45095,34460],{"class":106},[96,45097,152],{"class":102},[96,45099,997],{"class":106},[96,45101,34467],{"class":211},[96,45103,485],{"class":106},[96,45105,34472],{"class":211},[96,45107,485],{"class":106},[96,45109,34477],{"class":211},[96,45111,485],{"class":106},[96,45113,34482],{"class":211},[96,45115,485],{"class":106},[96,45117,34487],{"class":211},[96,45119,485],{"class":106},[96,45121,34492],{"class":211},[96,45123,485],{"class":106},[96,45125,34497],{"class":211},[96,45127,485],{"class":106},[96,45129,34502],{"class":211},[96,45131,485],{"class":106},[96,45133,34507],{"class":211},[96,45135,485],{"class":106},[96,45137,34512],{"class":211},[96,45139,33225],{"class":106},[96,45141,45142,45144],{"class":98,"line":16747},[96,45143,34157],{"class":102},[96,45145,32863],{"class":106},[96,45147,45148],{"class":98,"line":16753},[96,45149,34525],{"class":165},[96,45151,45152,45154,45156,45158],{"class":98,"line":16767},[96,45153,3386],{"class":102},[96,45155,34532],{"class":106},[96,45157,26022],{"class":102},[96,45159,34176],{"class":106},[96,45161,45162,45164,45166],{"class":98,"line":16780},[96,45163,32589],{"class":106},[96,45165,152],{"class":102},[96,45167,32594],{"class":106},[96,45169,45170,45172,45174],{"class":98,"line":16785},[96,45171,32604],{"class":106},[96,45173,152],{"class":102},[96,45175,32609],{"class":106},[96,45177,45178],{"class":98,"line":16799},[96,45179,2383],{"emptyLinePlaceholder":23},[96,45181,45182],{"class":98,"line":16804},[96,45183,34561],{"class":165},[96,45185,45186],{"class":98,"line":16810},[96,45187,32854],{"class":106},[96,45189,45190],{"class":98,"line":16815},[96,45191,34570],{"class":165},[96,45193,45194,45196,45198],{"class":98,"line":16829},[96,45195,32639],{"class":106},[96,45197,152],{"class":102},[96,45199,32644],{"class":106},[96,45201,45202],{"class":98,"line":16834},[96,45203,34583],{"class":165},[96,45205,45206,45208,45210,45212,45214,45216,45218],{"class":98,"line":16839},[96,45207,32656],{"class":106},[96,45209,152],{"class":102},[96,45211,32661],{"class":106},[96,45213,32664],{"class":5200},[96,45215,152],{"class":102},[96,45217,324],{"class":155},[96,45219,113],{"class":106},[96,45221,45222],{"class":98,"line":16853},[96,45223,34604],{"class":165},[96,45225,45226,45228,45230],{"class":98,"line":16865},[96,45227,34609],{"class":106},[96,45229,152],{"class":102},[96,45231,34614],{"class":106},[96,45233,45234,45236,45238],{"class":98,"line":16870},[96,45235,34619],{"class":106},[96,45237,152],{"class":102},[96,45239,34624],{"class":106},[96,45241,45242,45244,45246,45248,45250,45252,45254,45256],{"class":98,"line":16883},[96,45243,34629],{"class":155},[96,45245,107],{"class":106},[96,45247,34634],{"class":211},[96,45249,34637],{"class":106},[96,45251,34640],{"class":211},[96,45253,485],{"class":106},[96,45255,34645],{"class":211},[96,45257,34648],{"class":106},[67,45259,45261],{"id":45260},"_24训练自己的数据集","2.4.训练自己的数据集",[14,45263,45264],{},"猫狗分类任务",[14,45266,45267],{},"划分数据集和验证集",[87,45269,45271],{"className":30357,"code":45270,"language":30359,"meta":18,"style":18},"# 创建脚本，用于划分数据集和验证集\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",[93,45272,45273,45278,45285,45290,45301,45308,45312,45322,45336,45345,45349,45354,45364,45384,45388,45393,45403,45414,45427,45431,45436,45445,45455,45466,45470,45475,45485,45489,45494,45499,45504,45509,45514,45518,45528,45555,45568,45580,45607,45612,45617,45631,45636,45648,45663,45678,45686,45690,45695,45701,45713,45726,45731,45736,45741,45791,45797,45801],{"__ignoreMap":18},[96,45274,45275],{"class":98,"line":99},[96,45276,45277],{"class":165},"# 创建脚本，用于划分数据集和验证集\n",[96,45279,45280,45282],{"class":98,"line":19},[96,45281,30371],{"class":102},[96,45283,45284],{"class":106}," os\n",[96,45286,45287],{"class":98,"line":1162},[96,45288,45289],{"class":165},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[96,45291,45292,45294,45297,45299],{"class":98,"line":1177},[96,45293,30716],{"class":102},[96,45295,45296],{"class":106}," shutil ",[96,45298,30371],{"class":102},[96,45300,31801],{"class":106},[96,45302,45303,45305],{"class":98,"line":1183},[96,45304,30371],{"class":102},[96,45306,45307],{"class":106}," random\n",[96,45309,45310],{"class":98,"line":1197},[96,45311,2383],{"emptyLinePlaceholder":23},[96,45313,45314,45316,45319],{"class":98,"line":1203},[96,45315,31926],{"class":102},[96,45317,45318],{"class":1946}," mkfile",[96,45320,45321],{"class":106},"(file):\n",[96,45323,45324,45326,45328,45331,45334],{"class":98,"line":1294},[96,45325,3084],{"class":102},[96,45327,38909],{"class":102},[96,45329,45330],{"class":106}," os.path.exists(",[96,45332,45333],{"class":5200},"file",[96,45335,30765],{"class":106},[96,45337,45338,45341,45343],{"class":98,"line":1300},[96,45339,45340],{"class":106},"        os.makedirs(",[96,45342,45333],{"class":5200},[96,45344,113],{"class":106},[96,45346,45347],{"class":98,"line":1312},[96,45348,2383],{"emptyLinePlaceholder":23},[96,45350,45351],{"class":98,"line":1595},[96,45352,45353],{"class":165},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[96,45355,45356,45359,45361],{"class":98,"line":1600},[96,45357,45358],{"class":106},"file_path",[96,45360,152],{"class":102},[96,45362,45363],{"class":211},"'data_cat_dog'\n",[96,45365,45366,45369,45371,45374,45376,45379,45381],{"class":98,"line":1606},[96,45367,45368],{"class":106},"flower_class",[96,45370,152],{"class":102},[96,45372,45373],{"class":106},"[cla ",[96,45375,3008],{"class":102},[96,45377,45378],{"class":106}," cla ",[96,45380,26022],{"class":102},[96,45382,45383],{"class":106}," os.listdir(file_path)]\n",[96,45385,45386],{"class":98,"line":1611},[96,45387,2383],{"emptyLinePlaceholder":23},[96,45389,45390],{"class":98,"line":1625},[96,45391,45392],{"class":165},"# 创建训练集train文件夹\n",[96,45394,45395,45398,45401],{"class":98,"line":1630},[96,45396,45397],{"class":106},"mkfile(",[96,45399,45400],{"class":211},"'data\u002Ftrain'",[96,45402,113],{"class":106},[96,45404,45405,45407,45409,45411],{"class":98,"line":1636},[96,45406,3008],{"class":102},[96,45408,45378],{"class":106},[96,45410,26022],{"class":102},[96,45412,45413],{"class":106}," flower_class:\n",[96,45415,45416,45419,45422,45424],{"class":98,"line":1657},[96,45417,45418],{"class":106},"    mkfile(",[96,45420,45421],{"class":211},"'data\u002Ftrain\u002F'",[96,45423,588],{"class":102},[96,45425,45426],{"class":106},"cla)\n",[96,45428,45429],{"class":98,"line":1662},[96,45430,2383],{"emptyLinePlaceholder":23},[96,45432,45433],{"class":98,"line":1676},[96,45434,45435],{"class":165},"# 创建验证集val文件夹\n",[96,45437,45438,45440,45443],{"class":98,"line":1681},[96,45439,45397],{"class":106},[96,45441,45442],{"class":211},"'data\u002Ftest'",[96,45444,113],{"class":106},[96,45446,45447,45449,45451,45453],{"class":98,"line":1710},[96,45448,3008],{"class":102},[96,45450,45378],{"class":106},[96,45452,26022],{"class":102},[96,45454,45413],{"class":106},[96,45456,45457,45459,45462,45464],{"class":98,"line":1715},[96,45458,45418],{"class":106},[96,45460,45461],{"class":211},"'data\u002Ftest\u002F'",[96,45463,588],{"class":102},[96,45465,45426],{"class":106},[96,45467,45468],{"class":98,"line":1732},[96,45469,2383],{"emptyLinePlaceholder":23},[96,45471,45472],{"class":98,"line":1737},[96,45473,45474],{"class":165},"# 划分比例，训练集：测试集=9：1\n",[96,45476,45477,45480,45482],{"class":98,"line":1742},[96,45478,45479],{"class":106},"split_rate",[96,45481,152],{"class":102},[96,45483,45484],{"class":155},"0.1\n",[96,45486,45487],{"class":98,"line":1747},[96,45488,2383],{"emptyLinePlaceholder":23},[96,45490,45491],{"class":98,"line":1761},[96,45492,45493],{"class":165},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[96,45495,45496],{"class":98,"line":1766},[96,45497,45498],{"class":165},"# cla_path：当前类别的原始图片路径\n",[96,45500,45501],{"class":98,"line":2560},[96,45502,45503],{"class":165},"# images：当前类别下所有图片的文件名列表\n",[96,45505,45506],{"class":98,"line":2574},[96,45507,45508],{"class":165},"# num：该类别图片总数\n",[96,45510,45511],{"class":98,"line":2582},[96,45512,45513],{"class":165},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[96,45515,45516],{"class":98,"line":2587},[96,45517,2383],{"emptyLinePlaceholder":23},[96,45519,45520,45522,45524,45526],{"class":98,"line":2593},[96,45521,3008],{"class":102},[96,45523,45378],{"class":106},[96,45525,26022],{"class":102},[96,45527,45413],{"class":106},[96,45529,45530,45533,45535,45538,45540,45543,45546,45548,45550,45552],{"class":98,"line":2599},[96,45531,45532],{"class":106},"    cla_path ",[96,45534,152],{"class":102},[96,45536,45537],{"class":106}," file_path ",[96,45539,588],{"class":102},[96,45541,45542],{"class":211}," '\u002F'",[96,45544,45545],{"class":102}," +",[96,45547,45378],{"class":106},[96,45549,588],{"class":102},[96,45551,45542],{"class":211},[96,45553,45554],{"class":165},"  # 某一类别的子目录\n",[96,45556,45557,45560,45562,45565],{"class":98,"line":2604},[96,45558,45559],{"class":106},"    images ",[96,45561,152],{"class":102},[96,45563,45564],{"class":106}," os.listdir(cla_path)  ",[96,45566,45567],{"class":165},"# iamges 列表存储了该目录下所有图像的名称\n",[96,45569,45570,45573,45575,45577],{"class":98,"line":7932},[96,45571,45572],{"class":106},"    num ",[96,45574,152],{"class":102},[96,45576,7315],{"class":155},[96,45578,45579],{"class":106},"(images)\n",[96,45581,45582,45585,45587,45590,45592,45594,45596,45599,45601,45604],{"class":98,"line":7956},[96,45583,45584],{"class":106},"    eval_index ",[96,45586,152],{"class":102},[96,45588,45589],{"class":106}," random.sample(images, ",[96,45591,600],{"class":5200},[96,45593,152],{"class":102},[96,45595,110],{"class":155},[96,45597,45598],{"class":106},"(num ",[96,45600,562],{"class":102},[96,45602,45603],{"class":106}," split_rate))  ",[96,45605,45606],{"class":165},"# 从images列表中随机抽取 k 个图像名称\n",[96,45608,45609],{"class":98,"line":7961},[96,45610,45611],{"class":165},"    # 遍历该类别下的所有图片\n",[96,45613,45614],{"class":98,"line":7967},[96,45615,45616],{"class":165},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[96,45618,45619,45621,45624,45626,45628],{"class":98,"line":7994},[96,45620,3184],{"class":102},[96,45622,45623],{"class":106}," index, image ",[96,45625,26022],{"class":102},[96,45627,31585],{"class":155},[96,45629,45630],{"class":106},"(images):\n",[96,45632,45633],{"class":98,"line":7999},[96,45634,45635],{"class":165},"        # eval_index 中保存验证集val的图像名称\n",[96,45637,45638,45640,45643,45645],{"class":98,"line":8005},[96,45639,2480],{"class":102},[96,45641,45642],{"class":106}," image ",[96,45644,26022],{"class":102},[96,45646,45647],{"class":106}," eval_index:\n",[96,45649,45650,45653,45655,45658,45660],{"class":98,"line":8017},[96,45651,45652],{"class":106},"            image_path ",[96,45654,152],{"class":102},[96,45656,45657],{"class":106}," cla_path ",[96,45659,588],{"class":102},[96,45661,45662],{"class":106}," image\n",[96,45664,45665,45668,45670,45673,45675],{"class":98,"line":8029},[96,45666,45667],{"class":106},"            new_path ",[96,45669,152],{"class":102},[96,45671,45672],{"class":211}," 'data\u002Ftest\u002F'",[96,45674,45545],{"class":102},[96,45676,45677],{"class":106}," cla\n",[96,45679,45680,45683],{"class":98,"line":8041},[96,45681,45682],{"class":106},"            copy(image_path, new_path)  ",[96,45684,45685],{"class":165},"# 将选中的图像复制到新路径\n",[96,45687,45688],{"class":98,"line":9700},[96,45689,2383],{"emptyLinePlaceholder":23},[96,45691,45692],{"class":98,"line":9725},[96,45693,45694],{"class":165},"        # 其余的图像保存在训练集train中\n",[96,45696,45697,45699],{"class":98,"line":9748},[96,45698,2517],{"class":102},[96,45700,3722],{"class":106},[96,45702,45703,45705,45707,45709,45711],{"class":98,"line":9772},[96,45704,45652],{"class":106},[96,45706,152],{"class":102},[96,45708,45657],{"class":106},[96,45710,588],{"class":102},[96,45712,45662],{"class":106},[96,45714,45715,45717,45719,45722,45724],{"class":98,"line":9777},[96,45716,45667],{"class":106},[96,45718,152],{"class":102},[96,45720,45721],{"class":211}," 'data\u002Ftrain\u002F'",[96,45723,45545],{"class":102},[96,45725,45677],{"class":106},[96,45727,45728],{"class":98,"line":9782},[96,45729,45730],{"class":106},"            copy(image_path, new_path)\n",[96,45732,45733],{"class":98,"line":9787},[96,45734,45735],{"class":165},"            # 打印进度条信息\n",[96,45737,45738],{"class":98,"line":9796},[96,45739,45740],{"class":165},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[96,45742,45743,45745,45747,45749,45752,45754,45756,45759,45761,45763,45765,45768,45771,45773,45775,45778,45781,45783,45785,45788],{"class":98,"line":9801},[96,45744,32430],{"class":155},[96,45746,107],{"class":106},[96,45748,358],{"class":211},[96,45750,45751],{"class":155},"\\r",[96,45753,997],{"class":211},[96,45755,32438],{"class":155},[96,45757,45758],{"class":211},"] processing [",[96,45760,32438],{"class":155},[96,45762,691],{"class":211},[96,45764,32438],{"class":155},[96,45766,45767],{"class":211},"]\"",[96,45769,45770],{"class":106},".format(cla, index ",[96,45772,588],{"class":102},[96,45774,25097],{"class":155},[96,45776,45777],{"class":106},", num), ",[96,45779,45780],{"class":5200},"end",[96,45782,152],{"class":102},[96,45784,7636],{"class":211},[96,45786,45787],{"class":106},")  ",[96,45789,45790],{"class":165},"# processing bar\n",[96,45792,45793,45795],{"class":98,"line":9807},[96,45794,31278],{"class":155},[96,45796,1959],{"class":106},[96,45798,45799],{"class":98,"line":9828},[96,45800,2383],{"emptyLinePlaceholder":23},[96,45802,45803,45805,45807,45810],{"class":98,"line":9834},[96,45804,30394],{"class":155},[96,45806,107],{"class":106},[96,45808,45809],{"class":211},"\"processing done!\"",[96,45811,113],{"class":106},[14,45813,45814],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[21982,45816,45818],{"id":45817},"_242模型代码","2.4.2.模型代码",[14,45820,45821],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[87,45823,45825],{"className":30357,"code":45824,"language":30359,"meta":18,"style":18},"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",[93,45826,45827,45833,45843,45853,45857,45873,45881,45895,45905,45909,45939,45943,45977,46023,46027,46061,46107,46111,46115,46149,46179,46183,46191,46205,46227,46249,46267,46271,46285,46289,46293,46309,46313,46321,46335,46345,46389,46393,46421,46425,46435,46463,46467,46503,46507,46535,46539,46549,46581,46613,46641,46645,46655,46687,46719,46751,46783,46815,46843,46847,46857,46889,46921,46933,46937,46949,46953,46957,46969,46977,46997,47001,47005,47009,47013,47017,47021,47035,47043,47051,47063,47077,47085,47089,47097,47107,47117,47127,47137,47147,47153,47157,47161,47173,47193,47201],{"__ignoreMap":18},[96,45828,45829,45831],{"class":98,"line":99},[96,45830,30371],{"class":102},[96,45832,30374],{"class":106},[96,45834,45835,45837,45839,45841],{"class":98,"line":19},[96,45836,30716],{"class":102},[96,45838,30719],{"class":106},[96,45840,30371],{"class":102},[96,45842,30724],{"class":106},[96,45844,45845,45847,45849,45851],{"class":98,"line":1162},[96,45846,30716],{"class":102},[96,45848,30736],{"class":106},[96,45850,30371],{"class":102},[96,45852,30741],{"class":106},[96,45854,45855],{"class":98,"line":1177},[96,45856,2383],{"emptyLinePlaceholder":23},[96,45858,45859,45861,45863,45865,45867,45869,45871],{"class":98,"line":1183},[96,45860,14678],{"class":102},[96,45862,41472],{"class":1946},[96,45864,107],{"class":106},[96,45866,30757],{"class":1946},[96,45868,665],{"class":106},[96,45870,30762],{"class":1946},[96,45872,30765],{"class":106},[96,45874,45875,45877,45879],{"class":98,"line":1197},[96,45876,30780],{"class":102},[96,45878,30783],{"class":155},[96,45880,41491],{"class":106},[96,45882,45883,45885,45887,45889,45891,45893],{"class":98,"line":1203},[96,45884,30796],{"class":155},[96,45886,41498],{"class":106},[96,45888,30802],{"class":155},[96,45890,30805],{"class":106},[96,45892,30808],{"class":155},[96,45894,1959],{"class":106},[96,45896,45897,45899,45901,45903],{"class":98,"line":1294},[96,45898,30824],{"class":155},[96,45900,34750],{"class":106},[96,45902,152],{"class":102},[96,45904,34755],{"class":106},[96,45906,45907],{"class":98,"line":1300},[96,45908,41521],{"class":165},[96,45910,45911,45913,45915,45917,45919,45921,45923,45925,45927,45929,45931,45933,45935,45937],{"class":98,"line":1312},[96,45912,30824],{"class":155},[96,45914,41528],{"class":106},[96,45916,152],{"class":102},[96,45918,30832],{"class":106},[96,45920,30835],{"class":5200},[96,45922,152],{"class":102},[96,45924,41539],{"class":106},[96,45926,30844],{"class":5200},[96,45928,152],{"class":102},[96,45930,41546],{"class":106},[96,45932,30853],{"class":5200},[96,45934,152],{"class":102},[96,45936,324],{"class":155},[96,45938,113],{"class":106},[96,45940,45941],{"class":98,"line":1595},[96,45942,41559],{"class":165},[96,45944,45945,45947,45949,45951,45953,45955,45957,45959,45961,45963,45965,45967,45969,45971,45973,45975],{"class":98,"line":1600},[96,45946,30824],{"class":155},[96,45948,41566],{"class":106},[96,45950,152],{"class":102},[96,45952,30832],{"class":106},[96,45954,30835],{"class":5200},[96,45956,152],{"class":102},[96,45958,41539],{"class":106},[96,45960,30844],{"class":5200},[96,45962,152],{"class":102},[96,45964,41583],{"class":106},[96,45966,298],{"class":155},[96,45968,41588],{"class":106},[96,45970,30853],{"class":5200},[96,45972,152],{"class":102},[96,45974,324],{"class":155},[96,45976,113],{"class":106},[96,45978,45979,45981,45983,45985,45987,45989,45991,45993,45995,45997,45999,46001,46003,46005,46007,46009,46011,46013,46015,46017,46019,46021],{"class":98,"line":1606},[96,45980,30824],{"class":155},[96,45982,41603],{"class":106},[96,45984,152],{"class":102},[96,45986,30832],{"class":106},[96,45988,30835],{"class":5200},[96,45990,152],{"class":102},[96,45992,41583],{"class":106},[96,45994,298],{"class":155},[96,45996,41588],{"class":106},[96,45998,30844],{"class":5200},[96,46000,152],{"class":102},[96,46002,41583],{"class":106},[96,46004,324],{"class":155},[96,46006,41588],{"class":106},[96,46008,30853],{"class":5200},[96,46010,152],{"class":102},[96,46012,178],{"class":155},[96,46014,485],{"class":106},[96,46016,30862],{"class":5200},[96,46018,152],{"class":102},[96,46020,324],{"class":155},[96,46022,113],{"class":106},[96,46024,46025],{"class":98,"line":1611},[96,46026,41648],{"class":165},[96,46028,46029,46031,46033,46035,46037,46039,46041,46043,46045,46047,46049,46051,46053,46055,46057,46059],{"class":98,"line":1625},[96,46030,30824],{"class":155},[96,46032,41655],{"class":106},[96,46034,152],{"class":102},[96,46036,30832],{"class":106},[96,46038,30835],{"class":5200},[96,46040,152],{"class":102},[96,46042,41539],{"class":106},[96,46044,30844],{"class":5200},[96,46046,152],{"class":102},[96,46048,41672],{"class":106},[96,46050,298],{"class":155},[96,46052,41588],{"class":106},[96,46054,30853],{"class":5200},[96,46056,152],{"class":102},[96,46058,324],{"class":155},[96,46060,113],{"class":106},[96,46062,46063,46065,46067,46069,46071,46073,46075,46077,46079,46081,46083,46085,46087,46089,46091,46093,46095,46097,46099,46101,46103,46105],{"class":98,"line":1630},[96,46064,30824],{"class":155},[96,46066,41691],{"class":106},[96,46068,152],{"class":102},[96,46070,30832],{"class":106},[96,46072,30835],{"class":5200},[96,46074,152],{"class":102},[96,46076,41672],{"class":106},[96,46078,298],{"class":155},[96,46080,41588],{"class":106},[96,46082,30844],{"class":5200},[96,46084,152],{"class":102},[96,46086,41672],{"class":106},[96,46088,324],{"class":155},[96,46090,41588],{"class":106},[96,46092,30853],{"class":5200},[96,46094,152],{"class":102},[96,46096,426],{"class":155},[96,46098,485],{"class":106},[96,46100,30862],{"class":5200},[96,46102,152],{"class":102},[96,46104,184],{"class":155},[96,46106,113],{"class":106},[96,46108,46109],{"class":98,"line":1636},[96,46110,41736],{"class":165},[96,46112,46113],{"class":98,"line":1657},[96,46114,41741],{"class":165},[96,46116,46117,46119,46121,46123,46125,46127,46129,46131,46133,46135,46137,46139,46141,46143,46145,46147],{"class":98,"line":1662},[96,46118,30824],{"class":155},[96,46120,41748],{"class":106},[96,46122,152],{"class":102},[96,46124,34808],{"class":106},[96,46126,30853],{"class":5200},[96,46128,152],{"class":102},[96,46130,178],{"class":155},[96,46132,485],{"class":106},[96,46134,30908],{"class":5200},[96,46136,152],{"class":102},[96,46138,324],{"class":155},[96,46140,485],{"class":106},[96,46142,30862],{"class":5200},[96,46144,152],{"class":102},[96,46146,324],{"class":155},[96,46148,113],{"class":106},[96,46150,46151,46153,46155,46157,46159,46161,46163,46165,46167,46169,46171,46173,46175,46177],{"class":98,"line":1676},[96,46152,30824],{"class":155},[96,46154,41783],{"class":106},[96,46156,152],{"class":102},[96,46158,30832],{"class":106},[96,46160,30835],{"class":5200},[96,46162,152],{"class":102},[96,46164,41539],{"class":106},[96,46166,30844],{"class":5200},[96,46168,152],{"class":102},[96,46170,41800],{"class":106},[96,46172,30853],{"class":5200},[96,46174,152],{"class":102},[96,46176,324],{"class":155},[96,46178,113],{"class":106},[96,46180,46181],{"class":98,"line":1681},[96,46182,2383],{"emptyLinePlaceholder":23},[96,46184,46185,46187,46189],{"class":98,"line":1710},[96,46186,30780],{"class":102},[96,46188,31072],{"class":1946},[96,46190,31075],{"class":106},[96,46192,46193,46195,46197,46199,46201,46203],{"class":98,"line":1715},[96,46194,41825],{"class":106},[96,46196,152],{"class":102},[96,46198,30802],{"class":155},[96,46200,35163],{"class":106},[96,46202,30802],{"class":155},[96,46204,41836],{"class":106},[96,46206,46207,46209,46211,46213,46215,46217,46219,46221,46223,46225],{"class":98,"line":1732},[96,46208,7069],{"class":106},[96,46210,152],{"class":102},[96,46212,30802],{"class":155},[96,46214,35163],{"class":106},[96,46216,30802],{"class":155},[96,46218,41851],{"class":106},[96,46220,30802],{"class":155},[96,46222,35163],{"class":106},[96,46224,30802],{"class":155},[96,46226,41860],{"class":106},[96,46228,46229,46231,46233,46235,46237,46239,46241,46243,46245,46247],{"class":98,"line":1737},[96,46230,41865],{"class":106},[96,46232,152],{"class":102},[96,46234,30802],{"class":155},[96,46236,35163],{"class":106},[96,46238,30802],{"class":155},[96,46240,41876],{"class":106},[96,46242,30802],{"class":155},[96,46244,35163],{"class":106},[96,46246,30802],{"class":155},[96,46248,41885],{"class":106},[96,46250,46251,46253,46255,46257,46259,46261,46263,46265],{"class":98,"line":1742},[96,46252,41890],{"class":106},[96,46254,152],{"class":102},[96,46256,30802],{"class":155},[96,46258,35163],{"class":106},[96,46260,30802],{"class":155},[96,46262,41901],{"class":106},[96,46264,30802],{"class":155},[96,46266,41906],{"class":106},[96,46268,46269],{"class":98,"line":1747},[96,46270,41911],{"class":165},[96,46272,46273,46275,46277,46279,46281,46283],{"class":98,"line":1761},[96,46274,14736],{"class":102},[96,46276,41918],{"class":106},[96,46278,32664],{"class":5200},[96,46280,152],{"class":102},[96,46282,324],{"class":155},[96,46284,113],{"class":106},[96,46286,46287],{"class":98,"line":1766},[96,46288,2383],{"emptyLinePlaceholder":23},[96,46290,46291],{"class":98,"line":2560},[96,46292,41939],{"class":165},[96,46294,46295,46297,46299,46301,46303,46305,46307],{"class":98,"line":2574},[96,46296,14678],{"class":102},[96,46298,41946],{"class":1946},[96,46300,107],{"class":106},[96,46302,30757],{"class":1946},[96,46304,665],{"class":106},[96,46306,30762],{"class":1946},[96,46308,30765],{"class":106},[96,46310,46311],{"class":98,"line":2582},[96,46312,41961],{"class":165},[96,46314,46315,46317,46319],{"class":98,"line":2587},[96,46316,30780],{"class":102},[96,46318,30783],{"class":155},[96,46320,41970],{"class":106},[96,46322,46323,46325,46327,46329,46331,46333],{"class":98,"line":2593},[96,46324,30796],{"class":155},[96,46326,41977],{"class":106},[96,46328,30802],{"class":155},[96,46330,30805],{"class":106},[96,46332,30808],{"class":155},[96,46334,1959],{"class":106},[96,46336,46337,46339,46341,46343],{"class":98,"line":2599},[96,46338,30824],{"class":155},[96,46340,41992],{"class":106},[96,46342,152],{"class":102},[96,46344,37988],{"class":106},[96,46346,46347,46349,46351,46353,46355,46357,46359,46361,46363,46365,46367,46369,46371,46373,46375,46377,46379,46381,46383,46385,46387],{"class":98,"line":2604},[96,46348,37993],{"class":106},[96,46350,30835],{"class":5200},[96,46352,152],{"class":102},[96,46354,178],{"class":155},[96,46356,485],{"class":106},[96,46358,30844],{"class":5200},[96,46360,152],{"class":102},[96,46362,310],{"class":155},[96,46364,485],{"class":106},[96,46366,30853],{"class":5200},[96,46368,152],{"class":102},[96,46370,476],{"class":155},[96,46372,485],{"class":106},[96,46374,30908],{"class":5200},[96,46376,152],{"class":102},[96,46378,184],{"class":155},[96,46380,485],{"class":106},[96,46382,30862],{"class":5200},[96,46384,152],{"class":102},[96,46386,178],{"class":155},[96,46388,38026],{"class":106},[96,46390,46391],{"class":98,"line":7932},[96,46392,38031],{"class":106},[96,46394,46395,46397,46399,46401,46403,46405,46407,46409,46411,46413,46415,46417,46419],{"class":98,"line":7956},[96,46396,38076],{"class":106},[96,46398,30853],{"class":5200},[96,46400,152],{"class":102},[96,46402,178],{"class":155},[96,46404,485],{"class":106},[96,46406,30908],{"class":5200},[96,46408,152],{"class":102},[96,46410,184],{"class":155},[96,46412,485],{"class":106},[96,46414,30862],{"class":5200},[96,46416,152],{"class":102},[96,46418,324],{"class":155},[96,46420,113],{"class":106},[96,46422,46423],{"class":98,"line":7961},[96,46424,38105],{"class":106},[96,46426,46427,46429,46431,46433],{"class":98,"line":7967},[96,46428,30824],{"class":155},[96,46430,42083],{"class":106},[96,46432,152],{"class":102},[96,46434,37988],{"class":106},[96,46436,46437,46439,46441,46443,46445,46447,46449,46451,46453,46455,46457,46459,46461],{"class":98,"line":7994},[96,46438,37993],{"class":106},[96,46440,30835],{"class":5200},[96,46442,152],{"class":102},[96,46444,310],{"class":155},[96,46446,485],{"class":106},[96,46448,30844],{"class":5200},[96,46450,152],{"class":102},[96,46452,310],{"class":155},[96,46454,485],{"class":106},[96,46456,30853],{"class":5200},[96,46458,152],{"class":102},[96,46460,324],{"class":155},[96,46462,38026],{"class":106},[96,46464,46465],{"class":98,"line":7999},[96,46466,38031],{"class":106},[96,46468,46469,46471,46473,46475,46477,46479,46481,46483,46485,46487,46489,46491,46493,46495,46497,46499,46501],{"class":98,"line":8005},[96,46470,37993],{"class":106},[96,46472,30835],{"class":5200},[96,46474,152],{"class":102},[96,46476,310],{"class":155},[96,46478,485],{"class":106},[96,46480,30844],{"class":5200},[96,46482,152],{"class":102},[96,46484,42138],{"class":155},[96,46486,485],{"class":106},[96,46488,30853],{"class":5200},[96,46490,152],{"class":102},[96,46492,178],{"class":155},[96,46494,485],{"class":106},[96,46496,30862],{"class":5200},[96,46498,152],{"class":102},[96,46500,324],{"class":155},[96,46502,38026],{"class":106},[96,46504,46505],{"class":98,"line":8017},[96,46506,38031],{"class":106},[96,46508,46509,46511,46513,46515,46517,46519,46521,46523,46525,46527,46529,46531,46533],{"class":98,"line":8029},[96,46510,38076],{"class":106},[96,46512,30853],{"class":5200},[96,46514,152],{"class":102},[96,46516,178],{"class":155},[96,46518,485],{"class":106},[96,46520,30908],{"class":5200},[96,46522,152],{"class":102},[96,46524,184],{"class":155},[96,46526,485],{"class":106},[96,46528,30862],{"class":5200},[96,46530,152],{"class":102},[96,46532,324],{"class":155},[96,46534,113],{"class":106},[96,46536,46537],{"class":98,"line":8041},[96,46538,38105],{"class":106},[96,46540,46541,46543,46545,46547],{"class":98,"line":9700},[96,46542,30824],{"class":155},[96,46544,42199],{"class":106},[96,46546,152],{"class":102},[96,46548,37988],{"class":106},[96,46550,46551,46553,46555,46557,46559,46561,46563,46565,46567,46569,46571,46573,46575,46577,46579],{"class":98,"line":9725},[96,46552,42208],{"class":106},[96,46554,42138],{"class":155},[96,46556,485],{"class":106},[96,46558,310],{"class":155},[96,46560,42217],{"class":106},[96,46562,316],{"class":155},[96,46564,485],{"class":106},[96,46566,32049],{"class":155},[96,46568,42226],{"class":106},[96,46570,708],{"class":155},[96,46572,485],{"class":106},[96,46574,304],{"class":155},[96,46576,42235],{"class":106},[96,46578,304],{"class":155},[96,46580,38026],{"class":106},[96,46582,46583,46585,46587,46589,46591,46593,46595,46597,46599,46601,46603,46605,46607,46609,46611],{"class":98,"line":9748},[96,46584,42208],{"class":106},[96,46586,34849],{"class":155},[96,46588,485],{"class":106},[96,46590,32049],{"class":155},[96,46592,42217],{"class":106},[96,46594,32049],{"class":155},[96,46596,485],{"class":106},[96,46598,42138],{"class":155},[96,46600,42226],{"class":106},[96,46602,304],{"class":155},[96,46604,485],{"class":106},[96,46606,316],{"class":155},[96,46608,42235],{"class":106},[96,46610,310],{"class":155},[96,46612,38026],{"class":106},[96,46614,46615,46617,46619,46621,46623,46625,46627,46629,46631,46633,46635,46637,46639],{"class":98,"line":9772},[96,46616,38076],{"class":106},[96,46618,30853],{"class":5200},[96,46620,152],{"class":102},[96,46622,178],{"class":155},[96,46624,485],{"class":106},[96,46626,30908],{"class":5200},[96,46628,152],{"class":102},[96,46630,184],{"class":155},[96,46632,485],{"class":106},[96,46634,30862],{"class":5200},[96,46636,152],{"class":102},[96,46638,324],{"class":155},[96,46640,113],{"class":106},[96,46642,46643],{"class":98,"line":9777},[96,46644,38105],{"class":106},[96,46646,46647,46649,46651,46653],{"class":98,"line":9782},[96,46648,30824],{"class":155},[96,46650,42310],{"class":106},[96,46652,152],{"class":102},[96,46654,37988],{"class":106},[96,46656,46657,46659,46661,46663,46665,46667,46669,46671,46673,46675,46677,46679,46681,46683,46685],{"class":98,"line":9787},[96,46658,42208],{"class":106},[96,46660,42321],{"class":155},[96,46662,485],{"class":106},[96,46664,42138],{"class":155},[96,46666,42217],{"class":106},[96,46668,316],{"class":155},[96,46670,485],{"class":106},[96,46672,42334],{"class":155},[96,46674,42226],{"class":106},[96,46676,708],{"class":155},[96,46678,485],{"class":106},[96,46680,714],{"class":155},[96,46682,42235],{"class":106},[96,46684,310],{"class":155},[96,46686,38026],{"class":106},[96,46688,46689,46691,46693,46695,46697,46699,46701,46703,46705,46707,46709,46711,46713,46715,46717],{"class":98,"line":9796},[96,46690,42208],{"class":106},[96,46692,38436],{"class":155},[96,46694,485],{"class":106},[96,46696,21032],{"class":155},[96,46698,42217],{"class":106},[96,46700,725],{"class":155},[96,46702,485],{"class":106},[96,46704,31480],{"class":155},[96,46706,42226],{"class":106},[96,46708,907],{"class":155},[96,46710,485],{"class":106},[96,46712,310],{"class":155},[96,46714,42235],{"class":106},[96,46716,310],{"class":155},[96,46718,38026],{"class":106},[96,46720,46721,46723,46725,46727,46729,46731,46733,46735,46737,46739,46741,46743,46745,46747,46749],{"class":98,"line":9801},[96,46722,42208],{"class":106},[96,46724,38436],{"class":155},[96,46726,485],{"class":106},[96,46728,32049],{"class":155},[96,46730,42217],{"class":106},[96,46732,32049],{"class":155},[96,46734,485],{"class":106},[96,46736,34849],{"class":155},[96,46738,42226],{"class":106},[96,46740,907],{"class":155},[96,46742,485],{"class":106},[96,46744,310],{"class":155},[96,46746,42235],{"class":106},[96,46748,310],{"class":155},[96,46750,38026],{"class":106},[96,46752,46753,46755,46757,46759,46761,46763,46765,46767,46769,46771,46773,46775,46777,46779,46781],{"class":98,"line":9807},[96,46754,42208],{"class":106},[96,46756,38436],{"class":155},[96,46758,485],{"class":106},[96,46760,725],{"class":155},[96,46762,42217],{"class":106},[96,46764,32049],{"class":155},[96,46766,485],{"class":106},[96,46768,42431],{"class":155},[96,46770,42226],{"class":106},[96,46772,304],{"class":155},[96,46774,485],{"class":106},[96,46776,310],{"class":155},[96,46778,42235],{"class":106},[96,46780,310],{"class":155},[96,46782,38026],{"class":106},[96,46784,46785,46787,46789,46791,46793,46795,46797,46799,46801,46803,46805,46807,46809,46811,46813],{"class":98,"line":9828},[96,46786,42208],{"class":106},[96,46788,42452],{"class":155},[96,46790,485],{"class":106},[96,46792,34849],{"class":155},[96,46794,42217],{"class":106},[96,46796,21032],{"class":155},[96,46798,485],{"class":106},[96,46800,42465],{"class":155},[96,46802,42226],{"class":106},[96,46804,304],{"class":155},[96,46806,485],{"class":106},[96,46808,32049],{"class":155},[96,46810,42235],{"class":106},[96,46812,32049],{"class":155},[96,46814,38026],{"class":106},[96,46816,46817,46819,46821,46823,46825,46827,46829,46831,46833,46835,46837,46839,46841],{"class":98,"line":9834},[96,46818,38076],{"class":106},[96,46820,30853],{"class":5200},[96,46822,152],{"class":102},[96,46824,178],{"class":155},[96,46826,485],{"class":106},[96,46828,30908],{"class":5200},[96,46830,152],{"class":102},[96,46832,184],{"class":155},[96,46834,485],{"class":106},[96,46836,30862],{"class":5200},[96,46838,152],{"class":102},[96,46840,324],{"class":155},[96,46842,113],{"class":106},[96,46844,46845],{"class":98,"line":9848},[96,46846,38105],{"class":106},[96,46848,46849,46851,46853,46855],{"class":98,"line":9854},[96,46850,30824],{"class":155},[96,46852,42518],{"class":106},[96,46854,152],{"class":102},[96,46856,37988],{"class":106},[96,46858,46859,46861,46863,46865,46867,46869,46871,46873,46875,46877,46879,46881,46883,46885,46887],{"class":98,"line":9881},[96,46860,42208],{"class":106},[96,46862,42529],{"class":155},[96,46864,485],{"class":106},[96,46866,34849],{"class":155},[96,46868,42217],{"class":106},[96,46870,21032],{"class":155},[96,46872,485],{"class":106},[96,46874,42465],{"class":155},[96,46876,42226],{"class":106},[96,46878,304],{"class":155},[96,46880,485],{"class":106},[96,46882,32049],{"class":155},[96,46884,42235],{"class":106},[96,46886,32049],{"class":155},[96,46888,38026],{"class":106},[96,46890,46891,46893,46895,46897,46899,46901,46903,46905,46907,46909,46911,46913,46915,46917,46919],{"class":98,"line":9890},[96,46892,42208],{"class":106},[96,46894,42529],{"class":155},[96,46896,485],{"class":106},[96,46898,34919],{"class":155},[96,46900,42217],{"class":106},[96,46902,42138],{"class":155},[96,46904,485],{"class":106},[96,46906,34919],{"class":155},[96,46908,42226],{"class":106},[96,46910,714],{"class":155},[96,46912,485],{"class":106},[96,46914,32049],{"class":155},[96,46916,42235],{"class":106},[96,46918,32049],{"class":155},[96,46920,38026],{"class":106},[96,46922,46923,46925,46927,46929,46931],{"class":98,"line":9896},[96,46924,42592],{"class":106},[96,46926,324],{"class":155},[96,46928,485],{"class":106},[96,46930,324],{"class":155},[96,46932,42601],{"class":106},[96,46934,46935],{"class":98,"line":9904},[96,46936,38769],{"class":106},[96,46938,46939,46941,46943,46945,46947],{"class":98,"line":9909},[96,46940,38774],{"class":106},[96,46942,42612],{"class":155},[96,46944,485],{"class":106},[96,46946,184],{"class":155},[96,46948,113],{"class":106},[96,46950,46951],{"class":98,"line":16588},[96,46952,38105],{"class":106},[96,46954,46955],{"class":98,"line":16594},[96,46956,42627],{"class":165},[96,46958,46959,46961,46963,46965,46967],{"class":98,"line":16617},[96,46960,3386],{"class":102},[96,46962,38847],{"class":106},[96,46964,26022],{"class":102},[96,46966,38852],{"class":155},[96,46968,38855],{"class":106},[96,46970,46971,46973,46975],{"class":98,"line":16623},[96,46972,4625],{"class":102},[96,46974,38867],{"class":155},[96,46976,38870],{"class":106},[96,46978,46979,46981,46983,46985,46987,46989,46991,46993,46995],{"class":98,"line":16646},[96,46980,38880],{"class":106},[96,46982,42654],{"class":5200},[96,46984,152],{"class":102},[96,46986,42659],{"class":211},[96,46988,485],{"class":106},[96,46990,38883],{"class":5200},[96,46992,152],{"class":102},[96,46994,38888],{"class":211},[96,46996,113],{"class":106},[96,46998,46999],{"class":98,"line":16660},[96,47000,42674],{"class":165},[96,47002,47003],{"class":98,"line":16680},[96,47004,42679],{"class":165},[96,47006,47007],{"class":98,"line":16686},[96,47008,42684],{"class":165},[96,47010,47011],{"class":98,"line":16697},[96,47012,42689],{"class":165},[96,47014,47015],{"class":98,"line":16720},[96,47016,42694],{"class":165},[96,47018,47019],{"class":98,"line":16742},[96,47020,42699],{"class":165},[96,47022,47023,47025,47027,47029,47031,47033],{"class":98,"line":16747},[96,47024,38900],{"class":102},[96,47026,38903],{"class":106},[96,47028,38906],{"class":102},[96,47030,38909],{"class":102},[96,47032,38912],{"class":155},[96,47034,3722],{"class":106},[96,47036,47037,47039,47041],{"class":98,"line":16753},[96,47038,38924],{"class":106},[96,47040,298],{"class":155},[96,47042,113],{"class":106},[96,47044,47045,47047,47049],{"class":98,"line":16767},[96,47046,42726],{"class":102},[96,47048,38867],{"class":155},[96,47050,38943],{"class":106},[96,47052,47053,47055,47057,47059,47061],{"class":98,"line":16780},[96,47054,42735],{"class":106},[96,47056,298],{"class":155},[96,47058,485],{"class":106},[96,47060,38965],{"class":155},[96,47062,113],{"class":106},[96,47064,47065,47067,47069,47071,47073,47075],{"class":98,"line":16785},[96,47066,42748],{"class":102},[96,47068,38903],{"class":106},[96,47070,38906],{"class":102},[96,47072,38909],{"class":102},[96,47074,38912],{"class":155},[96,47076,3722],{"class":106},[96,47078,47079,47081,47083],{"class":98,"line":16799},[96,47080,42763],{"class":106},[96,47082,298],{"class":155},[96,47084,113],{"class":106},[96,47086,47087],{"class":98,"line":16804},[96,47088,35144],{"class":165},[96,47090,47091,47093,47095],{"class":98,"line":16810},[96,47092,30780],{"class":102},[96,47094,31072],{"class":1946},[96,47096,31075],{"class":106},[96,47098,47099,47101,47103,47105],{"class":98,"line":16815},[96,47100,31080],{"class":106},[96,47102,152],{"class":102},[96,47104,30802],{"class":155},[96,47106,42790],{"class":106},[96,47108,47109,47111,47113,47115],{"class":98,"line":16829},[96,47110,31080],{"class":106},[96,47112,152],{"class":102},[96,47114,30802],{"class":155},[96,47116,42801],{"class":106},[96,47118,47119,47121,47123,47125],{"class":98,"line":16834},[96,47120,31080],{"class":106},[96,47122,152],{"class":102},[96,47124,30802],{"class":155},[96,47126,42812],{"class":106},[96,47128,47129,47131,47133,47135],{"class":98,"line":16839},[96,47130,31080],{"class":106},[96,47132,152],{"class":102},[96,47134,30802],{"class":155},[96,47136,42823],{"class":106},[96,47138,47139,47141,47143,47145],{"class":98,"line":16853},[96,47140,31080],{"class":106},[96,47142,152],{"class":102},[96,47144,30802],{"class":155},[96,47146,42834],{"class":106},[96,47148,47149,47151],{"class":98,"line":16865},[96,47150,14736],{"class":102},[96,47152,31188],{"class":106},[96,47154,47155],{"class":98,"line":16870},[96,47156,2383],{"emptyLinePlaceholder":23},[96,47158,47159],{"class":98,"line":16883},[96,47160,42849],{"class":165},[96,47162,47163,47165,47167,47169,47171],{"class":98,"line":16888},[96,47164,1514],{"class":102},[96,47166,31199],{"class":155},[96,47168,2932],{"class":102},[96,47170,31204],{"class":211},[96,47172,3722],{"class":106},[96,47174,47175,47177,47179,47181,47183,47185,47187,47189,47191],{"class":98,"line":16893},[96,47176,31216],{"class":106},[96,47178,152],{"class":102},[96,47180,30430],{"class":106},[96,47182,31223],{"class":211},[96,47184,1687],{"class":102},[96,47186,31228],{"class":106},[96,47188,1684],{"class":102},[96,47190,30455],{"class":211},[96,47192,113],{"class":106},[96,47194,47195,47197,47199],{"class":98,"line":16898},[96,47196,31268],{"class":106},[96,47198,152],{"class":102},[96,47200,42890],{"class":106},[96,47202,47203,47205,47207,47209,47211,47213,47215,47217],{"class":98,"line":16911},[96,47204,31278],{"class":155},[96,47206,31281],{"class":106},[96,47208,324],{"class":155},[96,47210,485],{"class":106},[96,47212,31480],{"class":155},[96,47214,485],{"class":106},[96,47216,31480],{"class":155},[96,47218,31294],{"class":106},[21982,47220,47222],{"id":47221},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[14,47224,47225],{},"计算图片的均值与方差，用于训练中归一化处理操作",[87,47227,47229],{"className":30357,"code":47228,"language":30359,"meta":18,"style":18},"# 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",[93,47230,47231,47236,47249,47254,47260,47265,47275,47279,47284,47294,47298,47303,47313,47330,47334,47339,47351,47363,47394,47403,47413,47423,47427,47432,47447,47451,47456,47461,47466,47476,47481,47506,47510,47515,47530,47534,47547,47551,47556,47561,47566,47571,47576,47586,47596,47619,47627,47635,47643,47647,47659,47663,47668,47672,47676,47683,47703,47727,47734,47748,47753,47758,47762,47776,47780,47792],{"__ignoreMap":18},[96,47232,47233],{"class":98,"line":99},[96,47234,47235],{"class":165},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[96,47237,47238,47240,47243,47246],{"class":98,"line":19},[96,47239,30716],{"class":102},[96,47241,47242],{"class":155}," PIL",[96,47244,47245],{"class":102}," import",[96,47247,47248],{"class":106}," Image\n",[96,47250,47251],{"class":98,"line":1162},[96,47252,47253],{"class":165},"# os 用来处理文件夹和文件路径\n",[96,47255,47256,47258],{"class":98,"line":1177},[96,47257,30371],{"class":102},[96,47259,45284],{"class":106},[96,47261,47262],{"class":98,"line":1183},[96,47263,47264],{"class":165},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[96,47266,47267,47269,47271,47273],{"class":98,"line":1197},[96,47268,30371],{"class":102},[96,47270,31359],{"class":106},[96,47272,31362],{"class":102},[96,47274,31365],{"class":106},[96,47276,47277],{"class":98,"line":1203},[96,47278,2383],{"emptyLinePlaceholder":23},[96,47280,47281],{"class":98,"line":1294},[96,47282,47283],{"class":165},"# 文件夹路径，包含所有图片文件\n",[96,47285,47286,47289,47291],{"class":98,"line":1300},[96,47287,47288],{"class":106},"folder_path ",[96,47290,152],{"class":102},[96,47292,47293],{"class":211}," 'data_cat_dog'\n",[96,47295,47296],{"class":98,"line":1312},[96,47297,2383],{"emptyLinePlaceholder":23},[96,47299,47300],{"class":98,"line":1595},[96,47301,47302],{"class":165},"# 初始化累积变量\n",[96,47304,47305,47308,47310],{"class":98,"line":1600},[96,47306,47307],{"class":106},"total_pixels ",[96,47309,152],{"class":102},[96,47311,47312],{"class":155}," 0\n",[96,47314,47315,47318,47320,47323,47325,47327],{"class":98,"line":1606},[96,47316,47317],{"class":106},"sum_normalized_pixel_values ",[96,47319,152],{"class":102},[96,47321,47322],{"class":106}," np.zeros(",[96,47324,178],{"class":155},[96,47326,45787],{"class":106},[96,47328,47329],{"class":165},"# 如果是RGB图像，需要三个通道的均值和方差\n",[96,47331,47332],{"class":98,"line":1611},[96,47333,2383],{"emptyLinePlaceholder":23},[96,47335,47336],{"class":98,"line":1625},[96,47337,47338],{"class":165},"# 遍历文件夹中的图片文件\n",[96,47340,47341,47343,47346,47348],{"class":98,"line":1630},[96,47342,3008],{"class":102},[96,47344,47345],{"class":106}," root, dirs, files ",[96,47347,26022],{"class":102},[96,47349,47350],{"class":106}," os.walk(folder_path):\n",[96,47352,47353,47355,47358,47360],{"class":98,"line":1636},[96,47354,3184],{"class":102},[96,47356,47357],{"class":106}," filename ",[96,47359,26022],{"class":102},[96,47361,47362],{"class":106}," files:\n",[96,47364,47365,47367,47370,47373,47375,47378,47380,47383,47385,47388,47391],{"class":98,"line":1657},[96,47366,2480],{"class":102},[96,47368,47369],{"class":106}," filename.endswith((",[96,47371,47372],{"class":211},"'.jpg'",[96,47374,12419],{"class":106},[96,47376,47377],{"class":211},"'.jpeg'",[96,47379,12419],{"class":106},[96,47381,47382],{"class":211},"'.png'",[96,47384,12419],{"class":106},[96,47386,47387],{"class":211},"'.bmp'",[96,47389,47390],{"class":106},")):  ",[96,47392,47393],{"class":165},"# 可根据实际情况添加其他格式\n",[96,47395,47396,47398,47400],{"class":98,"line":1662},[96,47397,45652],{"class":106},[96,47399,152],{"class":102},[96,47401,47402],{"class":106}," os.path.join(root, filename)\n",[96,47404,47405,47408,47410],{"class":98,"line":1676},[96,47406,47407],{"class":106},"            image ",[96,47409,152],{"class":102},[96,47411,47412],{"class":106}," Image.open(image_path)\n",[96,47414,47415,47418,47420],{"class":98,"line":1681},[96,47416,47417],{"class":106},"            image_array ",[96,47419,152],{"class":102},[96,47421,47422],{"class":106}," np.array(image)\n",[96,47424,47425],{"class":98,"line":1710},[96,47426,2383],{"emptyLinePlaceholder":23},[96,47428,47429],{"class":98,"line":1715},[96,47430,47431],{"class":165},"            # 归一化像素值到0-1之间\n",[96,47433,47434,47437,47439,47442,47444],{"class":98,"line":1732},[96,47435,47436],{"class":106},"            normalized_image_array ",[96,47438,152],{"class":102},[96,47440,47441],{"class":106}," image_array ",[96,47443,691],{"class":102},[96,47445,47446],{"class":155}," 255.0\n",[96,47448,47449],{"class":98,"line":1737},[96,47450,2383],{"emptyLinePlaceholder":23},[96,47452,47453],{"class":98,"line":1742},[96,47454,47455],{"class":165},"            # print(image_path)\n",[96,47457,47458],{"class":98,"line":1747},[96,47459,47460],{"class":165},"            # print(normalized_image_array.shape)\n",[96,47462,47463],{"class":98,"line":1761},[96,47464,47465],{"class":165},"            # 累积归一化后的像素值和像素数量\n",[96,47467,47468,47471,47473],{"class":98,"line":1766},[96,47469,47470],{"class":106},"            total_pixels ",[96,47472,9461],{"class":102},[96,47474,47475],{"class":106}," normalized_image_array.size\n",[96,47477,47478],{"class":98,"line":2560},[96,47479,47480],{"class":165},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[96,47482,47483,47486,47488,47491,47494,47496,47498,47500,47502,47504],{"class":98,"line":2574},[96,47484,47485],{"class":106},"            sum_normalized_pixel_values ",[96,47487,9461],{"class":102},[96,47489,47490],{"class":106}," np.sum(normalized_image_array, ",[96,47492,47493],{"class":5200},"axis",[96,47495,152],{"class":102},[96,47497,107],{"class":106},[96,47499,298],{"class":155},[96,47501,12419],{"class":106},[96,47503,324],{"class":155},[96,47505,30476],{"class":106},[96,47507,47508],{"class":98,"line":2582},[96,47509,2383],{"emptyLinePlaceholder":23},[96,47511,47512],{"class":98,"line":2587},[96,47513,47514],{"class":165},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[96,47516,47517,47520,47522,47525,47527],{"class":98,"line":2593},[96,47518,47519],{"class":106},"mean ",[96,47521,152],{"class":102},[96,47523,47524],{"class":106}," sum_normalized_pixel_values ",[96,47526,691],{"class":102},[96,47528,47529],{"class":106}," total_pixels\n",[96,47531,47532],{"class":98,"line":2599},[96,47533,2383],{"emptyLinePlaceholder":23},[96,47535,47536,47539,47541,47543,47545],{"class":98,"line":2604},[96,47537,47538],{"class":106},"sum_squared_diff ",[96,47540,152],{"class":102},[96,47542,47322],{"class":106},[96,47544,178],{"class":155},[96,47546,113],{"class":106},[96,47548,47549],{"class":98,"line":7932},[96,47550,2383],{"emptyLinePlaceholder":23},[96,47552,47553],{"class":98,"line":7956},[96,47554,47555],{"class":165},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[96,47557,47558],{"class":98,"line":7961},[96,47559,47560],{"class":165},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[96,47562,47563],{"class":98,"line":7967},[96,47564,47565],{"class":165},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[96,47567,47568],{"class":98,"line":7994},[96,47569,47570],{"class":165},"# Image.open(image_path)：打开图片\n",[96,47572,47573],{"class":98,"line":7999},[96,47574,47575],{"class":165},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[96,47577,47578,47580,47582,47584],{"class":98,"line":8005},[96,47579,3008],{"class":102},[96,47581,47345],{"class":106},[96,47583,26022],{"class":102},[96,47585,47350],{"class":106},[96,47587,47588,47590,47592,47594],{"class":98,"line":8017},[96,47589,3184],{"class":102},[96,47591,47357],{"class":106},[96,47593,26022],{"class":102},[96,47595,47362],{"class":106},[96,47597,47598,47600,47602,47604,47606,47608,47610,47612,47614,47616],{"class":98,"line":8029},[96,47599,2480],{"class":102},[96,47601,47369],{"class":106},[96,47603,47372],{"class":211},[96,47605,12419],{"class":106},[96,47607,47377],{"class":211},[96,47609,12419],{"class":106},[96,47611,47382],{"class":211},[96,47613,12419],{"class":106},[96,47615,47387],{"class":211},[96,47617,47618],{"class":106},")):\n",[96,47620,47621,47623,47625],{"class":98,"line":8041},[96,47622,45652],{"class":106},[96,47624,152],{"class":102},[96,47626,47402],{"class":106},[96,47628,47629,47631,47633],{"class":98,"line":9700},[96,47630,47407],{"class":106},[96,47632,152],{"class":102},[96,47634,47412],{"class":106},[96,47636,47637,47639,47641],{"class":98,"line":9725},[96,47638,47417],{"class":106},[96,47640,152],{"class":102},[96,47642,47422],{"class":106},[96,47644,47645],{"class":98,"line":9748},[96,47646,47431],{"class":165},[96,47648,47649,47651,47653,47655,47657],{"class":98,"line":9772},[96,47650,47436],{"class":106},[96,47652,152],{"class":102},[96,47654,47441],{"class":106},[96,47656,691],{"class":102},[96,47658,47446],{"class":155},[96,47660,47661],{"class":98,"line":9777},[96,47662,47460],{"class":165},[96,47664,47665],{"class":98,"line":9782},[96,47666,47667],{"class":165},"            # print(mean.shape)\n",[96,47669,47670],{"class":98,"line":9787},[96,47671,47455],{"class":165},[96,47673,47674],{"class":98,"line":9796},[96,47675,2383],{"emptyLinePlaceholder":23},[96,47677,47678,47681],{"class":98,"line":9801},[96,47679,47680],{"class":102},"            try",[96,47682,3722],{"class":106},[96,47684,47685,47688,47690,47693,47695,47698,47700],{"class":98,"line":9807},[96,47686,47687],{"class":106},"                diff ",[96,47689,152],{"class":102},[96,47691,47692],{"class":106}," (normalized_image_array ",[96,47694,639],{"class":102},[96,47696,47697],{"class":106}," mean) ",[96,47699,10645],{"class":102},[96,47701,47702],{"class":155}," 2\n",[96,47704,47705,47708,47710,47713,47715,47717,47719,47721,47723,47725],{"class":98,"line":9828},[96,47706,47707],{"class":106},"                sum_squared_diff ",[96,47709,9461],{"class":102},[96,47711,47712],{"class":106}," np.sum(diff, ",[96,47714,47493],{"class":5200},[96,47716,152],{"class":102},[96,47718,107],{"class":106},[96,47720,298],{"class":155},[96,47722,12419],{"class":106},[96,47724,324],{"class":155},[96,47726,30476],{"class":106},[96,47728,47729,47732],{"class":98,"line":9834},[96,47730,47731],{"class":102},"            except",[96,47733,3722],{"class":106},[96,47735,47736,47739,47741,47743,47746],{"class":98,"line":9848},[96,47737,47738],{"class":155},"                print",[96,47740,107],{"class":106},[96,47742,159],{"class":102},[96,47744,47745],{"class":211},"\"捕获到自定义异常\"",[96,47747,113],{"class":106},[96,47749,47750],{"class":98,"line":9854},[96,47751,47752],{"class":165},"            # diff = (normalized_image_array - mean) ** 2\n",[96,47754,47755],{"class":98,"line":9881},[96,47756,47757],{"class":165},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[96,47759,47760],{"class":98,"line":9890},[96,47761,2383],{"emptyLinePlaceholder":23},[96,47763,47764,47767,47769,47772,47774],{"class":98,"line":9896},[96,47765,47766],{"class":106},"variance ",[96,47768,152],{"class":102},[96,47770,47771],{"class":106}," sum_squared_diff ",[96,47773,691],{"class":102},[96,47775,47529],{"class":106},[96,47777,47778],{"class":98,"line":9904},[96,47779,2383],{"emptyLinePlaceholder":23},[96,47781,47782,47784,47786,47789],{"class":98,"line":9909},[96,47783,30394],{"class":155},[96,47785,107],{"class":106},[96,47787,47788],{"class":211},"\"Mean:\"",[96,47790,47791],{"class":106},", mean)\n",[96,47793,47794,47796,47798,47801],{"class":98,"line":16588},[96,47795,30394],{"class":155},[96,47797,107],{"class":106},[96,47799,47800],{"class":211},"\"Variance:\"",[96,47802,47803],{"class":106},", variance)\n",[87,47805,47807],{"className":30357,"code":47806,"language":30359,"meta":18,"style":18},"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",[93,47808,47809,47815,47821,47831,47837,47847,47861,47871,47881,47891,47895,47905,47915,47919,47923,47931,47936,47941,47960,47964,47969,47974,47979,47984,48025,48030,48040,48045,48058,48063,48068,48073,48078,48083,48087,48092,48097,48119,48123,48155,48169,48179,48189,48193,48203,48217,48227,48237,48247,48253,48257,48261,48265,48269,48273,48281,48301,48305,48309,48313,48317,48333,48337,48341,48349,48353,48357,48365,48369,48373,48377,48385,48389,48393,48397,48405,48409,48417,48421,48429,48433,48441,48445,48453,48457,48461,48469,48473,48477,48489,48513,48527,48531,48535,48539,48547,48551,48559,48563,48571,48575,48583,48587,48595,48599,48607,48611,48623,48627,48635,48639,48647,48651,48655,48659,48663,48671,48675,48691,48695,48703,48707,48711,48715,48719,48723,48727,48731,48747,48751,48763,48767,48779,48783,48795,48799,48807,48811,48819,48823,48827,48831,48837,48841,48849,48853,48869,48873,48881,48885,48901,48913,48917,48929,48933,48937,48945,48949,48953,48961,48965,48973,48977,48985,48989,48993,49035,49077,49081,49085,49101,49105,49121,49125,49129,49137,49141,49145,49157,49195,49199,49203,49211,49215,49229,49239,49245,49251,49257,49263,49267,49271,49277,49281,49285,49293,49297,49315,49319,49323,49327,49343,49347,49351,49355,49359,49363,49383,49403,49407,49411,49415,49423,49431,49435,49451,49471,49491,49495,49500,49509,49518,49523,49528,49533,49546,49551,49560,49569,49586],{"__ignoreMap":18},[96,47810,47811,47813],{"class":98,"line":99},[96,47812,30371],{"class":102},[96,47814,31801],{"class":106},[96,47816,47817,47819],{"class":98,"line":19},[96,47818,30371],{"class":102},[96,47820,31808],{"class":106},[96,47822,47823,47825,47827,47829],{"class":98,"line":1162},[96,47824,30371],{"class":102},[96,47826,31819],{"class":106},[96,47828,31362],{"class":102},[96,47830,31824],{"class":106},[96,47832,47833,47835],{"class":98,"line":1177},[96,47834,30371],{"class":102},[96,47836,30374],{"class":106},[96,47838,47839,47841,47843,47845],{"class":98,"line":1183},[96,47840,30716],{"class":102},[96,47842,31394],{"class":106},[96,47844,30371],{"class":102},[96,47846,31841],{"class":106},[96,47848,47849,47851,47853,47855,47858],{"class":98,"line":1197},[96,47850,30716],{"class":102},[96,47852,31347],{"class":106},[96,47854,30371],{"class":102},[96,47856,47857],{"class":106}," ImageFolder ",[96,47859,47860],{"class":165},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[96,47862,47863,47865,47867,47869],{"class":98,"line":1203},[96,47864,30716],{"class":102},[96,47866,31377],{"class":106},[96,47868,30371],{"class":102},[96,47870,31382],{"class":106},[96,47872,47873,47875,47877,47879],{"class":98,"line":1294},[96,47874,30371],{"class":102},[96,47876,31394],{"class":106},[96,47878,31362],{"class":102},[96,47880,31399],{"class":106},[96,47882,47883,47885,47887,47889],{"class":98,"line":1300},[96,47884,30371],{"class":102},[96,47886,31411],{"class":106},[96,47888,31362],{"class":102},[96,47890,31416],{"class":106},[96,47892,47893],{"class":98,"line":1312},[96,47894,31886],{"class":165},[96,47896,47897,47899,47901,47903],{"class":98,"line":1595},[96,47898,30716],{"class":102},[96,47900,31893],{"class":106},[96,47902,30371],{"class":102},[96,47904,43010],{"class":106},[96,47906,47907,47909,47911,47913],{"class":98,"line":1600},[96,47908,30716],{"class":102},[96,47910,30719],{"class":106},[96,47912,30371],{"class":102},[96,47914,30724],{"class":106},[96,47916,47917],{"class":98,"line":1606},[96,47918,2383],{"emptyLinePlaceholder":23},[96,47920,47921],{"class":98,"line":1611},[96,47922,31921],{"class":165},[96,47924,47925,47927,47929],{"class":98,"line":1625},[96,47926,31926],{"class":102},[96,47928,31929],{"class":1946},[96,47930,31932],{"class":106},[96,47932,47933],{"class":98,"line":1630},[96,47934,47935],{"class":165},"    # 导入自己的数据集，并进行数据处理\n",[96,47937,47938],{"class":98,"line":1636},[96,47939,47940],{"class":165},"    # 定义数据集的路径\n",[96,47942,47943,47946,47948,47950,47952,47954,47958],{"class":98,"line":1657},[96,47944,47945],{"class":155},"    ROOT_PATH",[96,47947,152],{"class":102},[96,47949,777],{"class":102},[96,47951,358],{"class":211},[96,47953,665],{"class":155},[96,47955,47957],{"class":47956},"sA_wV","\u002Fdata\u002Ftrain",[96,47959,25112],{"class":211},[96,47961,47962],{"class":98,"line":1662},[96,47963,2383],{"emptyLinePlaceholder":23},[96,47965,47966],{"class":98,"line":1676},[96,47967,47968],{"class":165},"    # 定义归一化方法\n",[96,47970,47971],{"class":98,"line":1681},[96,47972,47973],{"class":165},"    # 这里需要先计算一下数据集的均值和方差\n",[96,47975,47976],{"class":98,"line":1710},[96,47977,47978],{"class":165},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[96,47980,47981],{"class":98,"line":1715},[96,47982,47983],{"class":165},"    # 第一个参数是均值，第二个参数是方差\n",[96,47985,47986,47989,47991,47994,47997,47999,48002,48004,48007,48010,48013,48015,48018,48020,48023],{"class":98,"line":1732},[96,47987,47988],{"class":106},"    normalize",[96,47990,152],{"class":102},[96,47992,47993],{"class":106},"transforms.Normalize([",[96,47995,47996],{"class":155},"0.162",[96,47998,485],{"class":106},[96,48000,48001],{"class":155},"0.151",[96,48003,485],{"class":106},[96,48005,48006],{"class":155},"0.138",[96,48008,48009],{"class":106},"],[",[96,48011,48012],{"class":155},"0.058",[96,48014,485],{"class":106},[96,48016,48017],{"class":155},"0.052",[96,48019,485],{"class":106},[96,48021,48022],{"class":155},"0.048",[96,48024,4640],{"class":106},[96,48026,48027],{"class":98,"line":1737},[96,48028,48029],{"class":165},"    # 定义数据集处理方法变量\n",[96,48031,48032,48035,48037],{"class":98,"line":1742},[96,48033,48034],{"class":106},"    train_transform",[96,48036,152],{"class":102},[96,48038,48039],{"class":106},"transforms.Compose([\n",[96,48041,48042],{"class":98,"line":1747},[96,48043,48044],{"class":165},"        # 调整图像大小为224*224\n",[96,48046,48047,48050,48052,48054,48056],{"class":98,"line":1761},[96,48048,48049],{"class":106},"        transforms.Resize((",[96,48051,31480],{"class":155},[96,48053,485],{"class":106},[96,48055,31480],{"class":155},[96,48057,42601],{"class":106},[96,48059,48060],{"class":98,"line":1766},[96,48061,48062],{"class":165},"        # 将图像转换为张量\n",[96,48064,48065],{"class":98,"line":2560},[96,48066,48067],{"class":106},"        transforms.ToTensor(),\n",[96,48069,48070],{"class":98,"line":2574},[96,48071,48072],{"class":106},"        normalize])\n",[96,48074,48075],{"class":98,"line":2582},[96,48076,48077],{"class":165},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[96,48079,48080],{"class":98,"line":2587},[96,48081,48082],{"class":165},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[96,48084,48085],{"class":98,"line":2593},[96,48086,2383],{"emptyLinePlaceholder":23},[96,48088,48089],{"class":98,"line":2599},[96,48090,48091],{"class":165},"    # 加载数据集\n",[96,48093,48094],{"class":98,"line":2604},[96,48095,48096],{"class":165},"    # 传入数据集路径与处理方法\n",[96,48098,48099,48101,48103,48106,48109,48111,48114,48116],{"class":98,"line":7932},[96,48100,31937],{"class":106},[96,48102,152],{"class":102},[96,48104,48105],{"class":106},"ImageFolder(",[96,48107,48108],{"class":155},"ROOT_PATH",[96,48110,485],{"class":106},[96,48112,48113],{"class":5200},"transform",[96,48115,152],{"class":102},[96,48117,48118],{"class":106},"train_transform)\n",[96,48120,48121],{"class":98,"line":7956},[96,48122,2383],{"emptyLinePlaceholder":23},[96,48124,48125,48127,48129,48131,48133,48135,48137,48139,48141,48143,48145,48147,48149,48151,48153],{"class":98,"line":7961},[96,48126,31989],{"class":106},[96,48128,152],{"class":102},[96,48130,31994],{"class":106},[96,48132,31997],{"class":155},[96,48134,107],{"class":106},[96,48136,32002],{"class":155},[96,48138,562],{"class":102},[96,48140,7342],{"class":155},[96,48142,32009],{"class":106},[96,48144,31997],{"class":155},[96,48146,107],{"class":106},[96,48148,32016],{"class":155},[96,48150,562],{"class":102},[96,48152,7342],{"class":155},[96,48154,32023],{"class":106},[96,48156,48157,48159,48161,48163,48165,48167],{"class":98,"line":7967},[96,48158,32028],{"class":106},[96,48160,152],{"class":102},[96,48162,32033],{"class":106},[96,48164,31516],{"class":5200},[96,48166,152],{"class":102},[96,48168,31521],{"class":106},[96,48170,48171,48173,48175,48177],{"class":98,"line":7994},[96,48172,32044],{"class":5200},[96,48174,152],{"class":102},[96,48176,304],{"class":155},[96,48178,31445],{"class":106},[96,48180,48181,48183,48185,48187],{"class":98,"line":7999},[96,48182,32056],{"class":5200},[96,48184,152],{"class":102},[96,48186,31455],{"class":155},[96,48188,31445],{"class":106},[96,48190,48191],{"class":98,"line":8005},[96,48192,32067],{"class":165},[96,48194,48195,48197,48199,48201],{"class":98,"line":8017},[96,48196,32072],{"class":5200},[96,48198,152],{"class":102},[96,48200,502],{"class":155},[96,48202,113],{"class":106},[96,48204,48205,48207,48209,48211,48213,48215],{"class":98,"line":8029},[96,48206,32083],{"class":106},[96,48208,152],{"class":102},[96,48210,31513],{"class":106},[96,48212,31516],{"class":5200},[96,48214,152],{"class":102},[96,48216,32094],{"class":106},[96,48218,48219,48221,48223,48225],{"class":98,"line":8041},[96,48220,32099],{"class":5200},[96,48222,152],{"class":102},[96,48224,304],{"class":155},[96,48226,31445],{"class":106},[96,48228,48229,48231,48233,48235],{"class":98,"line":9700},[96,48230,32110],{"class":5200},[96,48232,152],{"class":102},[96,48234,31455],{"class":155},[96,48236,31445],{"class":106},[96,48238,48239,48241,48243,48245],{"class":98,"line":9725},[96,48240,32121],{"class":5200},[96,48242,152],{"class":102},[96,48244,502],{"class":155},[96,48246,113],{"class":106},[96,48248,48249,48251],{"class":98,"line":9748},[96,48250,4073],{"class":102},[96,48252,32134],{"class":106},[96,48254,48255],{"class":98,"line":9772},[96,48256,2383],{"emptyLinePlaceholder":23},[96,48258,48259],{"class":98,"line":9777},[96,48260,32143],{"class":165},[96,48262,48263],{"class":98,"line":9782},[96,48264,32148],{"class":165},[96,48266,48267],{"class":98,"line":9787},[96,48268,2383],{"emptyLinePlaceholder":23},[96,48270,48271],{"class":98,"line":9796},[96,48272,32157],{"class":165},[96,48274,48275,48277,48279],{"class":98,"line":9801},[96,48276,31926],{"class":102},[96,48278,32164],{"class":1946},[96,48280,32167],{"class":106},[96,48282,48283,48285,48287,48289,48291,48293,48295,48297,48299],{"class":98,"line":9807},[96,48284,31216],{"class":106},[96,48286,152],{"class":102},[96,48288,30430],{"class":106},[96,48290,31223],{"class":211},[96,48292,1687],{"class":102},[96,48294,31228],{"class":106},[96,48296,1684],{"class":102},[96,48298,32186],{"class":211},[96,48300,113],{"class":106},[96,48302,48303],{"class":98,"line":9828},[96,48304,2383],{"emptyLinePlaceholder":23},[96,48306,48307],{"class":98,"line":9834},[96,48308,32201],{"class":165},[96,48310,48311],{"class":98,"line":9848},[96,48312,32206],{"class":165},[96,48314,48315],{"class":98,"line":9854},[96,48316,32211],{"class":165},[96,48318,48319,48321,48323,48325,48327,48329,48331],{"class":98,"line":9881},[96,48320,32216],{"class":106},[96,48322,152],{"class":102},[96,48324,32221],{"class":106},[96,48326,32224],{"class":5200},[96,48328,152],{"class":102},[96,48330,32229],{"class":155},[96,48332,113],{"class":106},[96,48334,48335],{"class":98,"line":9890},[96,48336,2383],{"emptyLinePlaceholder":23},[96,48338,48339],{"class":98,"line":9896},[96,48340,32240],{"class":165},[96,48342,48343,48345,48347],{"class":98,"line":9904},[96,48344,32245],{"class":106},[96,48346,152],{"class":102},[96,48348,32250],{"class":106},[96,48350,48351],{"class":98,"line":9909},[96,48352,2383],{"emptyLinePlaceholder":23},[96,48354,48355],{"class":98,"line":16588},[96,48356,32259],{"class":165},[96,48358,48359,48361,48363],{"class":98,"line":16594},[96,48360,31268],{"class":106},[96,48362,152],{"class":102},[96,48364,32268],{"class":106},[96,48366,48367],{"class":98,"line":16617},[96,48368,32273],{"class":165},[96,48370,48371],{"class":98,"line":16623},[96,48372,32278],{"class":165},[96,48374,48375],{"class":98,"line":16646},[96,48376,32283],{"class":165},[96,48378,48379,48381,48383],{"class":98,"line":16660},[96,48380,32288],{"class":106},[96,48382,152],{"class":102},[96,48384,32293],{"class":106},[96,48386,48387],{"class":98,"line":16680},[96,48388,2383],{"emptyLinePlaceholder":23},[96,48390,48391],{"class":98,"line":16686},[96,48392,32306],{"class":165},[96,48394,48395],{"class":98,"line":16697},[96,48396,32311],{"class":165},[96,48398,48399,48401,48403],{"class":98,"line":16720},[96,48400,32316],{"class":106},[96,48402,152],{"class":102},[96,48404,32321],{"class":155},[96,48406,48407],{"class":98,"line":16742},[96,48408,32326],{"class":165},[96,48410,48411,48413,48415],{"class":98,"line":16747},[96,48412,32331],{"class":106},[96,48414,152],{"class":102},[96,48416,32336],{"class":106},[96,48418,48419],{"class":98,"line":16753},[96,48420,32341],{"class":165},[96,48422,48423,48425,48427],{"class":98,"line":16767},[96,48424,32346],{"class":106},[96,48426,152],{"class":102},[96,48428,32336],{"class":106},[96,48430,48431],{"class":98,"line":16780},[96,48432,32355],{"class":165},[96,48434,48435,48437,48439],{"class":98,"line":16785},[96,48436,32360],{"class":106},[96,48438,152],{"class":102},[96,48440,32336],{"class":106},[96,48442,48443],{"class":98,"line":16799},[96,48444,32369],{"class":165},[96,48446,48447,48449,48451],{"class":98,"line":16804},[96,48448,32374],{"class":106},[96,48450,152],{"class":102},[96,48452,32336],{"class":106},[96,48454,48455],{"class":98,"line":16810},[96,48456,2383],{"emptyLinePlaceholder":23},[96,48458,48459],{"class":98,"line":16815},[96,48460,32387],{"class":165},[96,48462,48463,48465,48467],{"class":98,"line":16829},[96,48464,32392],{"class":106},[96,48466,152],{"class":102},[96,48468,32397],{"class":106},[96,48470,48471],{"class":98,"line":16834},[96,48472,2383],{"emptyLinePlaceholder":23},[96,48474,48475],{"class":98,"line":16839},[96,48476,32410],{"class":165},[96,48478,48479,48481,48483,48485,48487],{"class":98,"line":16853},[96,48480,3184],{"class":102},[96,48482,32417],{"class":106},[96,48484,26022],{"class":102},[96,48486,32422],{"class":155},[96,48488,32425],{"class":106},[96,48490,48491,48493,48495,48497,48499,48501,48503,48505,48507,48509,48511],{"class":98,"line":16865},[96,48492,32430],{"class":155},[96,48494,107],{"class":106},[96,48496,32435],{"class":211},[96,48498,32438],{"class":155},[96,48500,691],{"class":211},[96,48502,32438],{"class":155},[96,48504,358],{"class":211},[96,48506,32447],{"class":106},[96,48508,639],{"class":102},[96,48510,324],{"class":155},[96,48512,30476],{"class":106},[96,48514,48515,48517,48519,48521,48523,48525],{"class":98,"line":16870},[96,48516,32430],{"class":155},[96,48518,107],{"class":106},[96,48520,32462],{"class":211},[96,48522,562],{"class":102},[96,48524,553],{"class":155},[96,48526,113],{"class":106},[96,48528,48529],{"class":98,"line":16883},[96,48530,2383],{"emptyLinePlaceholder":23},[96,48532,48533],{"class":98,"line":16888},[96,48534,32477],{"class":165},[96,48536,48537],{"class":98,"line":16893},[96,48538,32482],{"class":165},[96,48540,48541,48543,48545],{"class":98,"line":16898},[96,48542,32487],{"class":106},[96,48544,152],{"class":102},[96,48546,32321],{"class":155},[96,48548,48549],{"class":98,"line":16911},[96,48550,32496],{"class":165},[96,48552,48553,48555,48557],{"class":98,"line":16916},[96,48554,32501],{"class":106},[96,48556,152],{"class":102},[96,48558,3068],{"class":155},[96,48560,48561],{"class":98,"line":32612},[96,48562,32510],{"class":165},[96,48564,48565,48567,48569],{"class":98,"line":32618},[96,48566,32515],{"class":106},[96,48568,152],{"class":102},[96,48570,32321],{"class":155},[96,48572,48573],{"class":98,"line":32624},[96,48574,32524],{"class":165},[96,48576,48577,48579,48581],{"class":98,"line":32630},[96,48578,32529],{"class":106},[96,48580,152],{"class":102},[96,48582,3068],{"class":155},[96,48584,48585],{"class":98,"line":32636},[96,48586,32538],{"class":165},[96,48588,48589,48591,48593],{"class":98,"line":32647},[96,48590,32543],{"class":106},[96,48592,152],{"class":102},[96,48594,3068],{"class":155},[96,48596,48597],{"class":98,"line":32653},[96,48598,32552],{"class":165},[96,48600,48601,48603,48605],{"class":98,"line":32673},[96,48602,32557],{"class":106},[96,48604,152],{"class":102},[96,48606,3068],{"class":155},[96,48608,48609],{"class":98,"line":32679},[96,48610,32566],{"class":165},[96,48612,48613,48615,48617,48619,48621],{"class":98,"line":32690},[96,48614,3386],{"class":102},[96,48616,31580],{"class":106},[96,48618,26022],{"class":102},[96,48620,31585],{"class":155},[96,48622,32579],{"class":106},[96,48624,48625],{"class":98,"line":32696},[96,48626,32584],{"class":165},[96,48628,48629,48631,48633],{"class":98,"line":32702},[96,48630,32589],{"class":106},[96,48632,152],{"class":102},[96,48634,32594],{"class":106},[96,48636,48637],{"class":98,"line":32708},[96,48638,32599],{"class":165},[96,48640,48641,48643,48645],{"class":98,"line":32714},[96,48642,32604],{"class":106},[96,48644,152],{"class":102},[96,48646,32609],{"class":106},[96,48648,48649],{"class":98,"line":32720},[96,48650,32615],{"class":165},[96,48652,48653],{"class":98,"line":32726},[96,48654,32621],{"class":106},[96,48656,48657],{"class":98,"line":32732},[96,48658,32627],{"class":165},[96,48660,48661],{"class":98,"line":32752},[96,48662,32633],{"class":165},[96,48664,48665,48667,48669],{"class":98,"line":32758},[96,48666,32639],{"class":106},[96,48668,152],{"class":102},[96,48670,32644],{"class":106},[96,48672,48673],{"class":98,"line":32774},[96,48674,32650],{"class":165},[96,48676,48677,48679,48681,48683,48685,48687,48689],{"class":98,"line":32780},[96,48678,32656],{"class":106},[96,48680,152],{"class":102},[96,48682,32661],{"class":106},[96,48684,32664],{"class":5200},[96,48686,152],{"class":102},[96,48688,324],{"class":155},[96,48690,113],{"class":106},[96,48692,48693],{"class":98,"line":32794},[96,48694,32676],{"class":165},[96,48696,48697,48699,48701],{"class":98,"line":32800},[96,48698,32682],{"class":106},[96,48700,152],{"class":102},[96,48702,32687],{"class":106},[96,48704,48705],{"class":98,"line":32815},[96,48706,32693],{"class":165},[96,48708,48709],{"class":98,"line":32821},[96,48710,32699],{"class":106},[96,48712,48713],{"class":98,"line":32830},[96,48714,32705],{"class":165},[96,48716,48717],{"class":98,"line":32836},[96,48718,32711],{"class":106},[96,48720,48721],{"class":98,"line":32845},[96,48722,32717],{"class":165},[96,48724,48725],{"class":98,"line":32851},[96,48726,32723],{"class":106},[96,48728,48729],{"class":98,"line":32857},[96,48730,32729],{"class":165},[96,48732,48733,48735,48737,48739,48741,48743,48745],{"class":98,"line":32866},[96,48734,32735],{"class":106},[96,48736,9461],{"class":102},[96,48738,32740],{"class":106},[96,48740,562],{"class":102},[96,48742,32745],{"class":106},[96,48744,298],{"class":155},[96,48746,113],{"class":106},[96,48748,48749],{"class":98,"line":32872},[96,48750,32755],{"class":165},[96,48752,48753,48755,48757,48759,48761],{"class":98,"line":32883},[96,48754,32761],{"class":106},[96,48756,9461],{"class":102},[96,48758,32766],{"class":106},[96,48760,2932],{"class":102},[96,48762,32771],{"class":106},[96,48764,48765],{"class":98,"line":32889},[96,48766,32777],{"class":165},[96,48768,48769,48771,48773,48775,48777],{"class":98,"line":32908},[96,48770,32783],{"class":106},[96,48772,9461],{"class":102},[96,48774,32745],{"class":106},[96,48776,298],{"class":155},[96,48778,113],{"class":106},[96,48780,48781],{"class":98,"line":32914},[96,48782,32797],{"class":165},[96,48784,48785,48787,48789,48791,48793],{"class":98,"line":32925},[96,48786,3386],{"class":102},[96,48788,32805],{"class":106},[96,48790,26022],{"class":102},[96,48792,31585],{"class":155},[96,48794,32812],{"class":106},[96,48796,48797],{"class":98,"line":32931},[96,48798,32818],{"class":165},[96,48800,48801,48803,48805],{"class":98,"line":32951},[96,48802,32589],{"class":106},[96,48804,152],{"class":102},[96,48806,32594],{"class":106},[96,48808,48809],{"class":98,"line":32967},[96,48810,32833],{"class":165},[96,48812,48813,48815,48817],{"class":98,"line":32973},[96,48814,32604],{"class":106},[96,48816,152],{"class":102},[96,48818,32609],{"class":106},[96,48820,48821],{"class":98,"line":32987},[96,48822,32848],{"class":165},[96,48824,48825],{"class":98,"line":32993},[96,48826,32854],{"class":106},[96,48828,48829],{"class":98,"line":32999},[96,48830,36335],{"class":165},[96,48832,48833,48835],{"class":98,"line":33010},[96,48834,32860],{"class":102},[96,48836,32863],{"class":106},[96,48838,48839],{"class":98,"line":33016},[96,48840,32869],{"class":165},[96,48842,48843,48845,48847],{"class":98,"line":33022},[96,48844,36350],{"class":106},[96,48846,152],{"class":102},[96,48848,32644],{"class":106},[96,48850,48851],{"class":98,"line":33032},[96,48852,32886],{"class":165},[96,48854,48855,48857,48859,48861,48863,48865,48867],{"class":98,"line":33038},[96,48856,36363],{"class":106},[96,48858,152],{"class":102},[96,48860,32661],{"class":106},[96,48862,32664],{"class":5200},[96,48864,152],{"class":102},[96,48866,324],{"class":155},[96,48868,113],{"class":106},[96,48870,48871],{"class":98,"line":33049},[96,48872,32911],{"class":165},[96,48874,48875,48877,48879],{"class":98,"line":33055},[96,48876,36384],{"class":106},[96,48878,152],{"class":102},[96,48880,32687],{"class":106},[96,48882,48883],{"class":98,"line":33065},[96,48884,32928],{"class":165},[96,48886,48887,48889,48891,48893,48895,48897,48899],{"class":98,"line":33070},[96,48888,36397],{"class":106},[96,48890,9461],{"class":102},[96,48892,36402],{"class":106},[96,48894,562],{"class":102},[96,48896,32745],{"class":106},[96,48898,298],{"class":155},[96,48900,113],{"class":106},[96,48902,48903,48905,48907,48909,48911],{"class":98,"line":33076},[96,48904,36415],{"class":106},[96,48906,9461],{"class":102},[96,48908,32766],{"class":106},[96,48910,2932],{"class":102},[96,48912,32771],{"class":106},[96,48914,48915],{"class":98,"line":33125},[96,48916,36428],{"class":165},[96,48918,48919,48921,48923,48925,48927],{"class":98,"line":33172},[96,48920,36433],{"class":106},[96,48922,9461],{"class":102},[96,48924,32745],{"class":106},[96,48926,298],{"class":155},[96,48928,113],{"class":106},[96,48930,48931],{"class":98,"line":33177},[96,48932,32990],{"class":165},[96,48934,48935],{"class":98,"line":33183},[96,48936,32996],{"class":165},[96,48938,48939,48941,48943],{"class":98,"line":33202},[96,48940,33002],{"class":106},[96,48942,691],{"class":102},[96,48944,33007],{"class":106},[96,48946,48947],{"class":98,"line":33208},[96,48948,33013],{"class":165},[96,48950,48951],{"class":98,"line":33228},[96,48952,33019],{"class":165},[96,48954,48955,48957,48959],{"class":98,"line":33234},[96,48956,33025],{"class":106},[96,48958,691],{"class":102},[96,48960,33007],{"class":106},[96,48962,48963],{"class":98,"line":33240},[96,48964,33035],{"class":165},[96,48966,48967,48969,48971],{"class":98,"line":33250},[96,48968,33041],{"class":106},[96,48970,691],{"class":102},[96,48972,33046],{"class":106},[96,48974,48975],{"class":98,"line":33255},[96,48976,33052],{"class":165},[96,48978,48979,48981,48983],{"class":98,"line":33261},[96,48980,33058],{"class":106},[96,48982,691],{"class":102},[96,48984,33046],{"class":106},[96,48986,48987],{"class":98,"line":33277},[96,48988,2383],{"emptyLinePlaceholder":23},[96,48990,48991],{"class":98,"line":33322},[96,48992,33073],{"class":165},[96,48994,48995,48997,48999,49001,49003,49005,49007,49009,49011,49013,49015,49017,49019,49021,49023,49025,49027,49029,49031,49033],{"class":98,"line":33328},[96,48996,32430],{"class":155},[96,48998,107],{"class":106},[96,49000,3575],{"class":211},[96,49002,32438],{"class":155},[96,49004,33087],{"class":211},[96,49006,1003],{"class":155},[96,49008,33092],{"class":102},[96,49010,1053],{"class":155},[96,49012,33097],{"class":211},[96,49014,1003],{"class":155},[96,49016,33092],{"class":102},[96,49018,1053],{"class":155},[96,49020,3575],{"class":211},[96,49022,33108],{"class":106},[96,49024,639],{"class":102},[96,49026,324],{"class":155},[96,49028,33115],{"class":106},[96,49030,639],{"class":102},[96,49032,324],{"class":155},[96,49034,33122],{"class":106},[96,49036,49037,49039,49041,49043,49045,49047,49049,49051,49053,49055,49057,49059,49061,49063,49065,49067,49069,49071,49073,49075],{"class":98,"line":33334},[96,49038,32430],{"class":155},[96,49040,107],{"class":106},[96,49042,3575],{"class":211},[96,49044,32438],{"class":155},[96,49046,33136],{"class":211},[96,49048,1003],{"class":155},[96,49050,33092],{"class":102},[96,49052,1053],{"class":155},[96,49054,33145],{"class":211},[96,49056,1003],{"class":155},[96,49058,33092],{"class":102},[96,49060,1053],{"class":155},[96,49062,3575],{"class":211},[96,49064,33156],{"class":106},[96,49066,639],{"class":102},[96,49068,324],{"class":155},[96,49070,33163],{"class":106},[96,49072,639],{"class":102},[96,49074,324],{"class":155},[96,49076,33122],{"class":106},[96,49078,49079],{"class":98,"line":33340},[96,49080,2383],{"emptyLinePlaceholder":23},[96,49082,49083],{"class":98,"line":33351},[96,49084,33180],{"class":165},[96,49086,49087,49089,49091,49093,49095,49097,49099],{"class":98,"line":33357},[96,49088,2480],{"class":102},[96,49090,33188],{"class":106},[96,49092,639],{"class":102},[96,49094,324],{"class":155},[96,49096,1047],{"class":106},[96,49098,1067],{"class":102},[96,49100,33199],{"class":106},[96,49102,49103],{"class":98,"line":33363},[96,49104,33205],{"class":165},[96,49106,49107,49109,49111,49113,49115,49117,49119],{"class":98,"line":33369},[96,49108,33211],{"class":106},[96,49110,146],{"class":155},[96,49112,152],{"class":102},[96,49114,33218],{"class":106},[96,49116,639],{"class":102},[96,49118,324],{"class":155},[96,49120,33225],{"class":106},[96,49122,49123],{"class":98,"line":33387},[96,49124,33231],{"class":165},[96,49126,49127],{"class":98,"line":33401},[96,49128,33237],{"class":165},[96,49130,49131,49133,49135],{"class":98,"line":33410},[96,49132,33243],{"class":106},[96,49134,152],{"class":102},[96,49136,32293],{"class":106},[96,49138,49139],{"class":98,"line":33419},[96,49140,2383],{"emptyLinePlaceholder":23},[96,49142,49143],{"class":98,"line":33428},[96,49144,33258],{"class":165},[96,49146,49147,49149,49151,49153,49155],{"class":98,"line":33437},[96,49148,33264],{"class":106},[96,49150,152],{"class":102},[96,49152,33269],{"class":106},[96,49154,639],{"class":102},[96,49156,33274],{"class":106},[96,49158,49159,49161,49163,49165,49167,49169,49171,49173,49175,49177,49179,49181,49183,49185,49187,49189,49191,49193],{"class":98,"line":33443},[96,49160,32430],{"class":155},[96,49162,107],{"class":106},[96,49164,33284],{"class":211},[96,49166,1003],{"class":155},[96,49168,33289],{"class":102},[96,49170,1053],{"class":155},[96,49172,651],{"class":211},[96,49174,1003],{"class":155},[96,49176,33289],{"class":102},[96,49178,1053],{"class":155},[96,49180,33302],{"class":211},[96,49182,33305],{"class":106},[96,49184,33308],{"class":102},[96,49186,1014],{"class":155},[96,49188,33313],{"class":106},[96,49190,435],{"class":102},[96,49192,1014],{"class":155},[96,49194,30476],{"class":106},[96,49196,49197],{"class":98,"line":33449},[96,49198,36712],{"class":165},[96,49200,49201],{"class":98,"line":33457},[96,49202,36717],{"class":165},[96,49204,49205,49207,49209],{"class":98,"line":33462},[96,49206,36722],{"class":106},[96,49208,33346],{"class":211},[96,49210,113],{"class":106},[96,49212,49213],{"class":98,"line":33468},[96,49214,33366],{"class":165},[96,49216,49217,49219,49221,49223,49225,49227],{"class":98,"line":33479},[96,49218,33372],{"class":106},[96,49220,152],{"class":102},[96,49222,33377],{"class":106},[96,49224,33380],{"class":5200},[96,49226,152],{"class":102},[96,49228,1529],{"class":106},[96,49230,49231,49233,49235,49237],{"class":98,"line":33485},[96,49232,33390],{"class":211},[96,49234,966],{"class":106},[96,49236,33395],{"class":155},[96,49238,33398],{"class":106},[96,49240,49241,49243],{"class":98,"line":33505},[96,49242,33404],{"class":211},[96,49244,33407],{"class":106},[96,49246,49247,49249],{"class":98,"line":33511},[96,49248,33413],{"class":211},[96,49250,33416],{"class":106},[96,49252,49253,49255],{"class":98,"line":33517},[96,49254,33422],{"class":211},[96,49256,33425],{"class":106},[96,49258,49259,49261],{"class":98,"line":33523},[96,49260,33431],{"class":211},[96,49262,33434],{"class":106},[96,49264,49265],{"class":98,"line":33540},[96,49266,33440],{"class":106},[96,49268,49269],{"class":98,"line":33546},[96,49270,33446],{"class":165},[96,49272,49273,49275],{"class":98,"line":33552},[96,49274,4073],{"class":102},[96,49276,33454],{"class":106},[96,49278,49279],{"class":98,"line":33558},[96,49280,2383],{"emptyLinePlaceholder":23},[96,49282,49283],{"class":98,"line":33564},[96,49284,33465],{"class":165},[96,49286,49287,49289,49291],{"class":98,"line":33570},[96,49288,31926],{"class":102},[96,49290,33473],{"class":1946},[96,49292,33476],{"class":106},[96,49294,49295],{"class":98,"line":33597},[96,49296,33482],{"class":165},[96,49298,49299,49301,49303,49305,49307,49309,49311,49313],{"class":98,"line":33621},[96,49300,33488],{"class":106},[96,49302,31672],{"class":5200},[96,49304,152],{"class":102},[96,49306,107],{"class":106},[96,49308,605],{"class":155},[96,49310,485],{"class":106},[96,49312,400],{"class":155},[96,49314,30476],{"class":106},[96,49316,49317],{"class":98,"line":33627},[96,49318,33508],{"class":165},[96,49320,49321],{"class":98,"line":33633},[96,49322,33514],{"class":165},[96,49324,49325],{"class":98,"line":33639},[96,49326,33520],{"class":165},[96,49328,49329,49331,49333,49335,49337,49339,49341],{"class":98,"line":33650},[96,49330,31706],{"class":106},[96,49332,324],{"class":155},[96,49334,485],{"class":106},[96,49336,184],{"class":155},[96,49338,485],{"class":106},[96,49340,324],{"class":155},[96,49342,113],{"class":106},[96,49344,49345],{"class":98,"line":33661},[96,49346,33543],{"class":165},[96,49348,49349],{"class":98,"line":33667},[96,49350,33549],{"class":165},[96,49352,49353],{"class":98,"line":33684},[96,49354,33555],{"class":165},[96,49356,49357],{"class":98,"line":33707},[96,49358,33561],{"class":165},[96,49360,49361],{"class":98,"line":33730},[96,49362,33567],{"class":165},[96,49364,49365,49367,49369,49371,49373,49375,49377,49379,49381],{"class":98,"line":33736},[96,49366,33573],{"class":106},[96,49368,33576],{"class":211},[96,49370,33579],{"class":106},[96,49372,33582],{"class":211},[96,49374,485],{"class":106},[96,49376,33587],{"class":5200},[96,49378,152],{"class":102},[96,49380,33592],{"class":211},[96,49382,113],{"class":106},[96,49384,49385,49387,49389,49391,49393,49395,49397,49399,49401],{"class":98,"line":33741},[96,49386,33573],{"class":106},[96,49388,33576],{"class":211},[96,49390,33604],{"class":106},[96,49392,33607],{"class":211},[96,49394,485],{"class":106},[96,49396,33587],{"class":5200},[96,49398,152],{"class":102},[96,49400,33616],{"class":211},[96,49402,113],{"class":106},[96,49404,49405],{"class":98,"line":33750},[96,49406,33624],{"class":165},[96,49408,49409],{"class":98,"line":33760},[96,49410,33630],{"class":106},[96,49412,49413],{"class":98,"line":33766},[96,49414,33636],{"class":165},[96,49416,49417,49419,49421],{"class":98,"line":33771},[96,49418,33642],{"class":106},[96,49420,33645],{"class":211},[96,49422,113],{"class":106},[96,49424,49425,49427,49429],{"class":98,"line":33777},[96,49426,33653],{"class":106},[96,49428,33656],{"class":211},[96,49430,113],{"class":106},[96,49432,49433],{"class":98,"line":33790},[96,49434,33664],{"class":165},[96,49436,49437,49439,49441,49443,49445,49447,49449],{"class":98,"line":33796},[96,49438,31706],{"class":106},[96,49440,324],{"class":155},[96,49442,485],{"class":106},[96,49444,184],{"class":155},[96,49446,485],{"class":106},[96,49448,184],{"class":155},[96,49450,113],{"class":106},[96,49452,49453,49455,49457,49459,49461,49463,49465,49467,49469],{"class":98,"line":33807},[96,49454,33573],{"class":106},[96,49456,33576],{"class":211},[96,49458,33691],{"class":106},[96,49460,33582],{"class":211},[96,49462,485],{"class":106},[96,49464,33587],{"class":5200},[96,49466,152],{"class":102},[96,49468,33702],{"class":211},[96,49470,113],{"class":106},[96,49472,49473,49475,49477,49479,49481,49483,49485,49487,49489],{"class":98,"line":33818},[96,49474,33573],{"class":106},[96,49476,33576],{"class":211},[96,49478,33714],{"class":106},[96,49480,33607],{"class":211},[96,49482,485],{"class":106},[96,49484,33587],{"class":5200},[96,49486,152],{"class":102},[96,49488,33725],{"class":211},[96,49490,113],{"class":106},[96,49492,49493],{"class":98,"line":33837},[96,49494,33733],{"class":165},[96,49496,49498],{"class":98,"line":49497},219,[96,49499,33630],{"class":106},[96,49501,49503,49505,49507],{"class":98,"line":49502},220,[96,49504,33642],{"class":106},[96,49506,33576],{"class":211},[96,49508,113],{"class":106},[96,49510,49512,49514,49516],{"class":98,"line":49511},221,[96,49513,33653],{"class":106},[96,49515,33755],{"class":211},[96,49517,113],{"class":106},[96,49519,49521],{"class":98,"line":49520},222,[96,49522,33763],{"class":106},[96,49524,49526],{"class":98,"line":49525},223,[96,49527,2383],{"emptyLinePlaceholder":23},[96,49529,49531],{"class":98,"line":49530},224,[96,49532,33774],{"class":165},[96,49534,49536,49538,49540,49542,49544],{"class":98,"line":49535},225,[96,49537,1514],{"class":102},[96,49539,31199],{"class":155},[96,49541,2932],{"class":102},[96,49543,31204],{"class":211},[96,49545,3722],{"class":106},[96,49547,49549],{"class":98,"line":49548},226,[96,49550,33793],{"class":165},[96,49552,49554,49556,49558],{"class":98,"line":49553},227,[96,49555,44525],{"class":106},[96,49557,152],{"class":102},[96,49559,44530],{"class":106},[96,49561,49563,49565,49567],{"class":98,"line":49562},228,[96,49564,33810],{"class":106},[96,49566,152],{"class":102},[96,49568,33815],{"class":106},[96,49570,49572,49574,49576,49578,49580,49582,49584],{"class":98,"line":49571},229,[96,49573,33372],{"class":106},[96,49575,152],{"class":102},[96,49577,44547],{"class":106},[96,49579,33828],{"class":5200},[96,49581,152],{"class":102},[96,49583,1014],{"class":155},[96,49585,113],{"class":106},[96,49587,49589],{"class":98,"line":49588},230,[96,49590,33840],{"class":106},[21982,49592,49594],{"id":49593},"_242测试代码","2.4.2.测试代码",[14,49596,49597],{},"使用测试集进行测试与推理",[87,49599,49601],{"className":30357,"code":49600,"language":30359,"meta":18,"style":18},"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",[93,49602,49603,49609,49619,49629,49640,49650,49654,49658,49666,49671,49675,49692,49696,49700,49704,49708,49712,49744,49748,49756,49760,49772,49776,49780,49784,49788,49792,49796,49800,49804,49822,49836,49840,49850,49860,49870,49876,49880,49884,49892,49896,49912,49920,49924,49928,49936,49944,49948,49952,49956,49960,49966,49970,49980,49988,49996,50000,50004,50008,50016,50020,50036,50040,50044,50048,50060,50064,50076,50080,50084,50096,50100,50110,50114,50118,50130,50134,50142,50146,50150,50158,50162,50170,50174,50178,50182,50186,50190,50206,50214,50218,50222,50240,50246,50250,50260,50268,50276,50280,50284,50288,50292,50300,50304,50320,50324,50332,50340],{"__ignoreMap":18},[96,49604,49605,49607],{"class":98,"line":99},[96,49606,30371],{"class":102},[96,49608,30374],{"class":106},[96,49610,49611,49613,49615,49617],{"class":98,"line":19},[96,49612,30371],{"class":102},[96,49614,31394],{"class":106},[96,49616,31362],{"class":102},[96,49618,31399],{"class":106},[96,49620,49621,49623,49625,49627],{"class":98,"line":1162},[96,49622,30716],{"class":102},[96,49624,31377],{"class":106},[96,49626,30371],{"class":102},[96,49628,31382],{"class":106},[96,49630,49631,49633,49635,49637],{"class":98,"line":1177},[96,49632,30716],{"class":102},[96,49634,31347],{"class":106},[96,49636,30371],{"class":102},[96,49638,49639],{"class":106}," ImageFolder\n",[96,49641,49642,49644,49646,49648],{"class":98,"line":1183},[96,49643,30716],{"class":102},[96,49645,31893],{"class":106},[96,49647,30371],{"class":102},[96,49649,44619],{"class":106},[96,49651,49652],{"class":98,"line":1197},[96,49653,2383],{"emptyLinePlaceholder":23},[96,49655,49656],{"class":98,"line":1203},[96,49657,33930],{"class":165},[96,49659,49660,49662,49664],{"class":98,"line":1294},[96,49661,31926],{"class":102},[96,49663,33937],{"class":1946},[96,49665,31932],{"class":106},[96,49667,49668],{"class":98,"line":1300},[96,49669,49670],{"class":165},"   # 导入自己的数据集，并进行数据处理\n",[96,49672,49673],{"class":98,"line":1312},[96,49674,47940],{"class":165},[96,49676,49677,49679,49681,49683,49685,49687,49690],{"class":98,"line":1595},[96,49678,47945],{"class":155},[96,49680,152],{"class":102},[96,49682,777],{"class":102},[96,49684,358],{"class":211},[96,49686,665],{"class":155},[96,49688,49689],{"class":47956},"\u002Fdata\u002Ftest",[96,49691,25112],{"class":211},[96,49693,49694],{"class":98,"line":1600},[96,49695,2383],{"emptyLinePlaceholder":23},[96,49697,49698],{"class":98,"line":1606},[96,49699,47968],{"class":165},[96,49701,49702],{"class":98,"line":1611},[96,49703,47973],{"class":165},[96,49705,49706],{"class":98,"line":1625},[96,49707,47978],{"class":165},[96,49709,49710],{"class":98,"line":1630},[96,49711,47983],{"class":165},[96,49713,49714,49716,49718,49720,49722,49724,49726,49728,49730,49732,49734,49736,49738,49740,49742],{"class":98,"line":1636},[96,49715,47988],{"class":106},[96,49717,152],{"class":102},[96,49719,47993],{"class":106},[96,49721,47996],{"class":155},[96,49723,485],{"class":106},[96,49725,48001],{"class":155},[96,49727,485],{"class":106},[96,49729,48006],{"class":155},[96,49731,48009],{"class":106},[96,49733,48012],{"class":155},[96,49735,485],{"class":106},[96,49737,48017],{"class":155},[96,49739,485],{"class":106},[96,49741,48022],{"class":155},[96,49743,4640],{"class":106},[96,49745,49746],{"class":98,"line":1657},[96,49747,48029],{"class":165},[96,49749,49750,49752,49754],{"class":98,"line":1662},[96,49751,48034],{"class":106},[96,49753,152],{"class":102},[96,49755,48039],{"class":106},[96,49757,49758],{"class":98,"line":1676},[96,49759,48044],{"class":165},[96,49761,49762,49764,49766,49768,49770],{"class":98,"line":1681},[96,49763,48049],{"class":106},[96,49765,31480],{"class":155},[96,49767,485],{"class":106},[96,49769,31480],{"class":155},[96,49771,42601],{"class":106},[96,49773,49774],{"class":98,"line":1710},[96,49775,48062],{"class":165},[96,49777,49778],{"class":98,"line":1715},[96,49779,48067],{"class":106},[96,49781,49782],{"class":98,"line":1732},[96,49783,48072],{"class":106},[96,49785,49786],{"class":98,"line":1737},[96,49787,48077],{"class":165},[96,49789,49790],{"class":98,"line":1742},[96,49791,48082],{"class":165},[96,49793,49794],{"class":98,"line":1747},[96,49795,2383],{"emptyLinePlaceholder":23},[96,49797,49798],{"class":98,"line":1761},[96,49799,48091],{"class":165},[96,49801,49802],{"class":98,"line":1766},[96,49803,48096],{"class":165},[96,49805,49806,49808,49810,49812,49814,49816,49818,49820],{"class":98,"line":2560},[96,49807,33944],{"class":106},[96,49809,152],{"class":102},[96,49811,48105],{"class":106},[96,49813,48108],{"class":155},[96,49815,485],{"class":106},[96,49817,48113],{"class":5200},[96,49819,152],{"class":102},[96,49821,48118],{"class":106},[96,49823,49824,49826,49828,49830,49832,49834],{"class":98,"line":2574},[96,49825,34001],{"class":106},[96,49827,152],{"class":102},[96,49829,31513],{"class":106},[96,49831,31516],{"class":5200},[96,49833,152],{"class":102},[96,49835,34012],{"class":106},[96,49837,49838],{"class":98,"line":2582},[96,49839,34017],{"class":165},[96,49841,49842,49844,49846,49848],{"class":98,"line":2587},[96,49843,34022],{"class":5200},[96,49845,152],{"class":102},[96,49847,324],{"class":155},[96,49849,31445],{"class":106},[96,49851,49852,49854,49856,49858],{"class":98,"line":2593},[96,49853,34033],{"class":5200},[96,49855,152],{"class":102},[96,49857,31455],{"class":155},[96,49859,31445],{"class":106},[96,49861,49862,49864,49866,49868],{"class":98,"line":2599},[96,49863,34044],{"class":5200},[96,49865,152],{"class":102},[96,49867,298],{"class":155},[96,49869,113],{"class":106},[96,49871,49872,49874],{"class":98,"line":2604},[96,49873,4073],{"class":102},[96,49875,34057],{"class":106},[96,49877,49878],{"class":98,"line":7932},[96,49879,2383],{"emptyLinePlaceholder":23},[96,49881,49882],{"class":98,"line":7956},[96,49883,34066],{"class":165},[96,49885,49886,49888,49890],{"class":98,"line":7961},[96,49887,31926],{"class":102},[96,49889,34073],{"class":1946},[96,49891,34076],{"class":106},[96,49893,49894],{"class":98,"line":7967},[96,49895,34081],{"class":165},[96,49897,49898,49900,49902,49904,49906,49908,49910],{"class":98,"line":7994},[96,49899,31216],{"class":106},[96,49901,152],{"class":102},[96,49903,31223],{"class":211},[96,49905,1687],{"class":102},[96,49907,31228],{"class":106},[96,49909,1684],{"class":102},[96,49911,34098],{"class":211},[96,49913,49914,49916,49918],{"class":98,"line":7999},[96,49915,31268],{"class":106},[96,49917,152],{"class":102},[96,49919,32268],{"class":106},[96,49921,49922],{"class":98,"line":8005},[96,49923,2383],{"emptyLinePlaceholder":23},[96,49925,49926],{"class":98,"line":8017},[96,49927,34115],{"class":165},[96,49929,49930,49932,49934],{"class":98,"line":8029},[96,49931,34120],{"class":106},[96,49933,152],{"class":102},[96,49935,32321],{"class":155},[96,49937,49938,49940,49942],{"class":98,"line":8041},[96,49939,34129],{"class":106},[96,49941,152],{"class":102},[96,49943,3068],{"class":155},[96,49945,49946],{"class":98,"line":9700},[96,49947,2383],{"emptyLinePlaceholder":23},[96,49949,49950],{"class":98,"line":9725},[96,49951,34142],{"class":165},[96,49953,49954],{"class":98,"line":9748},[96,49955,34147],{"class":165},[96,49957,49958],{"class":98,"line":9772},[96,49959,34152],{"class":165},[96,49961,49962,49964],{"class":98,"line":9777},[96,49963,34157],{"class":102},[96,49965,32863],{"class":106},[96,49967,49968],{"class":98,"line":9782},[96,49969,34164],{"class":165},[96,49971,49972,49974,49976,49978],{"class":98,"line":9787},[96,49973,3386],{"class":102},[96,49975,34171],{"class":106},[96,49977,26022],{"class":102},[96,49979,34176],{"class":106},[96,49981,49982,49984,49986],{"class":98,"line":9796},[96,49983,34181],{"class":106},[96,49985,152],{"class":102},[96,49987,34186],{"class":106},[96,49989,49990,49992,49994],{"class":98,"line":9801},[96,49991,34191],{"class":106},[96,49993,152],{"class":102},[96,49995,34196],{"class":106},[96,49997,49998],{"class":98,"line":9807},[96,49999,34201],{"class":165},[96,50001,50002],{"class":98,"line":9828},[96,50003,32854],{"class":106},[96,50005,50006],{"class":98,"line":9834},[96,50007,34210],{"class":165},[96,50009,50010,50012,50014],{"class":98,"line":9848},[96,50011,32639],{"class":106},[96,50013,152],{"class":102},[96,50015,34219],{"class":106},[96,50017,50018],{"class":98,"line":9854},[96,50019,34224],{"class":165},[96,50021,50022,50024,50026,50028,50030,50032,50034],{"class":98,"line":9881},[96,50023,32656],{"class":106},[96,50025,152],{"class":102},[96,50027,32661],{"class":106},[96,50029,32664],{"class":5200},[96,50031,152],{"class":102},[96,50033,324],{"class":155},[96,50035,113],{"class":106},[96,50037,50038],{"class":98,"line":9890},[96,50039,34245],{"class":165},[96,50041,50042],{"class":98,"line":9896},[96,50043,34250],{"class":165},[96,50045,50046],{"class":98,"line":9904},[96,50047,34255],{"class":165},[96,50049,50050,50052,50054,50056,50058],{"class":98,"line":9909},[96,50051,34260],{"class":106},[96,50053,9461],{"class":102},[96,50055,32766],{"class":106},[96,50057,2932],{"class":102},[96,50059,34269],{"class":106},[96,50061,50062],{"class":98,"line":16588},[96,50063,34274],{"class":165},[96,50065,50066,50068,50070,50072,50074],{"class":98,"line":16594},[96,50067,34279],{"class":106},[96,50069,9461],{"class":102},[96,50071,34284],{"class":106},[96,50073,298],{"class":155},[96,50075,113],{"class":106},[96,50077,50078],{"class":98,"line":16617},[96,50079,2383],{"emptyLinePlaceholder":23},[96,50081,50082],{"class":98,"line":16623},[96,50083,34297],{"class":165},[96,50085,50086,50088,50090,50092,50094],{"class":98,"line":16646},[96,50087,34302],{"class":106},[96,50089,152],{"class":102},[96,50091,34307],{"class":106},[96,50093,691],{"class":102},[96,50095,34312],{"class":106},[96,50097,50098],{"class":98,"line":16660},[96,50099,34317],{"class":165},[96,50101,50102,50104,50106,50108],{"class":98,"line":16680},[96,50103,32430],{"class":155},[96,50105,107],{"class":106},[96,50107,34326],{"class":211},[96,50109,34329],{"class":106},[96,50111,50112],{"class":98,"line":16686},[96,50113,2383],{"emptyLinePlaceholder":23},[96,50115,50116],{"class":98,"line":16697},[96,50117,34338],{"class":165},[96,50119,50120,50122,50124,50126,50128],{"class":98,"line":16720},[96,50121,1514],{"class":102},[96,50123,31199],{"class":155},[96,50125,2932],{"class":102},[96,50127,31204],{"class":211},[96,50129,3722],{"class":106},[96,50131,50132],{"class":98,"line":16742},[96,50133,34355],{"class":165},[96,50135,50136,50138,50140],{"class":98,"line":16747},[96,50137,31268],{"class":106},[96,50139,152],{"class":102},[96,50141,44530],{"class":106},[96,50143,50144],{"class":98,"line":16753},[96,50145,34368],{"class":165},[96,50147,50148],{"class":98,"line":16767},[96,50149,34373],{"class":165},[96,50151,50152,50154,50156],{"class":98,"line":16780},[96,50153,34378],{"class":106},[96,50155,34381],{"class":211},[96,50157,30476],{"class":106},[96,50159,50160],{"class":98,"line":16785},[96,50161,34388],{"class":165},[96,50163,50164,50166,50168],{"class":98,"line":16799},[96,50165,34001],{"class":106},[96,50167,152],{"class":102},[96,50169,34397],{"class":106},[96,50171,50172],{"class":98,"line":16804},[96,50173,34402],{"class":165},[96,50175,50176],{"class":98,"line":16810},[96,50177,34407],{"class":106},[96,50179,50180],{"class":98,"line":16815},[96,50181,2383],{"emptyLinePlaceholder":23},[96,50183,50184],{"class":98,"line":16829},[96,50185,34416],{"class":165},[96,50187,50188],{"class":98,"line":16834},[96,50189,34421],{"class":165},[96,50191,50192,50194,50196,50198,50200,50202,50204],{"class":98,"line":16839},[96,50193,31216],{"class":106},[96,50195,152],{"class":102},[96,50197,31223],{"class":211},[96,50199,1687],{"class":102},[96,50201,31228],{"class":106},[96,50203,1684],{"class":102},[96,50205,34098],{"class":211},[96,50207,50208,50210,50212],{"class":98,"line":16853},[96,50209,31268],{"class":106},[96,50211,152],{"class":102},[96,50213,32268],{"class":106},[96,50215,50216],{"class":98,"line":16865},[96,50217,34450],{"class":165},[96,50219,50220],{"class":98,"line":16870},[96,50221,34455],{"class":165},[96,50223,50224,50226,50228,50230,50233,50235,50238],{"class":98,"line":16883},[96,50225,34460],{"class":106},[96,50227,152],{"class":102},[96,50229,997],{"class":106},[96,50231,50232],{"class":211},"'猫'",[96,50234,485],{"class":106},[96,50236,50237],{"class":211},"'狗'",[96,50239,33225],{"class":106},[96,50241,50242,50244],{"class":98,"line":16888},[96,50243,34157],{"class":102},[96,50245,32863],{"class":106},[96,50247,50248],{"class":98,"line":16893},[96,50249,34525],{"class":165},[96,50251,50252,50254,50256,50258],{"class":98,"line":16898},[96,50253,3386],{"class":102},[96,50255,34532],{"class":106},[96,50257,26022],{"class":102},[96,50259,34176],{"class":106},[96,50261,50262,50264,50266],{"class":98,"line":16911},[96,50263,32589],{"class":106},[96,50265,152],{"class":102},[96,50267,32594],{"class":106},[96,50269,50270,50272,50274],{"class":98,"line":16916},[96,50271,32604],{"class":106},[96,50273,152],{"class":102},[96,50275,32609],{"class":106},[96,50277,50278],{"class":98,"line":32612},[96,50279,2383],{"emptyLinePlaceholder":23},[96,50281,50282],{"class":98,"line":32618},[96,50283,34561],{"class":165},[96,50285,50286],{"class":98,"line":32624},[96,50287,32854],{"class":106},[96,50289,50290],{"class":98,"line":32630},[96,50291,34570],{"class":165},[96,50293,50294,50296,50298],{"class":98,"line":32636},[96,50295,32639],{"class":106},[96,50297,152],{"class":102},[96,50299,32644],{"class":106},[96,50301,50302],{"class":98,"line":32647},[96,50303,34583],{"class":165},[96,50305,50306,50308,50310,50312,50314,50316,50318],{"class":98,"line":32653},[96,50307,32656],{"class":106},[96,50309,152],{"class":102},[96,50311,32661],{"class":106},[96,50313,32664],{"class":5200},[96,50315,152],{"class":102},[96,50317,324],{"class":155},[96,50319,113],{"class":106},[96,50321,50322],{"class":98,"line":32673},[96,50323,34604],{"class":165},[96,50325,50326,50328,50330],{"class":98,"line":32679},[96,50327,34609],{"class":106},[96,50329,152],{"class":102},[96,50331,34614],{"class":106},[96,50333,50334,50336,50338],{"class":98,"line":32690},[96,50335,34619],{"class":106},[96,50337,152],{"class":102},[96,50339,34624],{"class":106},[96,50341,50342,50344,50346,50348,50350,50352,50354,50356],{"class":98,"line":32696},[96,50343,34629],{"class":155},[96,50345,107],{"class":106},[96,50347,34634],{"class":211},[96,50349,34637],{"class":106},[96,50351,34640],{"class":211},[96,50353,485],{"class":106},[96,50355,34645],{"class":211},[96,50357,34648],{"class":106},[5110,50359,50360],{},"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":18,"searchDepth":19,"depth":19,"links":50362},[50363,50364,50365,50366],{"id":30570,"depth":1162,"text":30571},{"id":37818,"depth":1162,"text":37819},{"id":41251,"depth":1162,"text":41252},{"id":45260,"depth":1162,"text":45261},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30562,"description":23361},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50373,"title":50374,"body":50375,"description":23361,"extension":21,"meta":50382,"navigation":23,"path":50383,"seo":50384,"stem":50385,"__hash__":50386},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50376,"toc":50380},[50377],[10,50378,50374],{"id":50379},"_3yolo模型学习",{"title":18,"searchDepth":19,"depth":19,"links":50381},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50374,"description":23361},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50388,"title":50389,"body":50390,"description":50397,"extension":21,"meta":50398,"navigation":23,"path":50400,"seo":50401,"stem":50402,"__hash__":50403},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50391,"toc":50395},[50392],[14,50393,50394],{},"yolo模型还未补充",{"title":18,"searchDepth":19,"depth":19,"links":50396},[],"深度学习学习",{"category":50399},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50389,"description":50397},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50405,"title":50406,"body":50407,"description":23361,"extension":21,"meta":50432,"navigation":23,"path":50433,"seo":50434,"stem":50435,"__hash__":50436},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50408,"toc":50430},[50409,50412,50415,50420,50427],[10,50410,50406],{"id":50411},"_1工具",[14,50413,50414],{},"提示错误插件：有问题会提前报错",[14,50416,50417],{},[1445,50418],{"alt":18,"src":50419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[14,50421,50422],{},[345,50423,50426],{"href":50424,"rel":50425},"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",[23850],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[14,50428,50429],{},"alt键加上下箭头可以实现语句的移动",{"title":18,"searchDepth":19,"depth":19,"links":50431},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50406,"description":23361},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50438,"title":50439,"body":50440,"description":23361,"extension":21,"meta":53304,"navigation":23,"path":53305,"seo":53306,"stem":53307,"__hash__":53308},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50441,"toc":53255},[50442,50445,50449,50453,50458,50461,50466,50470,50477,50482,50489,50494,50501,50506,50510,50515,50518,50522,50527,50531,50536,50539,50542,50545,50548,50551,50554,50557,50560,50565,50570,50575,50579,50582,50585,50589,50594,50597,50605,50610,50627,50635,50640,50645,50650,50655,50660,50663,50668,50673,50677,50686,50691,50696,50700,50705,50708,50712,50717,50725,50730,50735,50738,50743,50748,50753,50756,50759,50762,50767,50772,50775,50780,50783,50788,50791,50794,50797,50802,50805,50808,50823,50828,50833,50838,50841,50844,50847,50861,50864,50869,50874,50877,50880,50883,50886,50889,50892,50895,50899,50903,50908,50912,50915,50920,50925,50928,50933,50936,50940,50945,50948,50951,50954,50957,50960,50963,50966,50969,50972,50976,50981,50986,50991,50994,50997,51001,51006,51009,51013,51016,51019,51024,51027,51030,51034,51038,51041,51046,51051,51054,51083,51088,51093,51098,51103,51107,51112,51116,51121,51124,51128,51132,51137,51141,51146,51151,51155,51160,51163,51165,51168,51173,51177,51182,51186,51190,51195,51200,51205,51210,51214,51219,51224,51229,51232,51235,51240,51243,51248,51253,51258,51263,51267,52074,52078,52421,52426,52429,52432,52435,52438,52441,52444,52447,52450,52452,52455,52457,52460,52464,52469,52472,52475,52478,52482,52487,52492,52512,52515,52519,52524,52529,52546,52550,52579,52583,52605,52607,52646,52654,52660,52664,52667,52670,52675,52680,52683,52686,52689,52694,52699,52702,52705,52708,52711,52714,52717,52720,52723,52726,52729,52732,52734,52737,52740,52743,52746,52749,52752,52755,52758,52762,52767,52770,52775,52778,52781,52784,52787,52790,52793,52796,52798,52801,52804,52807,52810,52813,52816,52820,52823,52832,52835,52840,52843,52848,52851,52854,52857,52860,52863,52866,52869,52873,52877,52880,52883,52888,52893,52898,52902,52907,52912,52915,52918,52921,52924,52927,52932,52935,52940,52942,52947,52950,52954,52959,52962,52965,52970,52974,52977,52982,52985,52988,53017,53022,53025,53028,53031,53034,53037,53041,53044,53130,53134,53137,53142,53147,53154,53157,53160,53163,53166,53169,53174,53179,53182,53185,53188,53191,53194,53197,53200,53203,53206,53208,53211,53215,53220,53225,53230,53233,53238,53243,53246,53249,53252],[10,50443,50439],{"id":50444},"_2基础语法",[38,50446,50448],{"id":50447},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[67,50450,50452],{"id":50451},"_211-js组成","2.1.1 js组成",[50,50454,50455],{},[53,50456,50457],{},"js是编程语言，html和css不是编程语言，是标记语言",[14,50459,50460],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[50,50462,50463],{"start":19},[53,50464,50465],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[67,50467,50469],{"id":50468},"_212-js书写位置","2.1.2 js书写位置",[50,50471,50472],{},[53,50473,50474],{},[256,50475,50476],{},"内部 JavaScript",[14,50478,50479],{},[1445,50480],{"alt":18,"src":50481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[50,50483,50484],{"start":19},[53,50485,50486],{},[256,50487,50488],{},"外部 JavaScript",[14,50490,50491],{},[1445,50492],{"alt":18,"src":50493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[50,50495,50496],{"start":1162},[53,50497,50498],{},[256,50499,50500],{},"内联 JavaScript",[14,50502,50503],{},[1445,50504],{"alt":18,"src":50505},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[67,50507,50509],{"id":50508},"_213-javascript注释","2.1.3 JavaScript注释",[14,50511,50512],{},[1445,50513],{"alt":18,"src":50514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[14,50516,50517],{},"alt+shift+a一定要记住！",[67,50519,50521],{"id":50520},"_214-javascript结束符","2.1.4 JavaScript结束符",[14,50523,50524],{},[1445,50525],{"alt":18,"src":50526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[67,50528,50530],{"id":50529},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[50,50532,50533],{},[53,50534,50535],{},"输出语法：",[14,50537,50538],{},"①document.write('要出的内容')",[14,50540,50541],{},"向body内输出内容；",[14,50543,50544],{},"如果输出的内容写的是标签，也会被解析cheng",[14,50546,50547],{},"②alert('要出的内容')",[14,50549,50550],{},"页面弹出警告对话框",[14,50552,50553],{},"③console.log('控制台打印')",[14,50555,50556],{},"控制台输出语法，程序员调试使用",[14,50558,50559],{},"输入log就行，自动生成：",[14,50561,50562],{},[1445,50563],{"alt":18,"src":50564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[50,50566,50567],{"start":19},[53,50568,50569],{},"输入语法：",[14,50571,50572],{},[1445,50573],{"alt":18,"src":50574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[67,50576,50578],{"id":50577},"_2116-字面量","21.1.6 字面量",[14,50580,50581],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[14,50583,50584],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[38,50586,50588],{"id":50587},"_22-变量","2.2 变量",[50,50590,50591],{},[53,50592,50593],{},"变量声明",[14,50595,50596],{},"let 变量名",[1114,50598,50599,50602],{},[53,50600,50601],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[53,50603,50604],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[50,50606,50607],{"start":19},[53,50608,50609],{},"变量赋值",[87,50611,50615],{"className":50612,"code":50613,"language":50614,"meta":18,"style":18},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[93,50616,50617,50622],{"__ignoreMap":18},[96,50618,50619],{"class":98,"line":99},[96,50620,50621],{"class":106},"let age\n",[96,50623,50624],{"class":98,"line":19},[96,50625,50626],{"class":106},"age=18\n",[50,50628,50629,50632],{"start":1162},[53,50630,50631],{},"连这些（变量的初始化）：let age=18",[53,50633,50634],{},"更新变量",[14,50636,50637],{},[1445,50638],{"alt":18,"src":50639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[50,50641,50642],{"start":1183},[53,50643,50644],{},"声明多个变量",[14,50646,50647],{},[1445,50648],{"alt":18,"src":50649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[50,50651,50652],{"start":1197},[53,50653,50654],{},"变量命名规则与规范",[14,50656,50657],{},[1445,50658],{"alt":18,"src":50659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[14,50661,50662],{},"遵守小驼峰！",[50,50664,50665],{"start":1203},[53,50666,50667],{},"变量拓展-let和var的区别",[14,50669,50670],{},[1445,50671],{"alt":18,"src":50672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[38,50674,50676],{"id":50675},"_23-数组","2.3 数组",[87,50678,50680],{"className":50612,"code":50679,"language":50614,"meta":18,"style":18},"let arr = []\n",[93,50681,50682],{"__ignoreMap":18},[96,50683,50684],{"class":98,"line":99},[96,50685,50679],{"class":106},[14,50687,50688],{},[1445,50689],{"alt":18,"src":50690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[14,50692,50693],{},[1445,50694],{"alt":18,"src":50695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[38,50697,50699],{"id":50698},"_24-常量","2.4 常量",[14,50701,50702],{},[1445,50703],{"alt":18,"src":50704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[14,50706,50707],{},"const — 类似于 let ，但是变量的值无法被修改",[38,50709,50711],{"id":50710},"_25-数据类型","2.5 数据类型",[14,50713,50714],{},[1445,50715],{"alt":18,"src":50716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[50,50718,50719,50722],{},[53,50720,50721],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[53,50723,50724],{},"算数运算符：",[14,50726,50727],{},[1445,50728],{"alt":18,"src":50729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[50,50731,50732],{"start":1162},[53,50733,50734],{},"数字类型（Number）",[14,50736,50737],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[14,50739,50740],{},[1445,50741],{"alt":18,"src":50742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[50,50744,50745],{"start":1177},[53,50746,50747],{},"字符串类型（string）",[14,50749,50750],{},[1445,50751],{"alt":18,"src":50752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[14,50754,50755],{},"反引号也是可以使用的",[14,50757,50758],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[14,50760,50761],{},"例如：document.write(\"我今年\"+age+\"岁\")",[50,50763,50764],{"start":1183},[53,50765,50766],{},"模板字符串",[14,50768,50769],{},[1445,50770],{"alt":18,"src":50771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[14,50773,50774],{},"类似于python的字符串格式化",[50,50776,50777],{"start":1197},[53,50778,50779],{},"布尔类型",[14,50781,50782],{},"true 和 false",[50,50784,50785],{"start":1203},[53,50786,50787],{},"未定义类型（underfined）",[14,50789,50790],{},"表示没有赋值",[14,50792,50793],{},"未定义类型是比较特殊的类型，只有一个值undefined",[14,50795,50796],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[50,50798,50799],{"start":1294},[53,50800,50801],{},"null（空类型）",[14,50803,50804],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[14,50806,50807],{},"赋值了，但是内容为空",[87,50809,50811],{"className":50612,"code":50810,"language":50614,"meta":18,"style":18},"typeof null\n输出的是'object'，是一个对象数据类型\n",[93,50812,50813,50818],{"__ignoreMap":18},[96,50814,50815],{"class":98,"line":99},[96,50816,50817],{"class":106},"typeof null\n",[96,50819,50820],{"class":98,"line":19},[96,50821,50822],{"class":106},"输出的是'object'，是一个对象数据类型\n",[50,50824,50825],{"start":1300},[53,50826,50827],{},"控制台检测数据类型",[14,50829,50830],{},[1445,50831],{"alt":18,"src":50832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[50,50834,50835],{"start":1312},[53,50836,50837],{},"类型转换",[14,50839,50840],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[14,50842,50843],{},"转换方式：隐式转换和显示转换",[14,50845,50846],{},"①隐式转换",[1114,50848,50849,50852,50855,50858],{},[53,50850,50851],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[53,50853,50854],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[53,50856,50857],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[53,50859,50860],{},"任何数据和字符串相加结果都是字符串",[14,50862,50863],{},"②显示转换",[14,50865,50866],{},[1445,50867],{"alt":18,"src":50868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[14,50870,50871],{},[1445,50872],{"alt":18,"src":50873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[14,50875,50876],{},"在输入的时候要用好隐式转换，简单写起来",[14,50878,50879],{},"let num = +prompt(’请输入数字：‘)",[14,50881,50882],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[14,50884,50885],{},"console.log(parseInt('12.333px'))",[14,50887,50888],{},"输出为：12",[14,50890,50891],{},"console.log(parseInt('a'a'a12.333px'))",[14,50893,50894],{},"输出：NaN",[38,50896,50898],{"id":50897},"_26-运算符","2.6 运算符",[67,50900,50902],{"id":50901},"_261-赋值运算符","2.6.1 赋值运算符",[14,50904,50905],{},[1445,50906],{"alt":18,"src":50907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[67,50909,50911],{"id":50910},"_262-一元运算符","2.6.2 一元运算符",[14,50913,50914],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[14,50916,50917],{},[1445,50918],{"alt":18,"src":50919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[14,50921,50922],{},[1445,50923],{"alt":18,"src":50924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[14,50926,50927],{},"两者的区别：",[14,50929,50930],{},[1445,50931],{"alt":18,"src":50932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[14,50934,50935],{},"前置先自加；后置后加，代码执行完之后再加",[67,50937,50939],{"id":50938},"_263-比较运算符","2.6.3 比较运算符",[14,50941,50942],{},[1445,50943],{"alt":18,"src":50944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[14,50946,50947],{},"比较运算符也有隐式转换",[14,50949,50950],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[14,50952,50953],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[14,50955,50956],{},"要使用三等，开发的时候",[14,50958,50959],{},"NaN不等于任何人，包括它自己",[14,50961,50962],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[14,50964,50965],{},"7\u002F10=0.7",[14,50967,50968],{},"最后：0.5+0.2=0.7",[14,50970,50971],{},"字符串比较，比较的是字符对应的ASCII码",[67,50973,50975],{"id":50974},"_264-逻辑运算符","2.6.4 逻辑运算符",[14,50977,50978],{},[1445,50979],{"alt":18,"src":50980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[14,50982,50983],{},[1445,50984],{"alt":18,"src":50985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[14,50987,50988],{},[1445,50989],{"alt":18,"src":50990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[14,50992,50993],{},"上述题目选D",[14,50995,50996],{},"与真2假1；或真1假2",[67,50998,51000],{"id":50999},"_265-运算符优先级","2.6.5 运算符优先级",[14,51002,51003],{},[1445,51004],{"alt":18,"src":51005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[14,51007,51008],{},"先算逻辑与，后算逻辑或",[38,51010,51012],{"id":51011},"_27-语句","2.7 语句",[14,51014,51015],{},"表达式：是可以被求值的代码，会有结果给我们",[14,51017,51018],{},"语句：语句是可以被执行的代码，例如prompt()",[14,51020,51021],{},[1445,51022],{"alt":18,"src":51023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[14,51025,51026],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[14,51028,51029],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[67,51031,51033],{"id":51032},"_271-分支语句","2.7.1 分支语句",[21982,51035,51037],{"id":51036},"_2711-if分支语句","2.7.1.1 if分支语句",[14,51039,51040],{},"if语句单行简单的话，可以不写{}，写在一行就行",[50,51042,51043],{},[53,51044,51045],{},"单分支语句",[14,51047,51048],{},[1445,51049],{"alt":18,"src":51050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[14,51052,51053],{},"除了0，所有数字都为真",[87,51055,51057],{"className":50612,"code":51056,"language":50614,"meta":18,"style":18},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[93,51058,51059,51064,51069,51074,51078],{"__ignoreMap":18},[96,51060,51061],{"class":98,"line":99},[96,51062,51063],{"class":106},"if（0) {\n",[96,51065,51066],{"class":98,"line":19},[96,51067,51068],{"class":106},"    let a=1\n",[96,51070,51071],{"class":98,"line":1162},[96,51072,51073],{"class":106},"    alert(typeof a)\n",[96,51075,51076],{"class":98,"line":1177},[96,51077,1548],{"class":106},[96,51079,51080],{"class":98,"line":1183},[96,51081,51082],{"class":106},"不输出，括号为假\n",[50,51084,51085],{"start":19},[53,51086,51087],{},"双分支语句",[14,51089,51090],{},[1445,51091],{"alt":18,"src":51092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[50,51094,51095],{"start":1162},[53,51096,51097],{},"多分支语句",[14,51099,51100],{},[1445,51101],{"alt":18,"src":51102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[21982,51104,51106],{"id":51105},"_2712-三元运算符","2.7.1.2 三元运算符",[14,51108,51109],{},[1445,51110],{"alt":18,"src":51111},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[21982,51113,51115],{"id":51114},"_2713-switch语句","2.7.1.3 switch语句",[14,51117,51118],{},[1445,51119],{"alt":18,"src":51120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[14,51122,51123],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[67,51125,51127],{"id":51126},"_272-循环语句","2.7.2 循环语句",[21982,51129,51131],{"id":51130},"_2721-断点演示","2.7.2.1 断点演示",[14,51133,51134],{},[1445,51135],{"alt":18,"src":51136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[21982,51138,51140],{"id":51139},"_2722-while循环","2.7.2.2 while循环",[14,51142,51143],{},[1445,51144],{"alt":18,"src":51145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[14,51147,51148],{},[1445,51149],{"alt":18,"src":51150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[21982,51152,51154],{"id":51153},"_2723-for循环","2.7.2.3 for循环",[14,51156,51157],{},[1445,51158],{"alt":18,"src":51159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[14,51161,51162],{},"for(;;) {",[14,51164,1053],{},[14,51166,51167],{},"表示无限循环",[14,51169,51170],{},[1445,51171],{"alt":18,"src":51172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[21982,51174,51176],{"id":51175},"_2724-循环的退出","2.7.2.4 循环的退出",[14,51178,51179],{},[1445,51180],{"alt":18,"src":51181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[38,51183,51185],{"id":51184},"_28-数组","2.8 数组",[67,51187,51189],{"id":51188},"_281-基础认识","2.8.1 基础认识",[14,51191,51192],{},[1445,51193],{"alt":18,"src":51194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[14,51196,51197],{},[1445,51198],{"alt":18,"src":51199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[14,51201,51202],{},[1445,51203],{"alt":18,"src":51204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[14,51206,51207],{},[1445,51208],{"alt":18,"src":51209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[67,51211,51213],{"id":51212},"_282-操作数组","2.8.2 操作数组",[14,51215,51216],{},[1445,51217],{"alt":18,"src":51218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[50,51220,51221],{},[53,51222,51223],{},"添加元素",[14,51225,51226],{},[1445,51227],{"alt":18,"src":51228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[14,51230,51231],{},"console.log(arr.push('green'))",[14,51233,51234],{},"输出结果：为新数组的长度",[14,51236,51237],{},[1445,51238],{"alt":18,"src":51239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[14,51241,51242],{},"push用的非常多，一定要记住",[50,51244,51245],{},[53,51246,51247],{},"删除元素",[14,51249,51250],{},[1445,51251],{"alt":18,"src":51252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[14,51254,51255],{},[1445,51256],{"alt":18,"src":51257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[14,51259,51260],{},[1445,51261],{"alt":18,"src":51262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[67,51264,51266],{"id":51265},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[87,51268,51270],{"className":50612,"code":51269,"language":50614,"meta":18,"style":18},"\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",[93,51271,51272,51287,51303,51307,51316,51334,51358,51380,51394,51402,51409,51421,51432,51436,51440,51447,51459,51474,51487,51506,51523,51538,51550,51562,51574,51578,51582,51593,51603,51615,51627,51639,51650,51654,51658,51670,51674,51688,51692,51696,51707,51721,51733,51747,51751,51760,51769,51773,51782,51786,51795,51800,51805,51818,51846,51851,51856,51881,51886,51890,51895,51900,51915,51919,51924,51954,51966,51982,51998,52012,52017,52024,52028,52033,52046,52054,52062,52066],{"__ignoreMap":18},[96,51273,51274,51277,51281,51284],{"class":98,"line":99},[96,51275,51276],{"class":106},"\u003C!",[96,51278,51280],{"class":51279},"s9eBZ","DOCTYPE",[96,51282,51283],{"class":1946}," html",[96,51285,51286],{"class":106},">\n",[96,51288,51289,51291,51293,51296,51298,51301],{"class":98,"line":19},[96,51290,1017],{"class":106},[96,51292,50614],{"class":51279},[96,51294,51295],{"class":1946}," lang",[96,51297,152],{"class":106},[96,51299,51300],{"class":211},"\"en\"",[96,51302,51286],{"class":106},[96,51304,51305],{"class":98,"line":1162},[96,51306,2383],{"emptyLinePlaceholder":23},[96,51308,51309,51311,51314],{"class":98,"line":1177},[96,51310,1017],{"class":106},[96,51312,51313],{"class":51279},"head",[96,51315,51286],{"class":106},[96,51317,51318,51321,51324,51327,51329,51332],{"class":98,"line":1183},[96,51319,51320],{"class":106},"    \u003C",[96,51322,51323],{"class":51279},"meta",[96,51325,51326],{"class":1946}," charset",[96,51328,152],{"class":106},[96,51330,51331],{"class":211},"\"UTF-8\"",[96,51333,51286],{"class":106},[96,51335,51336,51338,51340,51343,51345,51348,51351,51353,51356],{"class":98,"line":1197},[96,51337,51320],{"class":106},[96,51339,51323],{"class":51279},[96,51341,51342],{"class":1946}," http-equiv",[96,51344,152],{"class":106},[96,51346,51347],{"class":211},"\"X-UA-Compatible\"",[96,51349,51350],{"class":1946}," content",[96,51352,152],{"class":106},[96,51354,51355],{"class":211},"\"IE=edge\"",[96,51357,51286],{"class":106},[96,51359,51360,51362,51364,51366,51368,51371,51373,51375,51378],{"class":98,"line":1203},[96,51361,51320],{"class":106},[96,51363,51323],{"class":51279},[96,51365,14904],{"class":1946},[96,51367,152],{"class":106},[96,51369,51370],{"class":211},"\"viewport\"",[96,51372,51350],{"class":1946},[96,51374,152],{"class":106},[96,51376,51377],{"class":211},"\"width=device-width, initial-scale=1.0\"",[96,51379,51286],{"class":106},[96,51381,51382,51384,51387,51390,51392],{"class":98,"line":1294},[96,51383,51320],{"class":106},[96,51385,51386],{"class":51279},"title",[96,51388,51389],{"class":106},">Document\u003C\u002F",[96,51391,51386],{"class":51279},[96,51393,51286],{"class":106},[96,51395,51396,51398,51400],{"class":98,"line":1300},[96,51397,51320],{"class":106},[96,51399,5110],{"class":51279},[96,51401,51286],{"class":106},[96,51403,51404,51407],{"class":98,"line":1312},[96,51405,51406],{"class":51279},"        *",[96,51408,15556],{"class":106},[96,51410,51411,51414,51417,51419],{"class":98,"line":1595},[96,51412,51413],{"class":155},"            margin",[96,51415,51416],{"class":106},": ",[96,51418,298],{"class":155},[96,51420,1273],{"class":106},[96,51422,51423,51426,51428,51430],{"class":98,"line":1600},[96,51424,51425],{"class":155},"            padding",[96,51427,51416],{"class":106},[96,51429,298],{"class":155},[96,51431,1273],{"class":106},[96,51433,51434],{"class":98,"line":1606},[96,51435,2512],{"class":106},[96,51437,51438],{"class":98,"line":1611},[96,51439,2383],{"emptyLinePlaceholder":23},[96,51441,51442,51445],{"class":98,"line":1625},[96,51443,51444],{"class":1946},"        .box",[96,51446,15556],{"class":106},[96,51448,51449,51452,51454,51457],{"class":98,"line":1630},[96,51450,51451],{"class":155},"            display",[96,51453,51416],{"class":106},[96,51455,51456],{"class":155},"flex",[96,51458,1273],{"class":106},[96,51460,51461,51464,51466,51469,51472],{"class":98,"line":1636},[96,51462,51463],{"class":155},"            width",[96,51465,51416],{"class":106},[96,51467,51468],{"class":155},"700",[96,51470,51471],{"class":102},"px",[96,51473,1273],{"class":106},[96,51475,51476,51479,51481,51483,51485],{"class":98,"line":1657},[96,51477,51478],{"class":155},"            height",[96,51480,51416],{"class":106},[96,51482,3956],{"class":155},[96,51484,51471],{"class":102},[96,51486,1273],{"class":106},[96,51488,51489,51492,51494,51496,51498,51501,51504],{"class":98,"line":1662},[96,51490,51491],{"class":155},"            border-left",[96,51493,51416],{"class":106},[96,51495,324],{"class":155},[96,51497,51471],{"class":102},[96,51499,51500],{"class":155}," solid",[96,51502,51503],{"class":155}," pink",[96,51505,1273],{"class":106},[96,51507,51508,51511,51513,51515,51517,51519,51521],{"class":98,"line":1676},[96,51509,51510],{"class":155},"            border-bottom",[96,51512,51416],{"class":106},[96,51514,324],{"class":155},[96,51516,51471],{"class":102},[96,51518,51500],{"class":155},[96,51520,51503],{"class":155},[96,51522,1273],{"class":106},[96,51524,51525,51527,51529,51531,51533,51536],{"class":98,"line":1681},[96,51526,51413],{"class":155},[96,51528,51416],{"class":106},[96,51530,763],{"class":155},[96,51532,51471],{"class":102},[96,51534,51535],{"class":155}," auto",[96,51537,1273],{"class":106},[96,51539,51540,51543,51545,51548],{"class":98,"line":1710},[96,51541,51542],{"class":155},"            justify-content",[96,51544,51416],{"class":106},[96,51546,51547],{"class":155},"space-around",[96,51549,1273],{"class":106},[96,51551,51552,51555,51557,51560],{"class":98,"line":1715},[96,51553,51554],{"class":155},"            align-items",[96,51556,51416],{"class":106},[96,51558,51559],{"class":155},"flex-end",[96,51561,1273],{"class":106},[96,51563,51564,51567,51569,51572],{"class":98,"line":1732},[96,51565,51566],{"class":155},"            text-align",[96,51568,51416],{"class":106},[96,51570,51571],{"class":155},"center",[96,51573,1273],{"class":106},[96,51575,51576],{"class":98,"line":1737},[96,51577,2512],{"class":106},[96,51579,51580],{"class":98,"line":1742},[96,51581,2383],{"emptyLinePlaceholder":23},[96,51583,51584,51586,51588,51591],{"class":98,"line":1747},[96,51585,51444],{"class":1946},[96,51587,1067],{"class":102},[96,51589,51590],{"class":51279},"div",[96,51592,15556],{"class":106},[96,51594,51595,51597,51599,51601],{"class":98,"line":1761},[96,51596,51451],{"class":155},[96,51598,51416],{"class":106},[96,51600,51456],{"class":155},[96,51602,1273],{"class":106},[96,51604,51605,51607,51609,51611,51613],{"class":98,"line":1766},[96,51606,51463],{"class":155},[96,51608,51416],{"class":106},[96,51610,763],{"class":155},[96,51612,51471],{"class":102},[96,51614,1273],{"class":106},[96,51616,51617,51620,51622,51625],{"class":98,"line":2560},[96,51618,51619],{"class":155},"            background-color",[96,51621,51416],{"class":106},[96,51623,51624],{"class":155},"pink",[96,51626,1273],{"class":106},[96,51628,51629,51632,51634,51637],{"class":98,"line":2574},[96,51630,51631],{"class":155},"            flex-direction",[96,51633,51416],{"class":106},[96,51635,51636],{"class":155},"column",[96,51638,1273],{"class":106},[96,51640,51641,51643,51645,51648],{"class":98,"line":2582},[96,51642,51542],{"class":155},[96,51644,51416],{"class":106},[96,51646,51647],{"class":155},"space-between",[96,51649,1273],{"class":106},[96,51651,51652],{"class":98,"line":2587},[96,51653,2512],{"class":106},[96,51655,51656],{"class":98,"line":2593},[96,51657,2383],{"emptyLinePlaceholder":23},[96,51659,51660,51662,51665,51668],{"class":98,"line":2599},[96,51661,51444],{"class":1946},[96,51663,51664],{"class":51279}," div",[96,51666,51667],{"class":51279}," span",[96,51669,15556],{"class":106},[96,51671,51672],{"class":98,"line":2604},[96,51673,2383],{"emptyLinePlaceholder":23},[96,51675,51676,51679,51681,51684,51686],{"class":98,"line":7932},[96,51677,51678],{"class":155},"            margin-top",[96,51680,51416],{"class":106},[96,51682,51683],{"class":155},"-20",[96,51685,51471],{"class":102},[96,51687,1273],{"class":106},[96,51689,51690],{"class":98,"line":7956},[96,51691,2512],{"class":106},[96,51693,51694],{"class":98,"line":7961},[96,51695,2383],{"emptyLinePlaceholder":23},[96,51697,51698,51700,51702,51705],{"class":98,"line":7967},[96,51699,51444],{"class":1946},[96,51701,51664],{"class":51279},[96,51703,51704],{"class":51279}," h4",[96,51706,15556],{"class":106},[96,51708,51709,51712,51714,51717,51719],{"class":98,"line":7994},[96,51710,51711],{"class":155},"            margin-bottom",[96,51713,51416],{"class":106},[96,51715,51716],{"class":155},"-35",[96,51718,51471],{"class":102},[96,51720,1273],{"class":106},[96,51722,51723,51725,51727,51729,51731],{"class":98,"line":7999},[96,51724,51463],{"class":155},[96,51726,51416],{"class":106},[96,51728,463],{"class":155},[96,51730,51471],{"class":102},[96,51732,1273],{"class":106},[96,51734,51735,51738,51740,51743,51745],{"class":98,"line":8005},[96,51736,51737],{"class":155},"            margin-left",[96,51739,51416],{"class":106},[96,51741,51742],{"class":155},"-10",[96,51744,51471],{"class":102},[96,51746,1273],{"class":106},[96,51748,51749],{"class":98,"line":8017},[96,51750,2512],{"class":106},[96,51752,51753,51756,51758],{"class":98,"line":8029},[96,51754,51755],{"class":106},"    \u003C\u002F",[96,51757,5110],{"class":51279},[96,51759,51286],{"class":106},[96,51761,51762,51765,51767],{"class":98,"line":8041},[96,51763,51764],{"class":106},"\u003C\u002F",[96,51766,51313],{"class":51279},[96,51768,51286],{"class":106},[96,51770,51771],{"class":98,"line":9700},[96,51772,2383],{"emptyLinePlaceholder":23},[96,51774,51775,51777,51780],{"class":98,"line":9725},[96,51776,1017],{"class":106},[96,51778,51779],{"class":51279},"body",[96,51781,51286],{"class":106},[96,51783,51784],{"class":98,"line":9748},[96,51785,2383],{"emptyLinePlaceholder":23},[96,51787,51788,51790,51793],{"class":98,"line":9772},[96,51789,51320],{"class":106},[96,51791,51792],{"class":51279},"script",[96,51794,51286],{"class":106},[96,51796,51797],{"class":98,"line":9777},[96,51798,51799],{"class":165},"        \u002F\u002F 1. 四次弹框效果\n",[96,51801,51802],{"class":98,"line":9782},[96,51803,51804],{"class":165},"        \u002F\u002F 声明一个新的数组\n",[96,51806,51807,51810,51813,51815],{"class":98,"line":9787},[96,51808,51809],{"class":102},"        let",[96,51811,51812],{"class":106}," arr ",[96,51814,152],{"class":102},[96,51816,51817],{"class":106}," []\n",[96,51819,51820,51822,51824,51827,51829,51831,51833,51835,51837,51840,51842,51844],{"class":98,"line":9796},[96,51821,3386],{"class":102},[96,51823,1641],{"class":106},[96,51825,51826],{"class":102},"let",[96,51828,9422],{"class":106},[96,51830,152],{"class":102},[96,51832,25097],{"class":155},[96,51834,9429],{"class":106},[96,51836,1571],{"class":102},[96,51838,51839],{"class":155}," 4",[96,51841,3197],{"class":106},[96,51843,2275],{"class":102},[96,51845,12426],{"class":106},[96,51847,51848],{"class":98,"line":9801},[96,51849,51850],{"class":165},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[96,51852,51853],{"class":98,"line":9807},[96,51854,51855],{"class":165},"            \u002F\u002F arr.push(num)\n",[96,51857,51858,51861,51864,51866,51869,51871,51874,51876,51879],{"class":98,"line":9828},[96,51859,51860],{"class":106},"            arr.",[96,51862,51863],{"class":1946},"push",[96,51865,107],{"class":106},[96,51867,51868],{"class":1946},"prompt",[96,51870,107],{"class":106},[96,51872,51873],{"class":211},"`请输入第${",[96,51875,548],{"class":106},[96,51877,51878],{"class":211},"}季度的数据:`",[96,51880,30476],{"class":106},[96,51882,51883],{"class":98,"line":9834},[96,51884,51885],{"class":165},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[96,51887,51888],{"class":98,"line":9848},[96,51889,2512],{"class":106},[96,51891,51892],{"class":98,"line":9854},[96,51893,51894],{"class":165},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[96,51896,51897],{"class":98,"line":9881},[96,51898,51899],{"class":165},"        \u002F\u002F 盒子开头\n",[96,51901,51902,51905,51908,51910,51913],{"class":98,"line":9890},[96,51903,51904],{"class":106},"        document.",[96,51906,51907],{"class":1946},"write",[96,51909,107],{"class":106},[96,51911,51912],{"class":211},"` \u003Cdiv class=\"box\">`",[96,51914,113],{"class":106},[96,51916,51917],{"class":98,"line":9896},[96,51918,2383],{"emptyLinePlaceholder":23},[96,51920,51921],{"class":98,"line":9904},[96,51922,51923],{"class":165},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[96,51925,51926,51928,51930,51932,51934,51936,51938,51940,51942,51945,51948,51950,51952],{"class":98,"line":9909},[96,51927,3386],{"class":102},[96,51929,1641],{"class":106},[96,51931,51826],{"class":102},[96,51933,9422],{"class":106},[96,51935,152],{"class":102},[96,51937,4076],{"class":155},[96,51939,9429],{"class":106},[96,51941,1017],{"class":102},[96,51943,51944],{"class":106}," arr.",[96,51946,51947],{"class":155},"length",[96,51949,3197],{"class":106},[96,51951,2275],{"class":102},[96,51953,12426],{"class":106},[96,51955,51956,51959,51961,51963],{"class":98,"line":16588},[96,51957,51958],{"class":106},"            document.",[96,51960,51907],{"class":1946},[96,51962,107],{"class":106},[96,51964,51965],{"class":211},"`\n",[96,51967,51968,51971,51973,51975,51977,51979],{"class":98,"line":16594},[96,51969,51970],{"class":211},"              \u003Cdiv style=\"height: ${",[96,51972,3863],{"class":106},[96,51974,997],{"class":211},[96,51976,548],{"class":106},[96,51978,1047],{"class":211},[96,51980,51981],{"class":211},"}px;\">\n",[96,51983,51984,51987,51989,51991,51993,51995],{"class":98,"line":16617},[96,51985,51986],{"class":211},"                \u003Cspan>${",[96,51988,3863],{"class":106},[96,51990,997],{"class":211},[96,51992,548],{"class":106},[96,51994,1047],{"class":211},[96,51996,51997],{"class":211},"}\u003C\u002Fspan>\n",[96,51999,52000,52003,52005,52007,52009],{"class":98,"line":16623},[96,52001,52002],{"class":211},"                \u003Ch4>第${",[96,52004,548],{"class":106},[96,52006,45545],{"class":102},[96,52008,25097],{"class":155},[96,52010,52011],{"class":211},"}季度\u003C\u002Fh4>\n",[96,52013,52014],{"class":98,"line":16646},[96,52015,52016],{"class":211},"              \u003C\u002Fdiv>          \n",[96,52018,52019,52022],{"class":98,"line":16660},[96,52020,52021],{"class":211},"            `",[96,52023,113],{"class":106},[96,52025,52026],{"class":98,"line":16680},[96,52027,2512],{"class":106},[96,52029,52030],{"class":98,"line":16686},[96,52031,52032],{"class":165},"        \u002F\u002F 盒子结尾\n",[96,52034,52035,52037,52039,52041,52044],{"class":98,"line":16697},[96,52036,51904],{"class":106},[96,52038,51907],{"class":1946},[96,52040,107],{"class":106},[96,52042,52043],{"class":211},"` \u003C\u002Fdiv>`",[96,52045,113],{"class":106},[96,52047,52048,52050,52052],{"class":98,"line":16720},[96,52049,51755],{"class":106},[96,52051,51792],{"class":51279},[96,52053,51286],{"class":106},[96,52055,52056,52058,52060],{"class":98,"line":16742},[96,52057,51764],{"class":106},[96,52059,51779],{"class":51279},[96,52061,51286],{"class":106},[96,52063,52064],{"class":98,"line":16747},[96,52065,2383],{"emptyLinePlaceholder":23},[96,52067,52068,52070,52072],{"class":98,"line":16753},[96,52069,51764],{"class":106},[96,52071,50614],{"class":51279},[96,52073,51286],{"class":106},[67,52075,52077],{"id":52076},"_284-冒泡排序","2.8.4 冒泡排序",[87,52079,52081],{"className":50612,"code":52080,"language":50614,"meta":18,"style":18},"\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",[93,52082,52083,52093,52107,52111,52119,52134,52154,52166,52174,52178,52186,52194,52226,52259,52296,52301,52320,52325,52338,52353,52369,52373,52378,52382,52392,52401,52409,52413],{"__ignoreMap":18},[96,52084,52085,52087,52089,52091],{"class":98,"line":99},[96,52086,51276],{"class":106},[96,52088,51280],{"class":51279},[96,52090,51283],{"class":1946},[96,52092,51286],{"class":106},[96,52094,52095,52097,52099,52101,52103,52105],{"class":98,"line":19},[96,52096,1017],{"class":106},[96,52098,50614],{"class":51279},[96,52100,51295],{"class":1946},[96,52102,152],{"class":106},[96,52104,51300],{"class":211},[96,52106,51286],{"class":106},[96,52108,52109],{"class":98,"line":1162},[96,52110,2383],{"emptyLinePlaceholder":23},[96,52112,52113,52115,52117],{"class":98,"line":1177},[96,52114,1017],{"class":106},[96,52116,51313],{"class":51279},[96,52118,51286],{"class":106},[96,52120,52121,52124,52126,52128,52130,52132],{"class":98,"line":1183},[96,52122,52123],{"class":106},"  \u003C",[96,52125,51323],{"class":51279},[96,52127,51326],{"class":1946},[96,52129,152],{"class":106},[96,52131,51331],{"class":211},[96,52133,51286],{"class":106},[96,52135,52136,52138,52140,52142,52144,52146,52148,52150,52152],{"class":98,"line":1197},[96,52137,52123],{"class":106},[96,52139,51323],{"class":51279},[96,52141,14904],{"class":1946},[96,52143,152],{"class":106},[96,52145,51370],{"class":211},[96,52147,51350],{"class":1946},[96,52149,152],{"class":106},[96,52151,51377],{"class":211},[96,52153,51286],{"class":106},[96,52155,52156,52158,52160,52162,52164],{"class":98,"line":1203},[96,52157,52123],{"class":106},[96,52159,51386],{"class":51279},[96,52161,51389],{"class":106},[96,52163,51386],{"class":51279},[96,52165,51286],{"class":106},[96,52167,52168,52170,52172],{"class":98,"line":1294},[96,52169,51764],{"class":106},[96,52171,51313],{"class":51279},[96,52173,51286],{"class":106},[96,52175,52176],{"class":98,"line":1300},[96,52177,2383],{"emptyLinePlaceholder":23},[96,52179,52180,52182,52184],{"class":98,"line":1312},[96,52181,1017],{"class":106},[96,52183,51779],{"class":51279},[96,52185,51286],{"class":106},[96,52187,52188,52190,52192],{"class":98,"line":1595},[96,52189,52123],{"class":106},[96,52191,51792],{"class":51279},[96,52193,51286],{"class":106},[96,52195,52196,52199,52201,52203,52206,52208,52210,52212,52214,52216,52218,52220,52222,52224],{"class":98,"line":1600},[96,52197,52198],{"class":102},"    let",[96,52200,51812],{"class":106},[96,52202,152],{"class":102},[96,52204,52205],{"class":106}," [",[96,52207,426],{"class":155},[96,52209,12419],{"class":106},[96,52211,400],{"class":155},[96,52213,12419],{"class":106},[96,52215,178],{"class":155},[96,52217,12419],{"class":106},[96,52219,184],{"class":155},[96,52221,12419],{"class":106},[96,52223,324],{"class":155},[96,52225,33225],{"class":106},[96,52227,52228,52230,52232,52234,52236,52238,52240,52242,52244,52246,52248,52251,52253,52255,52257],{"class":98,"line":1606},[96,52229,3184],{"class":102},[96,52231,1641],{"class":106},[96,52233,51826],{"class":102},[96,52235,9422],{"class":106},[96,52237,152],{"class":102},[96,52239,4076],{"class":155},[96,52241,9429],{"class":106},[96,52243,1017],{"class":102},[96,52245,51944],{"class":106},[96,52247,51947],{"class":155},[96,52249,52250],{"class":102}," -",[96,52252,25097],{"class":155},[96,52254,3197],{"class":106},[96,52256,2275],{"class":102},[96,52258,12426],{"class":106},[96,52260,52261,52264,52266,52268,52270,52272,52274,52276,52278,52280,52282,52284,52286,52288,52290,52292,52294],{"class":98,"line":1611},[96,52262,52263],{"class":102},"      for",[96,52265,1641],{"class":106},[96,52267,51826],{"class":102},[96,52269,9484],{"class":106},[96,52271,152],{"class":102},[96,52273,4076],{"class":155},[96,52275,9491],{"class":106},[96,52277,1017],{"class":102},[96,52279,51944],{"class":106},[96,52281,51947],{"class":155},[96,52283,52250],{"class":102},[96,52285,9422],{"class":106},[96,52287,639],{"class":102},[96,52289,25097],{"class":155},[96,52291,9498],{"class":106},[96,52293,2275],{"class":102},[96,52295,12426],{"class":106},[96,52297,52298],{"class":98,"line":1625},[96,52299,52300],{"class":165},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[96,52302,52303,52305,52308,52310,52313,52315,52317],{"class":98,"line":1630},[96,52304,2480],{"class":102},[96,52306,52307],{"class":106}," (arr[j] ",[96,52309,1067],{"class":102},[96,52311,52312],{"class":106}," arr[j ",[96,52314,588],{"class":102},[96,52316,25097],{"class":155},[96,52318,52319],{"class":106},"]) {\n",[96,52321,52322],{"class":98,"line":1636},[96,52323,52324],{"class":165},"          \u002F\u002F 交换两个变量\n",[96,52326,52327,52330,52333,52335],{"class":98,"line":1657},[96,52328,52329],{"class":102},"          let",[96,52331,52332],{"class":106}," tmp ",[96,52334,152],{"class":102},[96,52336,52337],{"class":106}," arr[j]\n",[96,52339,52340,52343,52345,52347,52349,52351],{"class":98,"line":1662},[96,52341,52342],{"class":106},"          arr[j] ",[96,52344,152],{"class":102},[96,52346,52312],{"class":106},[96,52348,588],{"class":102},[96,52350,25097],{"class":155},[96,52352,33225],{"class":106},[96,52354,52355,52358,52360,52362,52364,52366],{"class":98,"line":1676},[96,52356,52357],{"class":106},"          arr[j ",[96,52359,588],{"class":102},[96,52361,25097],{"class":155},[96,52363,4426],{"class":106},[96,52365,152],{"class":102},[96,52367,52368],{"class":106}," tmp\n",[96,52370,52371],{"class":98,"line":1681},[96,52372,2512],{"class":106},[96,52374,52375],{"class":98,"line":1710},[96,52376,52377],{"class":106},"      }\n",[96,52379,52380],{"class":98,"line":1715},[96,52381,2170],{"class":106},[96,52383,52384,52387,52389],{"class":98,"line":1732},[96,52385,52386],{"class":106},"    document.",[96,52388,51907],{"class":1946},[96,52390,52391],{"class":106},"(arr)\n",[96,52393,52394,52397,52399],{"class":98,"line":1737},[96,52395,52396],{"class":106},"  \u003C\u002F",[96,52398,51792],{"class":51279},[96,52400,51286],{"class":106},[96,52402,52403,52405,52407],{"class":98,"line":1742},[96,52404,51764],{"class":106},[96,52406,51779],{"class":51279},[96,52408,51286],{"class":106},[96,52410,52411],{"class":98,"line":1747},[96,52412,2383],{"emptyLinePlaceholder":23},[96,52414,52415,52417,52419],{"class":98,"line":1761},[96,52416,51764],{"class":106},[96,52418,50614],{"class":51279},[96,52420,51286],{"class":106},[14,52422,52423],{},[1445,52424],{"alt":18,"src":52425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[14,52427,52428],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[14,52430,52431],{},"let arr = [4, 2, 5, 1, 3]",[14,52433,52434],{},"\u002F\u002F 1.升序排列写法",[14,52436,52437],{},"arr.sort(function (a, b) {",[14,52439,52440],{},"return a - b",[14,52442,52443],{},"})",[14,52445,52446],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[14,52448,52449],{},"\u002F\u002F 降序排列写法",[14,52451,52437],{},[14,52453,52454],{},"return b - a",[14,52456,52443],{},[14,52458,52459],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[38,52461,52463],{"id":52462},"_29-函数","2.9 函数",[14,52465,52466],{},[1445,52467],{"alt":18,"src":52468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[14,52470,52471],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[14,52473,52474],{},"函数的声明用function",[14,52476,52477],{},"函数里边可以嵌套函数",[67,52479,52481],{"id":52480},"_291-函数传参","2.9.1 函数传参",[14,52483,52484],{},[1445,52485],{"alt":18,"src":52486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[14,52488,52489],{},[1445,52490],{"alt":18,"src":52491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1114,52493,52494,52497,52500,52503,52506,52509],{},[53,52495,52496],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[53,52498,52499],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[53,52501,52502],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[53,52504,52505],{},"开发中尽量保持形参和实参个数一致",[53,52507,52508],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[53,52510,52511],{},"形参只在函数中有用，所以不需要进行声明这个变量",[14,52513,52514],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[67,52516,52518],{"id":52517},"_292-函数的返回值","2.9.2 函数的返回值",[14,52520,52521],{},[1445,52522],{"alt":18,"src":52523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[14,52525,52526],{},[1445,52527],{"alt":18,"src":52528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1114,52530,52531,52534,52537,52540,52543],{},[53,52532,52533],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[53,52535,52536],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[53,52538,52539],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[53,52541,52542],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[53,52544,52545],{},"断点调试:进入函数内部看执行过程F11",[67,52547,52549],{"id":52548},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[87,52551,52553],{"className":50612,"code":52552,"language":50614,"meta":18,"style":18},"    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",[93,52554,52555,52560,52565,52569,52574],{"__ignoreMap":18},[96,52556,52557],{"class":98,"line":99},[96,52558,52559],{"class":106},"    function fn(a, b) {\n",[96,52561,52562],{"class":98,"line":19},[96,52563,52564],{"class":106},"      console.log(a + b);\n",[96,52566,52567],{"class":98,"line":1162},[96,52568,2170],{"class":106},[96,52570,52571],{"class":98,"line":1177},[96,52572,52573],{"class":106},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[96,52575,52576],{"class":98,"line":1183},[96,52577,52578],{"class":106},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[67,52580,52582],{"id":52581},"_294-作用域","2.9.4 作用域",[1114,52584,52585,52591,52596,52599,52602],{},[53,52586,52587,52588],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[256,52589,52590],{},"作用域",[53,52592,52593],{},[256,52594,52595],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[53,52597,52598],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[53,52600,52601],{},"函数内部可以直接所使用全局变量",[53,52603,52604],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[14,52606,14617],{},[87,52608,52610],{"className":50612,"code":52609,"language":50614,"meta":18,"style":18},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[93,52611,52612,52617,52622,52626,52631,52636,52641],{"__ignoreMap":18},[96,52613,52614],{"class":98,"line":99},[96,52615,52616],{"class":106},"    function fun() {\n",[96,52618,52619],{"class":98,"line":19},[96,52620,52621],{"class":106},"      num = 10\n",[96,52623,52624],{"class":98,"line":1162},[96,52625,2170],{"class":106},[96,52627,52628],{"class":98,"line":1177},[96,52629,52630],{"class":106},"    fun()\n",[96,52632,52633],{"class":98,"line":1183},[96,52634,52635],{"class":106},"    console.log(num)\n",[96,52637,52638],{"class":98,"line":1197},[96,52639,52640],{"class":106},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[96,52642,52643],{"class":98,"line":1203},[96,52644,52645],{"class":106},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1114,52647,52648,52651],{},[53,52649,52650],{},"函数内部的形参可以看做是局部变量",[53,52652,52653],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[14,52655,52656,52657],{},"变量访问原则： ",[256,52658,52659],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[67,52661,52663],{"id":52662},"_295-匿名函数","2.9.5 匿名函数",[14,52665,52666],{},"函数可以分为具名函数和匿名函数",[14,52668,52669],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[50,52671,52672],{},[53,52673,52674],{},"函数表达式",[14,52676,52677],{},[1445,52678],{"alt":18,"src":52679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[14,52681,52682],{},"里边也可以写参数",[14,52684,52685],{},"具名函数调用位置可以随意调整；",[14,52687,52688],{},"匿名函数函数表达式形式只能在声明后才可以使用",[50,52690,52691],{"start":19},[53,52692,52693],{},"立即执行函数",[14,52695,52696],{},[1445,52697],{"alt":18,"src":52698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[14,52700,52701],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[14,52703,52704],{},"写法：两个小括号，然后在第一个小括号中写function",[14,52706,52707],{},"(function () {})();",[14,52709,52710],{},"不要落下最后的;",[14,52712,52713],{},"立即执行函数必须要加;",[14,52715,52716],{},"分号写前写后都没问题",[14,52718,52719],{},"写前：",[14,52721,52722],{},"(function() {})()",[14,52724,52725],{},";(function () {})();",[14,52727,52728],{},"写后:",[14,52730,52731],{},"(function() {})();",[14,52733,52707],{},[14,52735,52736],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[14,52738,52739],{},"还有一种写法：",[14,52741,52742],{},"(function(){}());",[14,52744,52745],{},"或者:",[14,52747,52748],{},"!function(){}();",[14,52750,52751],{},"立即执行函数有时候也是可以加名字的：",[14,52753,52754],{},"(function flexible(window,document) {}(window,document));",[14,52756,52757],{},"省一些调用方法",[67,52759,52761],{"id":52760},"_296-逻辑中断","2.9.6 逻辑中断!!!",[14,52763,52764],{},[1445,52765],{"alt":18,"src":52766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[14,52768,52769],{},"这样就不用非得给x,y初始化了",[14,52771,52772],{},[1445,52773],{"alt":18,"src":52774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[14,52776,52777],{},"代码执行时先看左边",[14,52779,52780],{},"例如：console.log(false && 3+5)",[14,52782,52783],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[14,52785,52786],{},"&&都是真时，就返回最后一个真值",[14,52788,52789],{},"console.log(11 && 22)",[14,52791,52792],{},"输出22",[14,52794,52795],{},"逻辑与：遇真则真",[14,52797,14617],{},[14,52799,52800],{},"let age=1",[14,52802,52803],{},"console.log(11 || age++)",[14,52805,52806],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[14,52808,52809],{},"console.log(11 || 22)",[14,52811,52812],{},"||逻辑或遇到真就直接输出，输出结果为11",[14,52814,52815],{},"||如果都是假的话，就取最后一个假的值了",[67,52817,52819],{"id":52818},"_297-转换为boolean型","2.9.7 转换为Boolean型",[14,52821,52822],{},"显示转换：",[14,52824,52825,52828,52829],{},[256,52826,52827],{},"记忆","： ",[256,52830,52831],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[14,52833,52834],{},"空字符串为假，其他字符串全为真",[14,52836,52837],{},[1445,52838],{"alt":18,"src":52839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[14,52841,52842],{},"隐式转换：",[14,52844,52845],{},[1445,52846],{"alt":18,"src":52847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[14,52849,52850],{},"隐式转换:",[14,52852,52853],{},"null+3=3",[14,52855,52856],{},"undefined+3=NaN",[14,52858,52859],{},"null==undefined 输出true,他两个都当0看",[14,52861,52862],{},"null===undefined 输出false",[14,52864,52865],{},"undefined做任何操作都是NaN",[14,52867,52868],{},"NaN不等于NaN，NaN表示计算错误",[38,52870,52872],{"id":52871},"_210-对象","2.10 对象",[67,52874,52876],{"id":52875},"_2101-对象的介绍","2.10.1 对象的介绍",[14,52878,52879],{},"对象也是一种数据类型，里边的数据是无序的",[14,52881,52882],{},"对象由属性和方法组成",[14,52884,52885],{},[1445,52886],{"alt":18,"src":52887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[14,52889,52890],{},[1445,52891],{"alt":18,"src":52892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[14,52894,52895],{},[1445,52896],{"alt":18,"src":52897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[67,52899,52901],{"id":52900},"_2102-对象属性","2.10.2 对象属性",[14,52903,52904],{},[1445,52905],{"alt":18,"src":52906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[50,52908,52909],{},[53,52910,52911],{},"查询对象",[14,52913,52914],{},"对象名.属性 goods.uname",[14,52916,52917],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[14,52919,52920],{},"不带字符串的属性名也可以使用 对象名['属性名']",[14,52922,52923],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[14,52925,52926],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[50,52928,52929],{"start":19},[53,52930,52931],{},"重新赋值",[14,52933,52934],{},"对象名.属性=新值",[50,52936,52937],{"start":1162},[53,52938,52939],{},"增加新数据",[14,52941,52934],{},[50,52943,52944],{"start":1177},[53,52945,52946],{},"删除对象中的属性",[14,52948,52949],{},"delete 对象名.属性",[67,52951,52953],{"id":52952},"_2103-对象方法","2.10.3 对象方法",[14,52955,52956],{},[1445,52957],{"alt":18,"src":52958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[14,52960,52961],{},"后边跟的是匿名函数",[14,52963,52964],{},"对象外面的叫函数；对象内部的叫方法",[14,52966,52967],{},[1445,52968],{"alt":18,"src":52969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[67,52971,52973],{"id":52972},"_2104-遍历对象","2.10.4 遍历对象",[14,52975,52976],{},"理解为加括号的python字典遍历",[14,52978,52979],{},[1445,52980],{"alt":18,"src":52981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[14,52983,52984],{},"k是字符串类型",[14,52986,52987],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[87,52989,52991],{"className":50612,"code":52990,"language":50614,"meta":18,"style":18},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[93,52992,52993,52998,53003,53008,53013],{"__ignoreMap":18},[96,52994,52995],{"class":98,"line":99},[96,52996,52997],{"class":106},"   let arr = [1, 2, 3]\n",[96,52999,53000],{"class":98,"line":19},[96,53001,53002],{"class":106},"    for (let k in arr) {\n",[96,53004,53005],{"class":98,"line":1162},[96,53006,53007],{"class":106},"      console.log(k)\n",[96,53009,53010],{"class":98,"line":1177},[96,53011,53012],{"class":106},"      console.log(arr[k])\n",[96,53014,53015],{"class":98,"line":1183},[96,53016,2170],{"class":106},[14,53018,53019],{},[1445,53020],{"alt":18,"src":53021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[14,53023,53024],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[14,53026,53027],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[14,53029,53030],{},"for in 得到的k是属性名",[51792,53032,53033],{},"\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,53035,53036],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[67,53038,53040],{"id":53039},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[14,53042,53043],{},"数组中放对象信息",[87,53045,53049],{"className":53046,"code":53047,"language":53048,"meta":18,"style":18},"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",[93,53050,53051,53059,53064,53069,53074,53079,53084,53089,53094,53099,53104,53109,53114,53118,53122],{"__ignoreMap":18},[96,53052,53053,53055,53057],{"class":98,"line":99},[96,53054,1017],{"class":106},[96,53056,51792],{"class":51279},[96,53058,51286],{"class":106},[96,53060,53061],{"class":98,"line":19},[96,53062,53063],{"class":106},"    let students = [\n",[96,53065,53066],{"class":98,"line":1162},[96,53067,53068],{"class":106},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[96,53070,53071],{"class":98,"line":1177},[96,53072,53073],{"class":106},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[96,53075,53076],{"class":98,"line":1183},[96,53077,53078],{"class":106},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[96,53080,53081],{"class":98,"line":1197},[96,53082,53083],{"class":106},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[96,53085,53086],{"class":98,"line":1203},[96,53087,53088],{"class":106},"    ]\n",[96,53090,53091],{"class":98,"line":1294},[96,53092,53093],{"class":106},"    for (let i = 0; i \u003C students.length; i++) {\n",[96,53095,53096],{"class":98,"line":1300},[96,53097,53098],{"class":106},"      for (let k in students[i]) {\n",[96,53100,53101],{"class":98,"line":1312},[96,53102,53103],{"class":106},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[96,53105,53106],{"class":98,"line":1595},[96,53107,53108],{"class":106},"        \u002F\u002F输出每个人的名字：\n",[96,53110,53111],{"class":98,"line":1600},[96,53112,53113],{"class":106},"        \u002F\u002Fconsole.log(students[i].name)\n",[96,53115,53116],{"class":98,"line":1606},[96,53117,52377],{"class":106},[96,53119,53120],{"class":98,"line":1611},[96,53121,2170],{"class":106},[96,53123,53124,53126,53128],{"class":98,"line":1625},[96,53125,52396],{"class":106},[96,53127,51792],{"class":51279},[96,53129,51286],{"class":106},[67,53131,53133],{"id":53132},"_2106-内置对象","2.10.6 内置对象",[14,53135,53136],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[50,53138,53139],{},[53,53140,53141],{},"数学对象Math",[14,53143,53144],{},[1445,53145],{"alt":18,"src":53146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[14,53148,53149],{},[345,53150,53153],{"href":53151,"rel":53152},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[23850],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[14,53155,53156],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[14,53158,53159],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[14,53161,53162],{},"数组不可以使用Math中的max,min来求最大值与最小值",[14,53164,53165],{},"null是一个空对象，可以认为：null类似于let obj={}",[14,53167,53168],{},"null属于对象数据类型",[50,53170,53171],{"start":19},[53,53172,53173],{},"生成任意范围随机数",[14,53175,53176],{},[1445,53177],{"alt":18,"src":53178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[14,53180,53181],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[14,53183,53184],{},"乘以几就取不到几",[14,53186,53187],{},"取数组中的随机元素：",[14,53189,53190],{},"let arr = ['red', 'green', 'blue']",[14,53192,53193],{},"let random = Math.floor(Math.random() * arr.length)",[14,53195,53196],{},"console.log(arr[random])",[14,53198,53199],{},"这个函数得到的是全闭区间",[14,53201,53202],{},"function getRandom(N, M) {",[14,53204,53205],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[14,53207,1053],{},[14,53209,53210],{},"console.log(getRandom(4, 8))",[67,53212,53214],{"id":53213},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[14,53216,53217],{},[1445,53218],{"alt":18,"src":53219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[14,53221,53222],{},[1445,53223],{"alt":18,"src":53224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[14,53226,53227],{},[1445,53228],{"alt":18,"src":53229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[14,53231,53232],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[14,53234,53235],{},[1445,53236],{"alt":18,"src":53237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[14,53239,53240],{},[1445,53241],{"alt":18,"src":53242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[14,53244,53245],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[14,53247,53248],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[14,53250,53251],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[5110,53253,53254],{},"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":18,"searchDepth":19,"depth":19,"links":53256},[53257,53265,53266,53267,53268,53269,53276,53280,53286,53295],{"id":50447,"depth":19,"text":50448,"children":53258},[53259,53260,53261,53262,53263,53264],{"id":50451,"depth":1162,"text":50452},{"id":50468,"depth":1162,"text":50469},{"id":50508,"depth":1162,"text":50509},{"id":50520,"depth":1162,"text":50521},{"id":50529,"depth":1162,"text":50530},{"id":50577,"depth":1162,"text":50578},{"id":50587,"depth":19,"text":50588},{"id":50675,"depth":19,"text":50676},{"id":50698,"depth":19,"text":50699},{"id":50710,"depth":19,"text":50711},{"id":50897,"depth":19,"text":50898,"children":53270},[53271,53272,53273,53274,53275],{"id":50901,"depth":1162,"text":50902},{"id":50910,"depth":1162,"text":50911},{"id":50938,"depth":1162,"text":50939},{"id":50974,"depth":1162,"text":50975},{"id":50999,"depth":1162,"text":51000},{"id":51011,"depth":19,"text":51012,"children":53277},[53278,53279],{"id":51032,"depth":1162,"text":51033},{"id":51126,"depth":1162,"text":51127},{"id":51184,"depth":19,"text":51185,"children":53281},[53282,53283,53284,53285],{"id":51188,"depth":1162,"text":51189},{"id":51212,"depth":1162,"text":51213},{"id":51265,"depth":1162,"text":51266},{"id":52076,"depth":1162,"text":52077},{"id":52462,"depth":19,"text":52463,"children":53287},[53288,53289,53290,53291,53292,53293,53294],{"id":52480,"depth":1162,"text":52481},{"id":52517,"depth":1162,"text":52518},{"id":52548,"depth":1162,"text":52549},{"id":52581,"depth":1162,"text":52582},{"id":52662,"depth":1162,"text":52663},{"id":52760,"depth":1162,"text":52761},{"id":52818,"depth":1162,"text":52819},{"id":52871,"depth":19,"text":52872,"children":53296},[53297,53298,53299,53300,53301,53302,53303],{"id":52875,"depth":1162,"text":52876},{"id":52900,"depth":1162,"text":52901},{"id":52952,"depth":1162,"text":52953},{"id":52972,"depth":1162,"text":52973},{"id":53039,"depth":1162,"text":53040},{"id":53132,"depth":1162,"text":53133},{"id":53213,"depth":1162,"text":53214},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50439,"description":23361},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53310,"title":53311,"body":53312,"description":23361,"extension":21,"meta":76652,"navigation":23,"path":76653,"seo":76654,"stem":76655,"__hash__":76656},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53313,"toc":76592},[53314,53317,53320,53323,53328,53331,53334,53337,53341,53345,53351,53356,53364,53371,53374,53378,53383,53388,53393,53396,53399,53410,53413,53417,53420,53423,53428,53433,53438,53441,53444,53536,53539,53544,53547,53552,53555,53558,53563,53566,53571,53575,53578,53592,53596,53601,53604,53607,53611,53616,53619,53623,53627,53632,53636,53641,53644,53647,53650,53653,53656,53659,53664,53669,53697,53700,53703,53706,53711,53714,53717,53720,53723,53727,53756,53760,53765,53770,53773,53776,53779,53784,53899,53904,53909,54070,54075,54078,54082,54087,54092,54095,54098,54101,54104,54107,54110,54113,54116,54119,54122,54125,54128,54131,54134,54136,54139,54142,54145,54150,54154,54551,54554,54560,54564,54569,55851,55856,55859,55862,55865,55870,57066,57070,57076,57081,57084,57089,57094,57098,57102,57107,57110,57115,57118,57121,57125,58033,58036,58040,58261,58264,58267,58270,58496,58499,58723,58726,58730,58735,58738,58741,58969,58972,59005,59008,59012,59017,59021,59024,59027,59030,59033,59036,59039,59042,59047,60327,60331,60334,61427,61431,61434,61437,61440,61443,61447,61450,61453,61455,61463,62944,62948,62951,62954,62957,63166,63169,63173,63177,63182,63187,63190,63193,63198,63202,63207,63210,63319,63323,63328,63333,63336,63339,63343,63348,63353,63358,63361,63364,63375,63378,63383,63388,63391,63394,63467,63471,63476,63479,63481,63492,63496,63501,64827,64830,64833,64836,64838,64841,64844,64847,64850,64853,64856,64859,64862,64865,64868,64871,64874,64876,64878,64881,64885,65979,65982,65985,66001,66015,66018,66023,66029,66034,66038,66042,66047,66051,66056,66498,66503,66506,66510,66515,66518,66521,66525,66530,66534,66539,66544,66548,66553,66558,66561,66566,66571,66575,66580,66585,66689,66692,66696,66701,67067,67070,67073,67076,67079,67082,67085,67088,67091,68387,68391,68396,68401,68404,68407,68410,68413,68415,68420,68425,68428,68432,68437,68442,68447,68450,68453,68456,68459,68462,68467,68470,68474,68479,68484,68488,68493,68496,68501,68504,68507,68510,68513,68516,68521,68524,68527,68530,68533,68537,68542,68545,68549,68554,68557,68560,68564,68593,68596,68600,68604,68609,68613,68618,68621,68624,68627,68630,68633,68636,68639,68642,68645,68648,68651,68654,68657,68660,68664,68669,68674,68677,68681,68685,68690,68693,68697,68700,68703,68708,68713,68718,68723,68728,68731,68734,68739,68744,68748,68753,68756,68761,68764,68767,68770,68773,68778,68781,68790,68794,68799,68802,68805,68809,68812,68817,68821,68824,68830,68836,68840,68866,68869,70430,70433,70929,70932,70937,70942,70947,70951,70956,70961,70966,70970,70975,70978,70981,70984,70987,70991,70994,70999,71002,71007,71011,71016,71019,71024,71029,71034,71037,71040,71045,71050,71053,71056,71060,71063,71068,71071,71076,71079,71084,71089,71094,71097,71102,71167,71170,71181,71185,71190,71362,71366,71371,71374,71377,71380,71384,71395,71399,71402,71407,71412,71415,71418,71421,71424,71427,71429,71432,71435,71438,71443,71446,71451,71454,71458,71461,71464,71478,71482,71485,71540,71545,71548,71551,71556,71559,71563,71568,71698,71702,71707,71712,71793,71798,71802,71805,71810,71815,71821,71824,71827,71830,71834,71839,71842,71853,71857,71874,74921,74925,74928,74931,74934,74955,74959,74962,74970,74973,74978,74981,74984,74989,74994,74998,75019,75023,75028,75031,75034,75037,75040,75044,75049,75052,75056,75061,75064,75069,75072,75077,75080,75085,76288,76292,76297,76300,76305,76589],[10,53315,53311],{"id":53316},"_3web-apis",[14,53318,53319],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[14,53321,53322],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[14,53324,53325],{},[1445,53326],{"alt":18,"src":53327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[14,53329,53330],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[14,53332,53333],{},"建议数组和对象使用 const 来声明",[14,53335,53336],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[38,53338,53340],{"id":53339},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[67,53342,53344],{"id":53343},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[14,53346,53347,53350],{},[93,53348,53349],{},"document"," = HTML 文件解析后的对象化表示；",[14,53352,53353,53355],{},[93,53354,53349],{}," ≠ HTML 文件本身",[14,53357,53358,53363],{},[256,53359,53360],{},[93,53361,53362],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[14,53365,53366,53370],{},[256,53367,53368],{},[93,53369,53349],{}," ：容器里的内容，代表当前加载的网页（DOM）",[14,53372,53373],{},"document实际上为window.document的简写",[67,53375,53377],{"id":53376},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[14,53379,53380],{},[1445,53381],{"alt":18,"src":53382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[14,53384,53385],{},[1445,53386],{"alt":18,"src":53387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[14,53389,53390],{},[1445,53391],{"alt":18,"src":53392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[14,53394,53395],{},"console.dir()",[14,53397,53398],{},"dir用来打印对象",[1114,53400,53401,53404,53407],{},[53,53402,53403],{},"任何一个标签，都是一个对象",[53,53405,53406],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[53,53408,53409],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[14,53411,53412],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[67,53414,53416],{"id":53415},"_312-获取dom对象","3.1.2 获取DoM对象",[14,53418,53419],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[14,53421,53422],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[14,53424,53425],{},[256,53426,53427],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[50,53429,53430],{},[53,53431,53432],{},"利用CSS选择器来获取标签元素",[14,53434,53435],{},[1445,53436],{"alt":18,"src":53437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[14,53439,53440],{},"里边的选择器必须必须加引号！！！",[14,53442,53443],{},"只选择第一个元素",[87,53445,53447],{"className":53046,"code":53446,"language":53048,"meta":18,"style":18},"\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",[93,53448,53449,53457,53478,53497,53505,53510,53515,53520,53528],{"__ignoreMap":18},[96,53450,53451,53453,53455],{"class":98,"line":99},[96,53452,1017],{"class":106},[96,53454,51779],{"class":51279},[96,53456,51286],{"class":106},[96,53458,53459,53461,53463,53466,53468,53471,53474,53476],{"class":98,"line":19},[96,53460,52123],{"class":106},[96,53462,51590],{"class":51279},[96,53464,53465],{"class":1946}," class",[96,53467,152],{"class":106},[96,53469,53470],{"class":211},"\"box\"",[96,53472,53473],{"class":106},">123\u003C\u002F",[96,53475,51590],{"class":51279},[96,53477,51286],{"class":106},[96,53479,53480,53482,53484,53486,53488,53490,53493,53495],{"class":98,"line":1162},[96,53481,52123],{"class":106},[96,53483,51590],{"class":51279},[96,53485,53465],{"class":1946},[96,53487,152],{"class":106},[96,53489,53470],{"class":211},[96,53491,53492],{"class":106},">456\u003C\u002F",[96,53494,51590],{"class":51279},[96,53496,51286],{"class":106},[96,53498,53499,53501,53503],{"class":98,"line":1177},[96,53500,52123],{"class":106},[96,53502,51792],{"class":51279},[96,53504,51286],{"class":106},[96,53506,53507],{"class":98,"line":1183},[96,53508,53509],{"class":106},"    \u002F\u002F 1.获取匹配的第一个元素\n",[96,53511,53512],{"class":98,"line":1197},[96,53513,53514],{"class":106},"    const box = document.querySelector('div')\n",[96,53516,53517],{"class":98,"line":1203},[96,53518,53519],{"class":106},"    console.dir(box)\n",[96,53521,53522,53524,53526],{"class":98,"line":1294},[96,53523,52396],{"class":106},[96,53525,51792],{"class":51279},[96,53527,51286],{"class":106},[96,53529,53530,53532,53534],{"class":98,"line":1300},[96,53531,51764],{"class":106},[96,53533,51779],{"class":51279},[96,53535,51286],{"class":106},[14,53537,53538],{},"只选123，不选456",[14,53540,53541],{},[1445,53542],{"alt":18,"src":53543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[14,53545,53546],{},"返回的是一个数组的集合，不能对其进行直接修改",[14,53548,53549],{},[1445,53550],{"alt":18,"src":53551},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[14,53553,53554],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[14,53556,53557],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[50,53559,53560],{"start":19},[53,53561,53562],{},"其他方法来获取标签元素",[14,53564,53565],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[14,53567,53568],{},[1445,53569],{"alt":18,"src":53570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[67,53572,53574],{"id":53573},"_313-操作元素的内容","3.1.3 操作元素的内容",[14,53576,53577],{},"设置修改DOM元素内容有两种方式：",[1114,53579,53580,53583,53586,53589],{},[53,53581,53582],{},"元素.innerText=''",[53,53584,53585],{},"元素.innerHTML=''",[53,53587,53588],{},"不写字符串输出数字也是可以的",[53,53590,53591],{},"元素.innerHtml=1",[21982,53593,53595],{"id":53594},"_3131-innertext","3.1.3.1 innerText",[14,53597,53598],{},[1445,53599],{"alt":18,"src":53600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[14,53602,53603],{},"思路：实现了修改盒子中的内容！",[14,53605,53606],{},"它只显示纯文本，不解析标签",[21982,53608,53610],{"id":53609},"_3132-innerhtml","3.1.3.2 innerHTML",[14,53612,53613],{},[1445,53614],{"alt":18,"src":53615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[14,53617,53618],{},"相比于innerText，他的强大之处在于可以解析标签",[67,53620,53622],{"id":53621},"_314-操作元素属性","3.1.4 操作元素属性",[21982,53624,53626],{"id":53625},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[14,53628,53629],{},[1445,53630],{"alt":18,"src":53631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[21982,53633,53635],{"id":53634},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[14,53637,53638],{},[1445,53639],{"alt":18,"src":53640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[14,53642,53643],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[14,53645,53646],{},"div.style.backgroundColor = 'hotpink'",[14,53648,53649],{},"如果按照css的写法，-表示减，就会出错",[14,53651,53652],{},"body元素不需要再获取，直接用就行！！！！！！",[14,53654,53655],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[14,53657,53658],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[14,53660,53661],{},[1445,53662],{"alt":18,"src":53663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[14,53665,53666],{},[1445,53667],{"alt":18,"src":53668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[50,53670,53671,53674,53677,53680,53683,53686],{},[53,53672,53673],{},"className这个方式就是修改很多样式的时候来使用的！",[53,53675,53676],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[53,53678,53679],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[53,53681,53682],{},"className为属性名，如果还用class的话就导致与关键字冲突",[53,53684,53685],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[53,53687,53688,53689,53694],{},"解析标签的时候就变为了",[51590,53690],{"className":53691},[53692,53693],"nav","box",[53695,53696],"br",{},[14,53698,53699],{},"例子：",[51590,53701],{"className":53702},[53692],[51792,53704,53705],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[14,53707,53708],{},[1445,53709],{"alt":18,"src":53710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[14,53712,53713],{},"追加和删除类名用classList",[14,53715,53716],{},"常用于类似于开关的操作",[14,53718,53719],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[14,53721,53722],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[21982,53724,53726],{"id":53725},"_3143-牢记点","3.1.4.3 牢记点",[50,53728,53729,53732,53735,53738,53741,53744,53747,53750,53753],{},[53,53730,53731],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[53,53733,53734],{},"使用style属性操作css时不要忘记引号",[53,53736,53737],{},"使用className或者classList时也不要忘记引号",[53,53739,53740],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[53,53742,53743],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[53,53745,53746],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[53,53748,53749],{},"若： let arr=['1','2',3] arr[0]=1",[53,53751,53752],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[53,53754,53755],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[67,53757,53759],{"id":53758},"_315-操作表单元素","3.1.5 操作表单元素",[50,53761,53762],{},[53,53763,53764],{},"天生的属性",[14,53766,53767],{},[1445,53768],{"alt":18,"src":53769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[14,53771,53772],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[14,53774,53775],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[14,53777,53778],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[14,53780,53781],{},[1445,53782],{"alt":18,"src":53783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[87,53785,53787],{"className":50612,"code":53786,"language":50614,"meta":18,"style":18},"在复选框中如果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",[93,53788,53789,53794,53826,53831,53836,53841,53846,53850,53855,53860,53877,53889,53894],{"__ignoreMap":18},[96,53790,53791],{"class":98,"line":99},[96,53792,53793],{"class":106},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[96,53795,53796,53798,53801,53804,53806,53809,53811,53813,53815,53817,53819,53821,53824],{"class":98,"line":19},[96,53797,1017],{"class":106},[96,53799,53800],{"class":51279},"input",[96,53802,53803],{"class":1946}," type",[96,53805,152],{"class":106},[96,53807,53808],{"class":211},"\"checkbox\"",[96,53810,14904],{"class":1946},[96,53812,152],{"class":106},[96,53814,7636],{"class":211},[96,53816,14943],{"class":1946},[96,53818,152],{"class":106},[96,53820,7636],{"class":211},[96,53822,53823],{"class":1946}," checked",[96,53825,51286],{"class":106},[96,53827,53828],{"class":98,"line":1162},[96,53829,53830],{"class":106},"不选的话：\n",[96,53832,53833],{"class":98,"line":1177},[96,53834,53835],{"class":106},"const input = document.querySelector('input')\n",[96,53837,53838],{"class":98,"line":1183},[96,53839,53840],{"class":106},"input.checked=false\n",[96,53842,53843],{"class":98,"line":1197},[96,53844,53845],{"class":106},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[96,53847,53848],{"class":98,"line":1203},[96,53849,2383],{"emptyLinePlaceholder":23},[96,53851,53852],{"class":98,"line":1294},[96,53853,53854],{"class":106},"禁用按钮：\n",[96,53856,53857],{"class":98,"line":1300},[96,53858,53859],{"class":106},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[96,53861,53862,53864,53867,53870,53873,53875],{"class":98,"line":1312},[96,53863,1017],{"class":106},[96,53865,53866],{"class":51279},"button",[96,53868,53869],{"class":1946}," disabled",[96,53871,53872],{"class":106},">点击\u003C\u002F",[96,53874,53866],{"class":51279},[96,53876,51286],{"class":106},[96,53878,53879,53881,53883,53885,53887],{"class":98,"line":1595},[96,53880,1017],{"class":106},[96,53882,53866],{"class":51279},[96,53884,53872],{"class":106},[96,53886,53866],{"class":51279},[96,53888,51286],{"class":106},[96,53890,53891],{"class":98,"line":1600},[96,53892,53893],{"class":106},"const bt = document.querySelector('button')\n",[96,53895,53896],{"class":98,"line":1606},[96,53897,53898],{"class":106},"bt.disabled = false\n",[50,53900,53901],{"start":19},[53,53902,53903],{},"自定义属性",[14,53905,53906],{},[1445,53907],{"alt":18,"src":53908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[87,53910,53912],{"className":53046,"code":53911,"language":53048,"meta":18,"style":18},"\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",[93,53913,53914,53922,53950,53969,53988,54007,54026,54034,54039,54044,54049,54054,54062],{"__ignoreMap":18},[96,53915,53916,53918,53920],{"class":98,"line":99},[96,53917,1017],{"class":106},[96,53919,51779],{"class":51279},[96,53921,51286],{"class":106},[96,53923,53924,53926,53928,53931,53933,53935,53938,53940,53943,53946,53948],{"class":98,"line":19},[96,53925,52123],{"class":106},[96,53927,51590],{"class":51279},[96,53929,53930],{"class":1946}," data-id",[96,53932,152],{"class":106},[96,53934,3661],{"class":211},[96,53936,53937],{"class":1946}," data-spm",[96,53939,152],{"class":106},[96,53941,53942],{"class":211},"\"我不知道\"",[96,53944,53945],{"class":106},">1\u003C\u002F",[96,53947,51590],{"class":51279},[96,53949,51286],{"class":106},[96,53951,53952,53954,53956,53958,53960,53962,53965,53967],{"class":98,"line":1162},[96,53953,52123],{"class":106},[96,53955,51590],{"class":51279},[96,53957,53930],{"class":1946},[96,53959,152],{"class":106},[96,53961,3684],{"class":211},[96,53963,53964],{"class":106},">2\u003C\u002F",[96,53966,51590],{"class":51279},[96,53968,51286],{"class":106},[96,53970,53971,53973,53975,53977,53979,53981,53984,53986],{"class":98,"line":1177},[96,53972,52123],{"class":106},[96,53974,51590],{"class":51279},[96,53976,53930],{"class":1946},[96,53978,152],{"class":106},[96,53980,3697],{"class":211},[96,53982,53983],{"class":106},">3\u003C\u002F",[96,53985,51590],{"class":51279},[96,53987,51286],{"class":106},[96,53989,53990,53992,53994,53996,53998,54000,54003,54005],{"class":98,"line":1183},[96,53991,52123],{"class":106},[96,53993,51590],{"class":51279},[96,53995,53930],{"class":1946},[96,53997,152],{"class":106},[96,53999,3710],{"class":211},[96,54001,54002],{"class":106},">4\u003C\u002F",[96,54004,51590],{"class":51279},[96,54006,51286],{"class":106},[96,54008,54009,54011,54013,54015,54017,54019,54022,54024],{"class":98,"line":1197},[96,54010,52123],{"class":106},[96,54012,51590],{"class":51279},[96,54014,53930],{"class":1946},[96,54016,152],{"class":106},[96,54018,3731],{"class":211},[96,54020,54021],{"class":106},">5\u003C\u002F",[96,54023,51590],{"class":51279},[96,54025,51286],{"class":106},[96,54027,54028,54030,54032],{"class":98,"line":1203},[96,54029,52123],{"class":106},[96,54031,51792],{"class":51279},[96,54033,51286],{"class":106},[96,54035,54036],{"class":98,"line":1294},[96,54037,54038],{"class":106},"    const one = document.querySelector('div')\n",[96,54040,54041],{"class":98,"line":1300},[96,54042,54043],{"class":106},"    console.log(one.dataset)\n",[96,54045,54046],{"class":98,"line":1312},[96,54047,54048],{"class":106},"    console.log(one.dataset.id)\n",[96,54050,54051],{"class":98,"line":1595},[96,54052,54053],{"class":106},"    console.log(one.dataset.spm)\n",[96,54055,54056,54058,54060],{"class":98,"line":1600},[96,54057,52396],{"class":106},[96,54059,51792],{"class":51279},[96,54061,51286],{"class":106},[96,54063,54064,54066,54068],{"class":98,"line":1606},[96,54065,51764],{"class":106},[96,54067,51779],{"class":51279},[96,54069,51286],{"class":106},[14,54071,54072],{},[1445,54073],{"alt":18,"src":54074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[14,54076,54077],{},"document.querySelector选择的是第一个对象（元素）",[67,54079,54081],{"id":54080},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[14,54083,54084],{},[1445,54085],{"alt":18,"src":54086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[14,54088,54089],{},[1445,54090],{"alt":18,"src":54091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[14,54093,54094],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51792,54096,54097],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[14,54099,54100],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51792,54102,54103],{},"\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,54105,54106],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[14,54108,54109],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[14,54111,54112],{},"单位为毫秒！！！",[14,54114,54115],{},"可以搭配匿名函数来用！！！",[14,54117,54118],{},"setInterval(function () {",[14,54120,54121],{},"alert('两秒执行一次')",[14,54123,54124],{},"}, 2000)",[14,54126,54127],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[14,54129,54130],{},"function fn() {",[14,54132,54133],{},"document.write(1)",[14,54135,1053],{},[14,54137,54138],{},"setInterval(fn, 1000)",[14,54140,54141],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[14,54143,54144],{},"setInterval('fn()', 1000)",[14,54146,54147],{},[1445,54148],{"alt":18,"src":54149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[21982,54151,54153],{"id":54152},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[87,54155,54157],{"className":50612,"code":54156,"language":50614,"meta":18,"style":18},"\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",[93,54158,54159,54169,54183,54187,54195,54209,54229,54241,54249,54253,54261,54298,54303,54308,54313,54321,54329,54351,54359,54364,54386,54391,54396,54407,54412,54432,54440,54455,54470,54481,54486,54496,54506,54510,54519,54523,54531,54539,54543],{"__ignoreMap":18},[96,54160,54161,54163,54165,54167],{"class":98,"line":99},[96,54162,51276],{"class":106},[96,54164,51280],{"class":51279},[96,54166,51283],{"class":1946},[96,54168,51286],{"class":106},[96,54170,54171,54173,54175,54177,54179,54181],{"class":98,"line":19},[96,54172,1017],{"class":106},[96,54174,50614],{"class":51279},[96,54176,51295],{"class":1946},[96,54178,152],{"class":106},[96,54180,51300],{"class":211},[96,54182,51286],{"class":106},[96,54184,54185],{"class":98,"line":1162},[96,54186,2383],{"emptyLinePlaceholder":23},[96,54188,54189,54191,54193],{"class":98,"line":1177},[96,54190,1017],{"class":106},[96,54192,51313],{"class":51279},[96,54194,51286],{"class":106},[96,54196,54197,54199,54201,54203,54205,54207],{"class":98,"line":1183},[96,54198,52123],{"class":106},[96,54200,51323],{"class":51279},[96,54202,51326],{"class":1946},[96,54204,152],{"class":106},[96,54206,51331],{"class":211},[96,54208,51286],{"class":106},[96,54210,54211,54213,54215,54217,54219,54221,54223,54225,54227],{"class":98,"line":1197},[96,54212,52123],{"class":106},[96,54214,51323],{"class":51279},[96,54216,14904],{"class":1946},[96,54218,152],{"class":106},[96,54220,51370],{"class":211},[96,54222,51350],{"class":1946},[96,54224,152],{"class":106},[96,54226,51377],{"class":211},[96,54228,51286],{"class":106},[96,54230,54231,54233,54235,54237,54239],{"class":98,"line":1203},[96,54232,52123],{"class":106},[96,54234,51386],{"class":51279},[96,54236,51389],{"class":106},[96,54238,51386],{"class":51279},[96,54240,51286],{"class":106},[96,54242,54243,54245,54247],{"class":98,"line":1294},[96,54244,51764],{"class":106},[96,54246,51313],{"class":51279},[96,54248,51286],{"class":106},[96,54250,54251],{"class":98,"line":1300},[96,54252,2383],{"emptyLinePlaceholder":23},[96,54254,54255,54257,54259],{"class":98,"line":1312},[96,54256,1017],{"class":106},[96,54258,51779],{"class":51279},[96,54260,51286],{"class":106},[96,54262,54263,54265,54268,54270,54272,54274,54276,54278,54280,54283,54285,54288,54291,54293,54296],{"class":98,"line":1595},[96,54264,52123],{"class":106},[96,54266,54267],{"class":51279},"textarea",[96,54269,14904],{"class":1946},[96,54271,152],{"class":106},[96,54273,7636],{"class":211},[96,54275,14943],{"class":1946},[96,54277,152],{"class":106},[96,54279,7636],{"class":211},[96,54281,54282],{"class":1946}," cols",[96,54284,152],{"class":106},[96,54286,54287],{"class":211},"\"30\"",[96,54289,54290],{"class":1946}," rows",[96,54292,152],{"class":106},[96,54294,54295],{"class":211},"\"10\"",[96,54297,51286],{"class":106},[96,54299,54300],{"class":98,"line":1600},[96,54301,54302],{"class":106},"        用户注册协议\n",[96,54304,54305],{"class":98,"line":1606},[96,54306,54307],{"class":106},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[96,54309,54310],{"class":98,"line":1611},[96,54311,54312],{"class":106},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[96,54314,54315,54317,54319],{"class":98,"line":1625},[96,54316,51755],{"class":106},[96,54318,54267],{"class":51279},[96,54320,51286],{"class":106},[96,54322,54323,54325,54327],{"class":98,"line":1630},[96,54324,52123],{"class":106},[96,54326,53695],{"class":51279},[96,54328,51286],{"class":106},[96,54330,54331,54333,54335,54337,54339,54342,54344,54347,54349],{"class":98,"line":1636},[96,54332,52123],{"class":106},[96,54334,53866],{"class":51279},[96,54336,53465],{"class":1946},[96,54338,152],{"class":106},[96,54340,54341],{"class":211},"\"btn\"",[96,54343,53869],{"class":1946},[96,54345,54346],{"class":106},">我已经阅读用户协议(5)\u003C\u002F",[96,54348,53866],{"class":51279},[96,54350,51286],{"class":106},[96,54352,54353,54355,54357],{"class":98,"line":1657},[96,54354,52123],{"class":106},[96,54356,51792],{"class":51279},[96,54358,51286],{"class":106},[96,54360,54361],{"class":98,"line":1662},[96,54362,54363],{"class":165},"    \u002F\u002F 1. 获取元素\n",[96,54365,54366,54368,54371,54373,54376,54379,54381,54384],{"class":98,"line":1676},[96,54367,11205],{"class":102},[96,54369,54370],{"class":155}," btn",[96,54372,13548],{"class":102},[96,54374,54375],{"class":106}," document.",[96,54377,54378],{"class":1946},"querySelector",[96,54380,107],{"class":106},[96,54382,54383],{"class":211},"'.btn'",[96,54385,113],{"class":106},[96,54387,54388],{"class":98,"line":1681},[96,54389,54390],{"class":165},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[96,54392,54393],{"class":98,"line":1710},[96,54394,54395],{"class":165},"    \u002F\u002F 2. 倒计时\n",[96,54397,54398,54400,54402,54404],{"class":98,"line":1715},[96,54399,52198],{"class":102},[96,54401,9422],{"class":106},[96,54403,152],{"class":102},[96,54405,54406],{"class":155}," 5\n",[96,54408,54409],{"class":98,"line":1732},[96,54410,54411],{"class":165},"    \u002F\u002F 2.1 开启定时器\n",[96,54413,54414,54416,54419,54421,54424,54426,54429],{"class":98,"line":1737},[96,54415,52198],{"class":102},[96,54417,54418],{"class":106}," n ",[96,54420,152],{"class":102},[96,54422,54423],{"class":1946}," setInterval",[96,54425,107],{"class":106},[96,54427,54428],{"class":102},"function",[96,54430,54431],{"class":106}," () {\n",[96,54433,54434,54437],{"class":98,"line":1742},[96,54435,54436],{"class":106},"      i",[96,54438,54439],{"class":102},"--\n",[96,54441,54442,54445,54447,54450,54452],{"class":98,"line":1747},[96,54443,54444],{"class":106},"      btn.innerHTML ",[96,54446,152],{"class":102},[96,54448,54449],{"class":211}," `我已经阅读用户协议(${",[96,54451,548],{"class":106},[96,54453,54454],{"class":211},"})`\n",[96,54456,54457,54460,54463,54466,54468],{"class":98,"line":1761},[96,54458,54459],{"class":102},"      if",[96,54461,54462],{"class":106}," (i ",[96,54464,54465],{"class":102},"===",[96,54467,4076],{"class":155},[96,54469,12426],{"class":106},[96,54471,54472,54475,54478],{"class":98,"line":1766},[96,54473,54474],{"class":1946},"        clearInterval",[96,54476,54477],{"class":106},"(n)  ",[96,54479,54480],{"class":165},"\u002F\u002F 关闭定时器\n",[96,54482,54483],{"class":98,"line":2560},[96,54484,54485],{"class":165},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[96,54487,54488,54491,54493],{"class":98,"line":2574},[96,54489,54490],{"class":106},"        btn.disabled ",[96,54492,152],{"class":102},[96,54494,54495],{"class":155}," false\n",[96,54497,54498,54501,54503],{"class":98,"line":2582},[96,54499,54500],{"class":106},"        btn.innerHTML ",[96,54502,152],{"class":102},[96,54504,54505],{"class":211}," '同意'\n",[96,54507,54508],{"class":98,"line":2587},[96,54509,52377],{"class":106},[96,54511,54512,54515,54517],{"class":98,"line":2593},[96,54513,54514],{"class":106},"    }, ",[96,54516,6394],{"class":155},[96,54518,113],{"class":106},[96,54520,54521],{"class":98,"line":2599},[96,54522,2383],{"emptyLinePlaceholder":23},[96,54524,54525,54527,54529],{"class":98,"line":2604},[96,54526,52396],{"class":106},[96,54528,51792],{"class":51279},[96,54530,51286],{"class":106},[96,54532,54533,54535,54537],{"class":98,"line":7932},[96,54534,51764],{"class":106},[96,54536,51779],{"class":51279},[96,54538,51286],{"class":106},[96,54540,54541],{"class":98,"line":7956},[96,54542,2383],{"emptyLinePlaceholder":23},[96,54544,54545,54547,54549],{"class":98,"line":7961},[96,54546,51764],{"class":106},[96,54548,50614],{"class":51279},[96,54550,51286],{"class":106},[14,54552,54553],{},"不要一直想着用死循环,避免死循环",[14,54555,54556,54559],{},[93,54557,54558],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[21982,54561,54563],{"id":54562},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[50,54565,54566],{},[53,54567,54568],{},"法1",[87,54570,54572],{"className":50612,"code":54571,"language":50614,"meta":18,"style":18},"\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",[93,54573,54574,54584,54598,54602,54610,54624,54644,54656,54664,54670,54681,54692,54696,54700,54707,54719,54723,54727,54734,54746,54760,54773,54787,54791,54795,54802,54813,54824,54835,54847,54859,54871,54875,54879,54887,54897,54910,54922,54935,54939,54943,54950,54960,54972,54984,54995,55006,55016,55028,55040,55044,55048,55057,55069,55081,55109,55122,55126,55130,55137,55148,55152,55160,55168,55172,55180,55194,55209,55233,55241,55256,55269,55277,55298,55310,55322,55334,55346,55358,55370,55382,55391,55399,55407,55415,55427,55450,55469,55488,55507,55526,55545,55564,55584,55588,55608,55627,55647,55668,55679,55696,55706,55716,55726,55731,55736,55741,55746,55771,55784,55788,55811,55815,55823,55831,55839,55843],{"__ignoreMap":18},[96,54575,54576,54578,54580,54582],{"class":98,"line":99},[96,54577,51276],{"class":106},[96,54579,51280],{"class":51279},[96,54581,51283],{"class":1946},[96,54583,51286],{"class":106},[96,54585,54586,54588,54590,54592,54594,54596],{"class":98,"line":19},[96,54587,1017],{"class":106},[96,54589,50614],{"class":51279},[96,54591,51295],{"class":1946},[96,54593,152],{"class":106},[96,54595,51300],{"class":211},[96,54597,51286],{"class":106},[96,54599,54600],{"class":98,"line":1162},[96,54601,2383],{"emptyLinePlaceholder":23},[96,54603,54604,54606,54608],{"class":98,"line":1177},[96,54605,1017],{"class":106},[96,54607,51313],{"class":51279},[96,54609,51286],{"class":106},[96,54611,54612,54614,54616,54618,54620,54622],{"class":98,"line":1183},[96,54613,52123],{"class":106},[96,54615,51323],{"class":51279},[96,54617,51326],{"class":1946},[96,54619,152],{"class":106},[96,54621,51331],{"class":211},[96,54623,51286],{"class":106},[96,54625,54626,54628,54630,54632,54634,54636,54638,54640,54642],{"class":98,"line":1197},[96,54627,52123],{"class":106},[96,54629,51323],{"class":51279},[96,54631,14904],{"class":1946},[96,54633,152],{"class":106},[96,54635,51370],{"class":211},[96,54637,51350],{"class":1946},[96,54639,152],{"class":106},[96,54641,51377],{"class":211},[96,54643,51286],{"class":106},[96,54645,54646,54648,54650,54652,54654],{"class":98,"line":1203},[96,54647,52123],{"class":106},[96,54649,51386],{"class":51279},[96,54651,51389],{"class":106},[96,54653,51386],{"class":51279},[96,54655,51286],{"class":106},[96,54657,54658,54660,54662],{"class":98,"line":1294},[96,54659,52123],{"class":106},[96,54661,5110],{"class":51279},[96,54663,51286],{"class":106},[96,54665,54666,54668],{"class":98,"line":1300},[96,54667,6387],{"class":51279},[96,54669,15556],{"class":106},[96,54671,54672,54675,54677,54679],{"class":98,"line":1312},[96,54673,54674],{"class":155},"      padding",[96,54676,51416],{"class":106},[96,54678,298],{"class":155},[96,54680,1273],{"class":106},[96,54682,54683,54686,54688,54690],{"class":98,"line":1595},[96,54684,54685],{"class":155},"      margin",[96,54687,51416],{"class":106},[96,54689,298],{"class":155},[96,54691,1273],{"class":106},[96,54693,54694],{"class":98,"line":1600},[96,54695,2170],{"class":106},[96,54697,54698],{"class":98,"line":1606},[96,54699,2383],{"emptyLinePlaceholder":23},[96,54701,54702,54705],{"class":98,"line":1611},[96,54703,54704],{"class":51279},"    li",[96,54706,15556],{"class":106},[96,54708,54709,54712,54714,54717],{"class":98,"line":1625},[96,54710,54711],{"class":155},"      list-style",[96,54713,51416],{"class":106},[96,54715,54716],{"class":155},"none",[96,54718,1273],{"class":106},[96,54720,54721],{"class":98,"line":1630},[96,54722,2170],{"class":106},[96,54724,54725],{"class":98,"line":1636},[96,54726,2383],{"emptyLinePlaceholder":23},[96,54728,54729,54732],{"class":98,"line":1657},[96,54730,54731],{"class":1946},"    .box",[96,54733,15556],{"class":106},[96,54735,54736,54739,54741,54744],{"class":98,"line":1662},[96,54737,54738],{"class":155},"      position",[96,54740,51416],{"class":106},[96,54742,54743],{"class":155},"relative",[96,54745,1273],{"class":106},[96,54747,54748,54751,54753,54756,54758],{"class":98,"line":1676},[96,54749,54750],{"class":155},"      width",[96,54752,51416],{"class":106},[96,54754,54755],{"class":155},"976",[96,54757,51471],{"class":102},[96,54759,1273],{"class":106},[96,54761,54762,54765,54767,54769,54771],{"class":98,"line":1681},[96,54763,54764],{"class":155},"      height",[96,54766,51416],{"class":106},[96,54768,1522],{"class":155},[96,54770,51471],{"class":102},[96,54772,1273],{"class":106},[96,54774,54775,54777,54779,54781,54783,54785],{"class":98,"line":1710},[96,54776,54685],{"class":155},[96,54778,51416],{"class":106},[96,54780,418],{"class":155},[96,54782,51471],{"class":102},[96,54784,51535],{"class":155},[96,54786,1273],{"class":106},[96,54788,54789],{"class":98,"line":1715},[96,54790,2170],{"class":106},[96,54792,54793],{"class":98,"line":1732},[96,54794,2383],{"emptyLinePlaceholder":23},[96,54796,54797,54800],{"class":98,"line":1737},[96,54798,54799],{"class":1946},"    .slider-footer",[96,54801,15556],{"class":106},[96,54803,54804,54806,54808,54811],{"class":98,"line":1742},[96,54805,54738],{"class":155},[96,54807,51416],{"class":106},[96,54809,54810],{"class":155},"absolute",[96,54812,1273],{"class":106},[96,54814,54815,54818,54820,54822],{"class":98,"line":1747},[96,54816,54817],{"class":155},"      left",[96,54819,51416],{"class":106},[96,54821,298],{"class":155},[96,54823,1273],{"class":106},[96,54825,54826,54829,54831,54833],{"class":98,"line":1761},[96,54827,54828],{"class":155},"      bottom",[96,54830,51416],{"class":106},[96,54832,298],{"class":155},[96,54834,1273],{"class":106},[96,54836,54837,54839,54841,54843,54845],{"class":98,"line":1766},[96,54838,54750],{"class":155},[96,54840,51416],{"class":106},[96,54842,418],{"class":155},[96,54844,435],{"class":102},[96,54846,1273],{"class":106},[96,54848,54849,54851,54853,54855,54857],{"class":98,"line":2560},[96,54850,54764],{"class":155},[96,54852,51416],{"class":106},[96,54854,682],{"class":155},[96,54856,435],{"class":102},[96,54858,1273],{"class":106},[96,54860,54861,54864,54866,54869],{"class":98,"line":2574},[96,54862,54863],{"class":155},"      background-color",[96,54865,51416],{"class":106},[96,54867,54868],{"class":155},"skyblue",[96,54870,1273],{"class":106},[96,54872,54873],{"class":98,"line":2582},[96,54874,2170],{"class":106},[96,54876,54877],{"class":98,"line":2587},[96,54878,2383],{"emptyLinePlaceholder":23},[96,54880,54881,54883,54885],{"class":98,"line":2593},[96,54882,54799],{"class":1946},[96,54884,6809],{"class":51279},[96,54886,15556],{"class":106},[96,54888,54889,54891,54893,54895],{"class":98,"line":2599},[96,54890,54738],{"class":155},[96,54892,51416],{"class":106},[96,54894,54810],{"class":155},[96,54896,1273],{"class":106},[96,54898,54899,54902,54904,54906,54908],{"class":98,"line":2604},[96,54900,54901],{"class":155},"      font-size",[96,54903,51416],{"class":106},[96,54905,1008],{"class":155},[96,54907,51471],{"class":102},[96,54909,1273],{"class":106},[96,54911,54912,54914,54916,54918,54920],{"class":98,"line":7932},[96,54913,54817],{"class":155},[96,54915,51416],{"class":106},[96,54917,807],{"class":155},[96,54919,51471],{"class":102},[96,54921,1273],{"class":106},[96,54923,54924,54927,54929,54931,54933],{"class":98,"line":7956},[96,54925,54926],{"class":155},"      top",[96,54928,51416],{"class":106},[96,54930,426],{"class":155},[96,54932,51471],{"class":102},[96,54934,1273],{"class":106},[96,54936,54937],{"class":98,"line":7961},[96,54938,2170],{"class":106},[96,54940,54941],{"class":98,"line":7967},[96,54942,2383],{"emptyLinePlaceholder":23},[96,54944,54945,54948],{"class":98,"line":7994},[96,54946,54947],{"class":51279},"    ul",[96,54949,15556],{"class":106},[96,54951,54952,54954,54956,54958],{"class":98,"line":7999},[96,54953,54738],{"class":155},[96,54955,51416],{"class":106},[96,54957,54810],{"class":155},[96,54959,1273],{"class":106},[96,54961,54962,54964,54966,54968,54970],{"class":98,"line":8005},[96,54963,54926],{"class":155},[96,54965,51416],{"class":106},[96,54967,888],{"class":155},[96,54969,51471],{"class":102},[96,54971,1273],{"class":106},[96,54973,54974,54976,54978,54980,54982],{"class":98,"line":8017},[96,54975,54817],{"class":155},[96,54977,51416],{"class":106},[96,54979,807],{"class":155},[96,54981,51471],{"class":102},[96,54983,1273],{"class":106},[96,54985,54986,54989,54991,54993],{"class":98,"line":8029},[96,54987,54988],{"class":155},"      display",[96,54990,51416],{"class":106},[96,54992,51456],{"class":155},[96,54994,1273],{"class":106},[96,54996,54997,55000,55002,55004],{"class":98,"line":8041},[96,54998,54999],{"class":155},"      justify-content",[96,55001,51416],{"class":106},[96,55003,51647],{"class":155},[96,55005,1273],{"class":106},[96,55007,55008,55010,55012,55014],{"class":98,"line":9700},[96,55009,54738],{"class":155},[96,55011,51416],{"class":106},[96,55013,54810],{"class":155},[96,55015,1273],{"class":106},[96,55017,55018,55020,55022,55024,55026],{"class":98,"line":9725},[96,55019,54750],{"class":155},[96,55021,51416],{"class":106},[96,55023,3975],{"class":155},[96,55025,51471],{"class":102},[96,55027,1273],{"class":106},[96,55029,55030,55032,55034,55036,55038],{"class":98,"line":9748},[96,55031,54764],{"class":155},[96,55033,51416],{"class":106},[96,55035,807],{"class":155},[96,55037,51471],{"class":102},[96,55039,1273],{"class":106},[96,55041,55042],{"class":98,"line":9772},[96,55043,2170],{"class":106},[96,55045,55046],{"class":98,"line":9777},[96,55047,2383],{"emptyLinePlaceholder":23},[96,55049,55050,55052,55055],{"class":98,"line":9782},[96,55051,54947],{"class":51279},[96,55053,55054],{"class":51279}," li",[96,55056,15556],{"class":106},[96,55058,55059,55061,55063,55065,55067],{"class":98,"line":9787},[96,55060,54750],{"class":155},[96,55062,51416],{"class":106},[96,55064,807],{"class":155},[96,55066,51471],{"class":102},[96,55068,1273],{"class":106},[96,55070,55071,55073,55075,55077,55079],{"class":98,"line":9796},[96,55072,54764],{"class":155},[96,55074,51416],{"class":106},[96,55076,807],{"class":155},[96,55078,51471],{"class":102},[96,55080,1273],{"class":106},[96,55082,55083,55085,55087,55090,55092,55094,55096,55098,55100,55102,55104,55107],{"class":98,"line":9801},[96,55084,54863],{"class":155},[96,55086,51416],{"class":106},[96,55088,55089],{"class":155},"rgba",[96,55091,107],{"class":106},[96,55093,298],{"class":155},[96,55095,12419],{"class":106},[96,55097,298],{"class":155},[96,55099,12419],{"class":106},[96,55101,298],{"class":155},[96,55103,12419],{"class":106},[96,55105,55106],{"class":155},".4",[96,55108,2702],{"class":106},[96,55110,55111,55114,55116,55118,55120],{"class":98,"line":9807},[96,55112,55113],{"class":155},"      border-radius",[96,55115,51416],{"class":106},[96,55117,553],{"class":155},[96,55119,51471],{"class":102},[96,55121,1273],{"class":106},[96,55123,55124],{"class":98,"line":9828},[96,55125,2170],{"class":106},[96,55127,55128],{"class":98,"line":9834},[96,55129,2383],{"emptyLinePlaceholder":23},[96,55131,55132,55135],{"class":98,"line":9848},[96,55133,55134],{"class":1946},"    .activate",[96,55136,15556],{"class":106},[96,55138,55139,55141,55143,55146],{"class":98,"line":9854},[96,55140,54863],{"class":155},[96,55142,51416],{"class":106},[96,55144,55145],{"class":155},"#f7f7f7",[96,55147,1273],{"class":106},[96,55149,55150],{"class":98,"line":9881},[96,55151,2170],{"class":106},[96,55153,55154,55156,55158],{"class":98,"line":9890},[96,55155,52396],{"class":106},[96,55157,5110],{"class":51279},[96,55159,51286],{"class":106},[96,55161,55162,55164,55166],{"class":98,"line":9896},[96,55163,51764],{"class":106},[96,55165,51313],{"class":51279},[96,55167,51286],{"class":106},[96,55169,55170],{"class":98,"line":9904},[96,55171,2383],{"emptyLinePlaceholder":23},[96,55173,55174,55176,55178],{"class":98,"line":9909},[96,55175,1017],{"class":106},[96,55177,51779],{"class":51279},[96,55179,51286],{"class":106},[96,55181,55182,55184,55186,55188,55190,55192],{"class":98,"line":16588},[96,55183,52123],{"class":106},[96,55185,51590],{"class":51279},[96,55187,53465],{"class":1946},[96,55189,152],{"class":106},[96,55191,53470],{"class":211},[96,55193,51286],{"class":106},[96,55195,55196,55198,55200,55202,55204,55207],{"class":98,"line":16594},[96,55197,51320],{"class":106},[96,55199,51590],{"class":51279},[96,55201,53465],{"class":1946},[96,55203,152],{"class":106},[96,55205,55206],{"class":211},"\"slider-wrapper\"",[96,55208,51286],{"class":106},[96,55210,55211,55214,55216,55219,55221,55224,55227,55229,55231],{"class":98,"line":16617},[96,55212,55213],{"class":106},"      \u003C",[96,55215,1445],{"class":51279},[96,55217,55218],{"class":1946}," src",[96,55220,152],{"class":106},[96,55222,55223],{"class":211},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[96,55225,55226],{"class":1946}," alt",[96,55228,152],{"class":106},[96,55230,7636],{"class":211},[96,55232,51286],{"class":106},[96,55234,55235,55237,55239],{"class":98,"line":16623},[96,55236,51755],{"class":106},[96,55238,51590],{"class":51279},[96,55240,51286],{"class":106},[96,55242,55243,55245,55247,55249,55251,55254],{"class":98,"line":16646},[96,55244,51320],{"class":106},[96,55246,51590],{"class":51279},[96,55248,53465],{"class":1946},[96,55250,152],{"class":106},[96,55252,55253],{"class":211},"\"slider-footer\"",[96,55255,51286],{"class":106},[96,55257,55258,55260,55262,55265,55267],{"class":98,"line":16660},[96,55259,55213],{"class":106},[96,55261,14],{"class":51279},[96,55263,55264],{"class":106},">对人类来说会不会太超前了?\u003C\u002F",[96,55266,14],{"class":51279},[96,55268,51286],{"class":106},[96,55270,55271,55273,55275],{"class":98,"line":16680},[96,55272,55213],{"class":106},[96,55274,1114],{"class":51279},[96,55276,51286],{"class":106},[96,55278,55279,55282,55284,55286,55288,55291,55294,55296],{"class":98,"line":16686},[96,55280,55281],{"class":106},"        \u003C",[96,55283,53],{"class":51279},[96,55285,53465],{"class":1946},[96,55287,152],{"class":106},[96,55289,55290],{"class":211},"\"activate\"",[96,55292,55293],{"class":106},">\u003C\u002F",[96,55295,53],{"class":51279},[96,55297,51286],{"class":106},[96,55299,55300,55302,55304,55306,55308],{"class":98,"line":16697},[96,55301,55281],{"class":106},[96,55303,53],{"class":51279},[96,55305,55293],{"class":106},[96,55307,53],{"class":51279},[96,55309,51286],{"class":106},[96,55311,55312,55314,55316,55318,55320],{"class":98,"line":16720},[96,55313,55281],{"class":106},[96,55315,53],{"class":51279},[96,55317,55293],{"class":106},[96,55319,53],{"class":51279},[96,55321,51286],{"class":106},[96,55323,55324,55326,55328,55330,55332],{"class":98,"line":16742},[96,55325,55281],{"class":106},[96,55327,53],{"class":51279},[96,55329,55293],{"class":106},[96,55331,53],{"class":51279},[96,55333,51286],{"class":106},[96,55335,55336,55338,55340,55342,55344],{"class":98,"line":16747},[96,55337,55281],{"class":106},[96,55339,53],{"class":51279},[96,55341,55293],{"class":106},[96,55343,53],{"class":51279},[96,55345,51286],{"class":106},[96,55347,55348,55350,55352,55354,55356],{"class":98,"line":16753},[96,55349,55281],{"class":106},[96,55351,53],{"class":51279},[96,55353,55293],{"class":106},[96,55355,53],{"class":51279},[96,55357,51286],{"class":106},[96,55359,55360,55362,55364,55366,55368],{"class":98,"line":16767},[96,55361,55281],{"class":106},[96,55363,53],{"class":51279},[96,55365,55293],{"class":106},[96,55367,53],{"class":51279},[96,55369,51286],{"class":106},[96,55371,55372,55374,55376,55378,55380],{"class":98,"line":16780},[96,55373,55281],{"class":106},[96,55375,53],{"class":51279},[96,55377,55293],{"class":106},[96,55379,53],{"class":51279},[96,55381,51286],{"class":106},[96,55383,55384,55387,55389],{"class":98,"line":16785},[96,55385,55386],{"class":106},"      \u003C\u002F",[96,55388,1114],{"class":51279},[96,55390,51286],{"class":106},[96,55392,55393,55395,55397],{"class":98,"line":16799},[96,55394,51755],{"class":106},[96,55396,51590],{"class":51279},[96,55398,51286],{"class":106},[96,55400,55401,55403,55405],{"class":98,"line":16804},[96,55402,52396],{"class":106},[96,55404,51590],{"class":51279},[96,55406,51286],{"class":106},[96,55408,55409,55411,55413],{"class":98,"line":16810},[96,55410,52123],{"class":106},[96,55412,51792],{"class":51279},[96,55414,51286],{"class":106},[96,55416,55417,55419,55422,55424],{"class":98,"line":16815},[96,55418,11205],{"class":102},[96,55420,55421],{"class":155}," arrImage",[96,55423,13548],{"class":102},[96,55425,55426],{"class":106}," [\n",[96,55428,55429,55432,55435,55438,55441,55444,55447],{"class":98,"line":16829},[96,55430,55431],{"class":106},"      { url: ",[96,55433,55434],{"class":211},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[96,55436,55437],{"class":106},", title: ",[96,55439,55440],{"class":211},"'对人类来说会不会太超前了?'",[96,55442,55443],{"class":106},", color: ",[96,55445,55446],{"class":211},"'rgba(100,67,68)'",[96,55448,55449],{"class":106}," },\n",[96,55451,55452,55454,55457,55459,55462,55464,55467],{"class":98,"line":16834},[96,55453,55431],{"class":106},[96,55455,55456],{"class":211},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[96,55458,55437],{"class":106},[96,55460,55461],{"class":211},"'开启剑与雪的黑暗传说!'",[96,55463,55443],{"class":106},[96,55465,55466],{"class":211},"'rgba(43,35,26)'",[96,55468,55449],{"class":106},[96,55470,55471,55473,55476,55478,55481,55483,55486],{"class":98,"line":16839},[96,55472,55431],{"class":106},[96,55474,55475],{"class":211},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[96,55477,55437],{"class":106},[96,55479,55480],{"class":211},"'真正的jo厨出现了!'",[96,55482,55443],{"class":106},[96,55484,55485],{"class":211},"'rgba(36,31,33)'",[96,55487,55449],{"class":106},[96,55489,55490,55492,55495,55497,55500,55502,55505],{"class":98,"line":16853},[96,55491,55431],{"class":106},[96,55493,55494],{"class":211},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[96,55496,55437],{"class":106},[96,55498,55499],{"class":211},"'李玉刚:让世界通过b站看到东方大国文化'",[96,55501,55443],{"class":106},[96,55503,55504],{"class":211},"'rgba(139,98,66)'",[96,55506,55449],{"class":106},[96,55508,55509,55511,55514,55516,55519,55521,55524],{"class":98,"line":16865},[96,55510,55431],{"class":106},[96,55512,55513],{"class":211},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[96,55515,55437],{"class":106},[96,55517,55518],{"class":211},"'快来分享你的寒假日常吧'",[96,55520,55443],{"class":106},[96,55522,55523],{"class":211},"'rgba(67,90,92)'",[96,55525,55449],{"class":106},[96,55527,55528,55530,55533,55535,55538,55540,55543],{"class":98,"line":16870},[96,55529,55431],{"class":106},[96,55531,55532],{"class":211},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[96,55534,55437],{"class":106},[96,55536,55537],{"class":211},"'哔哩哔哩小年YEAR'",[96,55539,55443],{"class":106},[96,55541,55542],{"class":211},"'rgba(166,131,143)'",[96,55544,55449],{"class":106},[96,55546,55547,55549,55552,55554,55557,55559,55562],{"class":98,"line":16883},[96,55548,55431],{"class":106},[96,55550,55551],{"class":211},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[96,55553,55437],{"class":106},[96,55555,55556],{"class":211},"'一站式解决你的电脑配置问题'",[96,55558,55443],{"class":106},[96,55560,55561],{"class":211},"'rgba(53,29,25)'",[96,55563,55449],{"class":106},[96,55565,55566,55568,55571,55573,55576,55578,55581],{"class":98,"line":16888},[96,55567,55431],{"class":106},[96,55569,55570],{"class":211},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[96,55572,55437],{"class":106},[96,55574,55575],{"class":211},"'谁不想和小猫咪贴贴呢?'",[96,55577,55443],{"class":106},[96,55579,55580],{"class":211},"'rgba(99,72,114)'",[96,55582,55583],{"class":106}," }\n",[96,55585,55586],{"class":98,"line":16893},[96,55587,53088],{"class":106},[96,55589,55590,55592,55595,55597,55599,55601,55603,55606],{"class":98,"line":16898},[96,55591,11205],{"class":102},[96,55593,55594],{"class":155}," img",[96,55596,13548],{"class":102},[96,55598,54375],{"class":106},[96,55600,54378],{"class":1946},[96,55602,107],{"class":106},[96,55604,55605],{"class":211},"'.slider-wrapper img'",[96,55607,113],{"class":106},[96,55609,55610,55612,55614,55616,55618,55620,55622,55625],{"class":98,"line":16911},[96,55611,11205],{"class":102},[96,55613,6809],{"class":155},[96,55615,13548],{"class":102},[96,55617,54375],{"class":106},[96,55619,54378],{"class":1946},[96,55621,107],{"class":106},[96,55623,55624],{"class":211},"'.slider-footer p'",[96,55626,113],{"class":106},[96,55628,55629,55631,55634,55636,55638,55640,55642,55645],{"class":98,"line":16916},[96,55630,11205],{"class":102},[96,55632,55633],{"class":155}," color",[96,55635,13548],{"class":102},[96,55637,54375],{"class":106},[96,55639,54378],{"class":1946},[96,55641,107],{"class":106},[96,55643,55644],{"class":211},"'.slider-footer'",[96,55646,113],{"class":106},[96,55648,55649,55651,55654,55656,55658,55661,55663,55666],{"class":98,"line":32612},[96,55650,11205],{"class":102},[96,55652,55653],{"class":155}," lis",[96,55655,13548],{"class":102},[96,55657,54375],{"class":106},[96,55659,55660],{"class":1946},"querySelectorAll",[96,55662,107],{"class":106},[96,55664,55665],{"class":211},"'.slider-footer ul li'",[96,55667,113],{"class":106},[96,55669,55670,55672,55674,55676],{"class":98,"line":32618},[96,55671,52198],{"class":102},[96,55673,9422],{"class":106},[96,55675,152],{"class":102},[96,55677,55678],{"class":155}," 1\n",[96,55680,55681,55683,55686,55688,55690,55692,55694],{"class":98,"line":32624},[96,55682,52198],{"class":102},[96,55684,55685],{"class":106}," timer ",[96,55687,152],{"class":102},[96,55689,54423],{"class":1946},[96,55691,107],{"class":106},[96,55693,54428],{"class":102},[96,55695,54431],{"class":106},[96,55697,55698,55701,55703],{"class":98,"line":32630},[96,55699,55700],{"class":106},"      img.src ",[96,55702,152],{"class":102},[96,55704,55705],{"class":106}," arrImage[i].url\n",[96,55707,55708,55711,55713],{"class":98,"line":32636},[96,55709,55710],{"class":106},"      p.innerHTML ",[96,55712,152],{"class":102},[96,55714,55715],{"class":106}," arrImage[i].title\n",[96,55717,55718,55721,55723],{"class":98,"line":32647},[96,55719,55720],{"class":106},"      color.style.backgroundColor ",[96,55722,152],{"class":102},[96,55724,55725],{"class":106}," arrImage[i].color\n",[96,55727,55728],{"class":98,"line":32653},[96,55729,55730],{"class":165},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[96,55732,55733],{"class":98,"line":32673},[96,55734,55735],{"class":165},"      \u002F\u002F li.classList.add('activate')\n",[96,55737,55738],{"class":98,"line":32679},[96,55739,55740],{"class":165},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[96,55742,55743],{"class":98,"line":32690},[96,55744,55745],{"class":165},"      \u002F\u002F lis[i].classList.remove('activate')\n",[96,55747,55748,55751,55753,55755,55758,55761,55764,55766,55769],{"class":98,"line":32696},[96,55749,55750],{"class":106},"      document.",[96,55752,54378],{"class":1946},[96,55754,107],{"class":106},[96,55756,55757],{"class":211},"'.activate'",[96,55759,55760],{"class":106},")?.classList.",[96,55762,55763],{"class":1946},"toggle",[96,55765,107],{"class":106},[96,55767,55768],{"class":211},"'activate'",[96,55770,113],{"class":106},[96,55772,55773,55776,55778,55780,55782],{"class":98,"line":32702},[96,55774,55775],{"class":106},"      lis[i].classList.",[96,55777,5318],{"class":1946},[96,55779,107],{"class":106},[96,55781,55768],{"class":211},[96,55783,113],{"class":106},[96,55785,55786],{"class":98,"line":32708},[96,55787,2383],{"emptyLinePlaceholder":23},[96,55789,55790,55793,55795,55797,55799,55801,55803,55805,55808],{"class":98,"line":32714},[96,55791,55792],{"class":106},"      i ",[96,55794,152],{"class":102},[96,55796,54462],{"class":106},[96,55798,588],{"class":102},[96,55800,25097],{"class":155},[96,55802,13698],{"class":106},[96,55804,435],{"class":102},[96,55806,55807],{"class":106}," arrImage.",[96,55809,55810],{"class":155},"length\n",[96,55812,55813],{"class":98,"line":32720},[96,55814,2383],{"emptyLinePlaceholder":23},[96,55816,55817,55819,55821],{"class":98,"line":32726},[96,55818,54514],{"class":106},[96,55820,6394],{"class":155},[96,55822,113],{"class":106},[96,55824,55825,55827,55829],{"class":98,"line":32732},[96,55826,52396],{"class":106},[96,55828,51792],{"class":51279},[96,55830,51286],{"class":106},[96,55832,55833,55835,55837],{"class":98,"line":32752},[96,55834,51764],{"class":106},[96,55836,51779],{"class":51279},[96,55838,51286],{"class":106},[96,55840,55841],{"class":98,"line":32758},[96,55842,2383],{"emptyLinePlaceholder":23},[96,55844,55845,55847,55849],{"class":98,"line":32774},[96,55846,51764],{"class":106},[96,55848,50614],{"class":51279},[96,55850,51286],{"class":106},[14,55852,55853],{},[1445,55854],{"alt":18,"src":55855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[14,55857,55858],{},"?.就是短路保护,确保输出正常进行",[14,55860,55861],{},"不要忘记取余%,有时候可以用",[14,55863,55864],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[50,55866,55867],{"start":19},[53,55868,55869],{},"法2",[87,55871,55873],{"className":50612,"code":55872,"language":50614,"meta":18,"style":18},"\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",[93,55874,55875,55885,55899,55903,55911,55925,55945,55957,55965,55971,55981,55991,55995,55999,56005,56015,56019,56023,56029,56039,56051,56063,56077,56081,56085,56091,56101,56111,56121,56133,56145,56155,56159,56163,56171,56181,56193,56205,56217,56221,56225,56231,56241,56253,56265,56275,56285,56295,56307,56319,56323,56327,56335,56347,56359,56385,56397,56401,56405,56411,56421,56425,56433,56441,56445,56453,56467,56481,56501,56509,56523,56535,56543,56561,56573,56585,56597,56609,56621,56633,56645,56653,56661,56669,56677,56688,56704,56720,56736,56752,56768,56784,56800,56816,56820,56825,56843,56861,56871,56876,56881,56892,56898,56913,56922,56926,56931,56940,56945,56954,56959,56964,56969,56992,57022,57026,57034,57038,57046,57054,57058],{"__ignoreMap":18},[96,55876,55877,55879,55881,55883],{"class":98,"line":99},[96,55878,51276],{"class":106},[96,55880,51280],{"class":51279},[96,55882,51283],{"class":1946},[96,55884,51286],{"class":106},[96,55886,55887,55889,55891,55893,55895,55897],{"class":98,"line":19},[96,55888,1017],{"class":106},[96,55890,50614],{"class":51279},[96,55892,51295],{"class":1946},[96,55894,152],{"class":106},[96,55896,51300],{"class":211},[96,55898,51286],{"class":106},[96,55900,55901],{"class":98,"line":1162},[96,55902,2383],{"emptyLinePlaceholder":23},[96,55904,55905,55907,55909],{"class":98,"line":1177},[96,55906,1017],{"class":106},[96,55908,51313],{"class":51279},[96,55910,51286],{"class":106},[96,55912,55913,55915,55917,55919,55921,55923],{"class":98,"line":1183},[96,55914,52123],{"class":106},[96,55916,51323],{"class":51279},[96,55918,51326],{"class":1946},[96,55920,152],{"class":106},[96,55922,51331],{"class":211},[96,55924,51286],{"class":106},[96,55926,55927,55929,55931,55933,55935,55937,55939,55941,55943],{"class":98,"line":1197},[96,55928,52123],{"class":106},[96,55930,51323],{"class":51279},[96,55932,14904],{"class":1946},[96,55934,152],{"class":106},[96,55936,51370],{"class":211},[96,55938,51350],{"class":1946},[96,55940,152],{"class":106},[96,55942,51377],{"class":211},[96,55944,51286],{"class":106},[96,55946,55947,55949,55951,55953,55955],{"class":98,"line":1203},[96,55948,52123],{"class":106},[96,55950,51386],{"class":51279},[96,55952,51389],{"class":106},[96,55954,51386],{"class":51279},[96,55956,51286],{"class":106},[96,55958,55959,55961,55963],{"class":98,"line":1294},[96,55960,52123],{"class":106},[96,55962,5110],{"class":51279},[96,55964,51286],{"class":106},[96,55966,55967,55969],{"class":98,"line":1300},[96,55968,6387],{"class":51279},[96,55970,15556],{"class":106},[96,55972,55973,55975,55977,55979],{"class":98,"line":1312},[96,55974,54674],{"class":155},[96,55976,51416],{"class":106},[96,55978,298],{"class":155},[96,55980,1273],{"class":106},[96,55982,55983,55985,55987,55989],{"class":98,"line":1595},[96,55984,54685],{"class":155},[96,55986,51416],{"class":106},[96,55988,298],{"class":155},[96,55990,1273],{"class":106},[96,55992,55993],{"class":98,"line":1600},[96,55994,2170],{"class":106},[96,55996,55997],{"class":98,"line":1606},[96,55998,2383],{"emptyLinePlaceholder":23},[96,56000,56001,56003],{"class":98,"line":1611},[96,56002,54704],{"class":51279},[96,56004,15556],{"class":106},[96,56006,56007,56009,56011,56013],{"class":98,"line":1625},[96,56008,54711],{"class":155},[96,56010,51416],{"class":106},[96,56012,54716],{"class":155},[96,56014,1273],{"class":106},[96,56016,56017],{"class":98,"line":1630},[96,56018,2170],{"class":106},[96,56020,56021],{"class":98,"line":1636},[96,56022,2383],{"emptyLinePlaceholder":23},[96,56024,56025,56027],{"class":98,"line":1657},[96,56026,54731],{"class":1946},[96,56028,15556],{"class":106},[96,56030,56031,56033,56035,56037],{"class":98,"line":1662},[96,56032,54738],{"class":155},[96,56034,51416],{"class":106},[96,56036,54743],{"class":155},[96,56038,1273],{"class":106},[96,56040,56041,56043,56045,56047,56049],{"class":98,"line":1676},[96,56042,54750],{"class":155},[96,56044,51416],{"class":106},[96,56046,54755],{"class":155},[96,56048,51471],{"class":102},[96,56050,1273],{"class":106},[96,56052,56053,56055,56057,56059,56061],{"class":98,"line":1681},[96,56054,54764],{"class":155},[96,56056,51416],{"class":106},[96,56058,1522],{"class":155},[96,56060,51471],{"class":102},[96,56062,1273],{"class":106},[96,56064,56065,56067,56069,56071,56073,56075],{"class":98,"line":1710},[96,56066,54685],{"class":155},[96,56068,51416],{"class":106},[96,56070,418],{"class":155},[96,56072,51471],{"class":102},[96,56074,51535],{"class":155},[96,56076,1273],{"class":106},[96,56078,56079],{"class":98,"line":1715},[96,56080,2170],{"class":106},[96,56082,56083],{"class":98,"line":1732},[96,56084,2383],{"emptyLinePlaceholder":23},[96,56086,56087,56089],{"class":98,"line":1737},[96,56088,54799],{"class":1946},[96,56090,15556],{"class":106},[96,56092,56093,56095,56097,56099],{"class":98,"line":1742},[96,56094,54738],{"class":155},[96,56096,51416],{"class":106},[96,56098,54810],{"class":155},[96,56100,1273],{"class":106},[96,56102,56103,56105,56107,56109],{"class":98,"line":1747},[96,56104,54817],{"class":155},[96,56106,51416],{"class":106},[96,56108,298],{"class":155},[96,56110,1273],{"class":106},[96,56112,56113,56115,56117,56119],{"class":98,"line":1761},[96,56114,54828],{"class":155},[96,56116,51416],{"class":106},[96,56118,298],{"class":155},[96,56120,1273],{"class":106},[96,56122,56123,56125,56127,56129,56131],{"class":98,"line":1766},[96,56124,54750],{"class":155},[96,56126,51416],{"class":106},[96,56128,418],{"class":155},[96,56130,435],{"class":102},[96,56132,1273],{"class":106},[96,56134,56135,56137,56139,56141,56143],{"class":98,"line":2560},[96,56136,54764],{"class":155},[96,56138,51416],{"class":106},[96,56140,682],{"class":155},[96,56142,435],{"class":102},[96,56144,1273],{"class":106},[96,56146,56147,56149,56151,56153],{"class":98,"line":2574},[96,56148,54863],{"class":155},[96,56150,51416],{"class":106},[96,56152,54868],{"class":155},[96,56154,1273],{"class":106},[96,56156,56157],{"class":98,"line":2582},[96,56158,2170],{"class":106},[96,56160,56161],{"class":98,"line":2587},[96,56162,2383],{"emptyLinePlaceholder":23},[96,56164,56165,56167,56169],{"class":98,"line":2593},[96,56166,54799],{"class":1946},[96,56168,6809],{"class":51279},[96,56170,15556],{"class":106},[96,56172,56173,56175,56177,56179],{"class":98,"line":2599},[96,56174,54738],{"class":155},[96,56176,51416],{"class":106},[96,56178,54810],{"class":155},[96,56180,1273],{"class":106},[96,56182,56183,56185,56187,56189,56191],{"class":98,"line":2604},[96,56184,54901],{"class":155},[96,56186,51416],{"class":106},[96,56188,1008],{"class":155},[96,56190,51471],{"class":102},[96,56192,1273],{"class":106},[96,56194,56195,56197,56199,56201,56203],{"class":98,"line":7932},[96,56196,54817],{"class":155},[96,56198,51416],{"class":106},[96,56200,807],{"class":155},[96,56202,51471],{"class":102},[96,56204,1273],{"class":106},[96,56206,56207,56209,56211,56213,56215],{"class":98,"line":7956},[96,56208,54926],{"class":155},[96,56210,51416],{"class":106},[96,56212,426],{"class":155},[96,56214,51471],{"class":102},[96,56216,1273],{"class":106},[96,56218,56219],{"class":98,"line":7961},[96,56220,2170],{"class":106},[96,56222,56223],{"class":98,"line":7967},[96,56224,2383],{"emptyLinePlaceholder":23},[96,56226,56227,56229],{"class":98,"line":7994},[96,56228,54947],{"class":51279},[96,56230,15556],{"class":106},[96,56232,56233,56235,56237,56239],{"class":98,"line":7999},[96,56234,54738],{"class":155},[96,56236,51416],{"class":106},[96,56238,54810],{"class":155},[96,56240,1273],{"class":106},[96,56242,56243,56245,56247,56249,56251],{"class":98,"line":8005},[96,56244,54926],{"class":155},[96,56246,51416],{"class":106},[96,56248,888],{"class":155},[96,56250,51471],{"class":102},[96,56252,1273],{"class":106},[96,56254,56255,56257,56259,56261,56263],{"class":98,"line":8017},[96,56256,54817],{"class":155},[96,56258,51416],{"class":106},[96,56260,807],{"class":155},[96,56262,51471],{"class":102},[96,56264,1273],{"class":106},[96,56266,56267,56269,56271,56273],{"class":98,"line":8029},[96,56268,54988],{"class":155},[96,56270,51416],{"class":106},[96,56272,51456],{"class":155},[96,56274,1273],{"class":106},[96,56276,56277,56279,56281,56283],{"class":98,"line":8041},[96,56278,54999],{"class":155},[96,56280,51416],{"class":106},[96,56282,51647],{"class":155},[96,56284,1273],{"class":106},[96,56286,56287,56289,56291,56293],{"class":98,"line":9700},[96,56288,54738],{"class":155},[96,56290,51416],{"class":106},[96,56292,54810],{"class":155},[96,56294,1273],{"class":106},[96,56296,56297,56299,56301,56303,56305],{"class":98,"line":9725},[96,56298,54750],{"class":155},[96,56300,51416],{"class":106},[96,56302,3975],{"class":155},[96,56304,51471],{"class":102},[96,56306,1273],{"class":106},[96,56308,56309,56311,56313,56315,56317],{"class":98,"line":9748},[96,56310,54764],{"class":155},[96,56312,51416],{"class":106},[96,56314,807],{"class":155},[96,56316,51471],{"class":102},[96,56318,1273],{"class":106},[96,56320,56321],{"class":98,"line":9772},[96,56322,2170],{"class":106},[96,56324,56325],{"class":98,"line":9777},[96,56326,2383],{"emptyLinePlaceholder":23},[96,56328,56329,56331,56333],{"class":98,"line":9782},[96,56330,54947],{"class":51279},[96,56332,55054],{"class":51279},[96,56334,15556],{"class":106},[96,56336,56337,56339,56341,56343,56345],{"class":98,"line":9787},[96,56338,54750],{"class":155},[96,56340,51416],{"class":106},[96,56342,807],{"class":155},[96,56344,51471],{"class":102},[96,56346,1273],{"class":106},[96,56348,56349,56351,56353,56355,56357],{"class":98,"line":9796},[96,56350,54764],{"class":155},[96,56352,51416],{"class":106},[96,56354,807],{"class":155},[96,56356,51471],{"class":102},[96,56358,1273],{"class":106},[96,56360,56361,56363,56365,56367,56369,56371,56373,56375,56377,56379,56381,56383],{"class":98,"line":9801},[96,56362,54863],{"class":155},[96,56364,51416],{"class":106},[96,56366,55089],{"class":155},[96,56368,107],{"class":106},[96,56370,298],{"class":155},[96,56372,12419],{"class":106},[96,56374,298],{"class":155},[96,56376,12419],{"class":106},[96,56378,298],{"class":155},[96,56380,12419],{"class":106},[96,56382,55106],{"class":155},[96,56384,2702],{"class":106},[96,56386,56387,56389,56391,56393,56395],{"class":98,"line":9807},[96,56388,55113],{"class":155},[96,56390,51416],{"class":106},[96,56392,553],{"class":155},[96,56394,51471],{"class":102},[96,56396,1273],{"class":106},[96,56398,56399],{"class":98,"line":9828},[96,56400,2170],{"class":106},[96,56402,56403],{"class":98,"line":9834},[96,56404,2383],{"emptyLinePlaceholder":23},[96,56406,56407,56409],{"class":98,"line":9848},[96,56408,55134],{"class":1946},[96,56410,15556],{"class":106},[96,56412,56413,56415,56417,56419],{"class":98,"line":9854},[96,56414,54863],{"class":155},[96,56416,51416],{"class":106},[96,56418,55145],{"class":155},[96,56420,1273],{"class":106},[96,56422,56423],{"class":98,"line":9881},[96,56424,2170],{"class":106},[96,56426,56427,56429,56431],{"class":98,"line":9890},[96,56428,52396],{"class":106},[96,56430,5110],{"class":51279},[96,56432,51286],{"class":106},[96,56434,56435,56437,56439],{"class":98,"line":9896},[96,56436,51764],{"class":106},[96,56438,51313],{"class":51279},[96,56440,51286],{"class":106},[96,56442,56443],{"class":98,"line":9904},[96,56444,2383],{"emptyLinePlaceholder":23},[96,56446,56447,56449,56451],{"class":98,"line":9909},[96,56448,1017],{"class":106},[96,56450,51779],{"class":51279},[96,56452,51286],{"class":106},[96,56454,56455,56457,56459,56461,56463,56465],{"class":98,"line":16588},[96,56456,52123],{"class":106},[96,56458,51590],{"class":51279},[96,56460,53465],{"class":1946},[96,56462,152],{"class":106},[96,56464,53470],{"class":211},[96,56466,51286],{"class":106},[96,56468,56469,56471,56473,56475,56477,56479],{"class":98,"line":16594},[96,56470,51320],{"class":106},[96,56472,51590],{"class":51279},[96,56474,53465],{"class":1946},[96,56476,152],{"class":106},[96,56478,55206],{"class":211},[96,56480,51286],{"class":106},[96,56482,56483,56485,56487,56489,56491,56493,56495,56497,56499],{"class":98,"line":16617},[96,56484,55213],{"class":106},[96,56486,1445],{"class":51279},[96,56488,55218],{"class":1946},[96,56490,152],{"class":106},[96,56492,55223],{"class":211},[96,56494,55226],{"class":1946},[96,56496,152],{"class":106},[96,56498,7636],{"class":211},[96,56500,51286],{"class":106},[96,56502,56503,56505,56507],{"class":98,"line":16623},[96,56504,51755],{"class":106},[96,56506,51590],{"class":51279},[96,56508,51286],{"class":106},[96,56510,56511,56513,56515,56517,56519,56521],{"class":98,"line":16646},[96,56512,51320],{"class":106},[96,56514,51590],{"class":51279},[96,56516,53465],{"class":1946},[96,56518,152],{"class":106},[96,56520,55253],{"class":211},[96,56522,51286],{"class":106},[96,56524,56525,56527,56529,56531,56533],{"class":98,"line":16660},[96,56526,55213],{"class":106},[96,56528,14],{"class":51279},[96,56530,55264],{"class":106},[96,56532,14],{"class":51279},[96,56534,51286],{"class":106},[96,56536,56537,56539,56541],{"class":98,"line":16680},[96,56538,55213],{"class":106},[96,56540,1114],{"class":51279},[96,56542,51286],{"class":106},[96,56544,56545,56547,56549,56551,56553,56555,56557,56559],{"class":98,"line":16686},[96,56546,55281],{"class":106},[96,56548,53],{"class":51279},[96,56550,53465],{"class":1946},[96,56552,152],{"class":106},[96,56554,55290],{"class":211},[96,56556,55293],{"class":106},[96,56558,53],{"class":51279},[96,56560,51286],{"class":106},[96,56562,56563,56565,56567,56569,56571],{"class":98,"line":16697},[96,56564,55281],{"class":106},[96,56566,53],{"class":51279},[96,56568,55293],{"class":106},[96,56570,53],{"class":51279},[96,56572,51286],{"class":106},[96,56574,56575,56577,56579,56581,56583],{"class":98,"line":16720},[96,56576,55281],{"class":106},[96,56578,53],{"class":51279},[96,56580,55293],{"class":106},[96,56582,53],{"class":51279},[96,56584,51286],{"class":106},[96,56586,56587,56589,56591,56593,56595],{"class":98,"line":16742},[96,56588,55281],{"class":106},[96,56590,53],{"class":51279},[96,56592,55293],{"class":106},[96,56594,53],{"class":51279},[96,56596,51286],{"class":106},[96,56598,56599,56601,56603,56605,56607],{"class":98,"line":16747},[96,56600,55281],{"class":106},[96,56602,53],{"class":51279},[96,56604,55293],{"class":106},[96,56606,53],{"class":51279},[96,56608,51286],{"class":106},[96,56610,56611,56613,56615,56617,56619],{"class":98,"line":16753},[96,56612,55281],{"class":106},[96,56614,53],{"class":51279},[96,56616,55293],{"class":106},[96,56618,53],{"class":51279},[96,56620,51286],{"class":106},[96,56622,56623,56625,56627,56629,56631],{"class":98,"line":16767},[96,56624,55281],{"class":106},[96,56626,53],{"class":51279},[96,56628,55293],{"class":106},[96,56630,53],{"class":51279},[96,56632,51286],{"class":106},[96,56634,56635,56637,56639,56641,56643],{"class":98,"line":16780},[96,56636,55281],{"class":106},[96,56638,53],{"class":51279},[96,56640,55293],{"class":106},[96,56642,53],{"class":51279},[96,56644,51286],{"class":106},[96,56646,56647,56649,56651],{"class":98,"line":16785},[96,56648,55386],{"class":106},[96,56650,1114],{"class":51279},[96,56652,51286],{"class":106},[96,56654,56655,56657,56659],{"class":98,"line":16799},[96,56656,51755],{"class":106},[96,56658,51590],{"class":51279},[96,56660,51286],{"class":106},[96,56662,56663,56665,56667],{"class":98,"line":16804},[96,56664,52396],{"class":106},[96,56666,51590],{"class":51279},[96,56668,51286],{"class":106},[96,56670,56671,56673,56675],{"class":98,"line":16810},[96,56672,52123],{"class":106},[96,56674,51792],{"class":51279},[96,56676,51286],{"class":106},[96,56678,56679,56681,56684,56686],{"class":98,"line":16815},[96,56680,11205],{"class":102},[96,56682,56683],{"class":155}," sliderData",[96,56685,13548],{"class":102},[96,56687,55426],{"class":106},[96,56689,56690,56692,56694,56696,56698,56700,56702],{"class":98,"line":16829},[96,56691,55431],{"class":106},[96,56693,55434],{"class":211},[96,56695,55437],{"class":106},[96,56697,55440],{"class":211},[96,56699,55443],{"class":106},[96,56701,55446],{"class":211},[96,56703,55449],{"class":106},[96,56705,56706,56708,56710,56712,56714,56716,56718],{"class":98,"line":16834},[96,56707,55431],{"class":106},[96,56709,55456],{"class":211},[96,56711,55437],{"class":106},[96,56713,55461],{"class":211},[96,56715,55443],{"class":106},[96,56717,55466],{"class":211},[96,56719,55449],{"class":106},[96,56721,56722,56724,56726,56728,56730,56732,56734],{"class":98,"line":16839},[96,56723,55431],{"class":106},[96,56725,55475],{"class":211},[96,56727,55437],{"class":106},[96,56729,55480],{"class":211},[96,56731,55443],{"class":106},[96,56733,55485],{"class":211},[96,56735,55449],{"class":106},[96,56737,56738,56740,56742,56744,56746,56748,56750],{"class":98,"line":16853},[96,56739,55431],{"class":106},[96,56741,55494],{"class":211},[96,56743,55437],{"class":106},[96,56745,55499],{"class":211},[96,56747,55443],{"class":106},[96,56749,55504],{"class":211},[96,56751,55449],{"class":106},[96,56753,56754,56756,56758,56760,56762,56764,56766],{"class":98,"line":16865},[96,56755,55431],{"class":106},[96,56757,55513],{"class":211},[96,56759,55437],{"class":106},[96,56761,55518],{"class":211},[96,56763,55443],{"class":106},[96,56765,55523],{"class":211},[96,56767,55449],{"class":106},[96,56769,56770,56772,56774,56776,56778,56780,56782],{"class":98,"line":16870},[96,56771,55431],{"class":106},[96,56773,55532],{"class":211},[96,56775,55437],{"class":106},[96,56777,55537],{"class":211},[96,56779,55443],{"class":106},[96,56781,55542],{"class":211},[96,56783,55449],{"class":106},[96,56785,56786,56788,56790,56792,56794,56796,56798],{"class":98,"line":16883},[96,56787,55431],{"class":106},[96,56789,55551],{"class":211},[96,56791,55437],{"class":106},[96,56793,55556],{"class":211},[96,56795,55443],{"class":106},[96,56797,55561],{"class":211},[96,56799,55449],{"class":106},[96,56801,56802,56804,56806,56808,56810,56812,56814],{"class":98,"line":16888},[96,56803,55431],{"class":106},[96,56805,55570],{"class":211},[96,56807,55437],{"class":106},[96,56809,55575],{"class":211},[96,56811,55443],{"class":106},[96,56813,55580],{"class":211},[96,56815,55583],{"class":106},[96,56817,56818],{"class":98,"line":16893},[96,56819,53088],{"class":106},[96,56821,56822],{"class":98,"line":16898},[96,56823,56824],{"class":165},"    \u002F\u002F 1.获取元素\n",[96,56826,56827,56829,56831,56833,56835,56837,56839,56841],{"class":98,"line":16911},[96,56828,11205],{"class":102},[96,56830,55594],{"class":155},[96,56832,13548],{"class":102},[96,56834,54375],{"class":106},[96,56836,54378],{"class":1946},[96,56838,107],{"class":106},[96,56840,55605],{"class":211},[96,56842,113],{"class":106},[96,56844,56845,56847,56849,56851,56853,56855,56857,56859],{"class":98,"line":16916},[96,56846,11205],{"class":102},[96,56848,6809],{"class":155},[96,56850,13548],{"class":102},[96,56852,54375],{"class":106},[96,56854,54378],{"class":1946},[96,56856,107],{"class":106},[96,56858,55624],{"class":211},[96,56860,113],{"class":106},[96,56862,56863,56865,56867,56869],{"class":98,"line":32612},[96,56864,52198],{"class":102},[96,56866,9422],{"class":106},[96,56868,152],{"class":102},[96,56870,47312],{"class":155},[96,56872,56873],{"class":98,"line":32618},[96,56874,56875],{"class":165},"    \u002F\u002F 2.开启定时器\n",[96,56877,56878],{"class":98,"line":32624},[96,56879,56880],{"class":165},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[96,56882,56883,56886,56888,56890],{"class":98,"line":32630},[96,56884,56885],{"class":1946},"    setInterval",[96,56887,107],{"class":106},[96,56889,54428],{"class":102},[96,56891,54431],{"class":106},[96,56893,56894,56896],{"class":98,"line":32636},[96,56895,54436],{"class":106},[96,56897,2685],{"class":102},[96,56899,56900,56902,56904,56906,56909,56911],{"class":98,"line":32647},[96,56901,54459],{"class":102},[96,56903,54462],{"class":106},[96,56905,1693],{"class":102},[96,56907,56908],{"class":106}," sliderData.",[96,56910,51947],{"class":155},[96,56912,12426],{"class":106},[96,56914,56915,56918,56920],{"class":98,"line":32653},[96,56916,56917],{"class":106},"        i ",[96,56919,152],{"class":102},[96,56921,47312],{"class":155},[96,56923,56924],{"class":98,"line":32673},[96,56925,52377],{"class":106},[96,56927,56928],{"class":98,"line":32679},[96,56929,56930],{"class":165},"      \u002F\u002F 更换图片路径\n",[96,56932,56933,56935,56937],{"class":98,"line":32690},[96,56934,55700],{"class":106},[96,56936,152],{"class":102},[96,56938,56939],{"class":106}," sliderData[i].url\n",[96,56941,56942],{"class":98,"line":32696},[96,56943,56944],{"class":165},"      \u002F\u002F 把文字写到p里面\n",[96,56946,56947,56949,56951],{"class":98,"line":32702},[96,56948,55710],{"class":106},[96,56950,152],{"class":102},[96,56952,56953],{"class":106}," sliderData[i].title\n",[96,56955,56956],{"class":98,"line":32708},[96,56957,56958],{"class":165},"      \u002F\u002F 小圆点\n",[96,56960,56961],{"class":98,"line":32714},[96,56962,56963],{"class":165},"      \u002F\u002F 先删除以前的active\n",[96,56965,56966],{"class":98,"line":32720},[96,56967,56968],{"class":165},"      \u002F\u002F 只让当前li添加active\n",[96,56970,56971,56973,56975,56977,56980,56983,56986,56988,56990],{"class":98,"line":32726},[96,56972,55750],{"class":106},[96,56974,54378],{"class":1946},[96,56976,107],{"class":106},[96,56978,56979],{"class":211},"'.slider-footer .activate'",[96,56981,56982],{"class":106},").classList.",[96,56984,56985],{"class":1946},"remove",[96,56987,107],{"class":106},[96,56989,55768],{"class":211},[96,56991,113],{"class":106},[96,56993,56994,56996,56998,57000,57003,57005,57007,57009,57012,57014,57016,57018,57020],{"class":98,"line":32732},[96,56995,55750],{"class":106},[96,56997,54378],{"class":1946},[96,56999,107],{"class":106},[96,57001,57002],{"class":211},"`.slider-footer ul li:nth-child(${",[96,57004,548],{"class":106},[96,57006,45545],{"class":102},[96,57008,25097],{"class":155},[96,57010,57011],{"class":211},"})`",[96,57013,56982],{"class":106},[96,57015,5318],{"class":1946},[96,57017,107],{"class":106},[96,57019,55768],{"class":211},[96,57021,113],{"class":106},[96,57023,57024],{"class":98,"line":32752},[96,57025,2383],{"emptyLinePlaceholder":23},[96,57027,57028,57030,57032],{"class":98,"line":32758},[96,57029,54514],{"class":106},[96,57031,6394],{"class":155},[96,57033,113],{"class":106},[96,57035,57036],{"class":98,"line":32774},[96,57037,2383],{"emptyLinePlaceholder":23},[96,57039,57040,57042,57044],{"class":98,"line":32780},[96,57041,52396],{"class":106},[96,57043,51792],{"class":51279},[96,57045,51286],{"class":106},[96,57047,57048,57050,57052],{"class":98,"line":32794},[96,57049,51764],{"class":106},[96,57051,51779],{"class":51279},[96,57053,51286],{"class":106},[96,57055,57056],{"class":98,"line":32800},[96,57057,2383],{"emptyLinePlaceholder":23},[96,57059,57060,57062,57064],{"class":98,"line":32815},[96,57061,51764],{"class":106},[96,57063,50614],{"class":51279},[96,57065,51286],{"class":106},[67,57067,57069],{"id":57068},"_317-重要知识点","3.1.7 重要知识点",[14,57071,57072,57073],{},"浏览器在渲染文本时， ",[256,57074,57075],{},"没有空格或换行符就没有“断行点”",[14,57077,57078],{},[1445,57079],{"alt":18,"src":57080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[14,57082,57083],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[14,57085,57086],{},[1445,57087],{"alt":18,"src":57088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[14,57090,57091],{},[1445,57092],{"alt":18,"src":57093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[38,57095,57097],{"id":57096},"_32-dom事件基础","3.2 DOM事件基础",[67,57099,57101],{"id":57100},"_321-事件监听","3.2.1 事件监听",[14,57103,57104],{},[1445,57105],{"alt":18,"src":57106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[14,57108,57109],{},"事件监听有响应的发生",[14,57111,57112],{},[1445,57113],{"alt":18,"src":57114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[14,57116,57117],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[14,57119,57120],{},"对于有名函数,要执行的函数名后边不要加()",[67,57122,57124],{"id":57123},"_322-随机点名案例","3.2.2 随机点名案例",[87,57126,57128],{"className":50612,"code":57127,"language":50614,"meta":18,"style":18},"\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",[93,57129,57130,57140,57154,57158,57166,57180,57200,57212,57220,57226,57236,57246,57250,57254,57261,57272,57276,57280,57286,57298,57312,57322,57334,57347,57351,57355,57362,57366,57379,57391,57403,57407,57411,57415,57422,57432,57436,57440,57449,57461,57473,57488,57492,57500,57508,57512,57520,57533,57547,57560,57580,57588,57603,57623,57643,57651,57655,57663,57668,57704,57724,57729,57748,57753,57764,57769,57780,57785,57804,57819,57824,57850,57860,57869,57874,57890,57895,57900,57905,57920,57924,57928,57933,57952,57969,57977,57982,57997,58001,58005,58013,58021,58025],{"__ignoreMap":18},[96,57131,57132,57134,57136,57138],{"class":98,"line":99},[96,57133,51276],{"class":106},[96,57135,51280],{"class":51279},[96,57137,51283],{"class":1946},[96,57139,51286],{"class":106},[96,57141,57142,57144,57146,57148,57150,57152],{"class":98,"line":19},[96,57143,1017],{"class":106},[96,57145,50614],{"class":51279},[96,57147,51295],{"class":1946},[96,57149,152],{"class":106},[96,57151,51300],{"class":211},[96,57153,51286],{"class":106},[96,57155,57156],{"class":98,"line":1162},[96,57157,2383],{"emptyLinePlaceholder":23},[96,57159,57160,57162,57164],{"class":98,"line":1177},[96,57161,1017],{"class":106},[96,57163,51313],{"class":51279},[96,57165,51286],{"class":106},[96,57167,57168,57170,57172,57174,57176,57178],{"class":98,"line":1183},[96,57169,52123],{"class":106},[96,57171,51323],{"class":51279},[96,57173,51326],{"class":1946},[96,57175,152],{"class":106},[96,57177,51331],{"class":211},[96,57179,51286],{"class":106},[96,57181,57182,57184,57186,57188,57190,57192,57194,57196,57198],{"class":98,"line":1197},[96,57183,52123],{"class":106},[96,57185,51323],{"class":51279},[96,57187,14904],{"class":1946},[96,57189,152],{"class":106},[96,57191,51370],{"class":211},[96,57193,51350],{"class":1946},[96,57195,152],{"class":106},[96,57197,51377],{"class":211},[96,57199,51286],{"class":106},[96,57201,57202,57204,57206,57208,57210],{"class":98,"line":1203},[96,57203,52123],{"class":106},[96,57205,51386],{"class":51279},[96,57207,51389],{"class":106},[96,57209,51386],{"class":51279},[96,57211,51286],{"class":106},[96,57213,57214,57216,57218],{"class":98,"line":1294},[96,57215,52123],{"class":106},[96,57217,5110],{"class":51279},[96,57219,51286],{"class":106},[96,57221,57222,57224],{"class":98,"line":1300},[96,57223,6387],{"class":51279},[96,57225,15556],{"class":106},[96,57227,57228,57230,57232,57234],{"class":98,"line":1312},[96,57229,54685],{"class":155},[96,57231,51416],{"class":106},[96,57233,298],{"class":155},[96,57235,1273],{"class":106},[96,57237,57238,57240,57242,57244],{"class":98,"line":1595},[96,57239,54674],{"class":155},[96,57241,51416],{"class":106},[96,57243,298],{"class":155},[96,57245,1273],{"class":106},[96,57247,57248],{"class":98,"line":1600},[96,57249,2170],{"class":106},[96,57251,57252],{"class":98,"line":1606},[96,57253,2383],{"emptyLinePlaceholder":23},[96,57255,57256,57259],{"class":98,"line":1611},[96,57257,57258],{"class":51279},"    h2",[96,57260,15556],{"class":106},[96,57262,57263,57266,57268,57270],{"class":98,"line":1625},[96,57264,57265],{"class":155},"      text-align",[96,57267,51416],{"class":106},[96,57269,51571],{"class":155},[96,57271,1273],{"class":106},[96,57273,57274],{"class":98,"line":1630},[96,57275,2170],{"class":106},[96,57277,57278],{"class":98,"line":1636},[96,57279,2383],{"emptyLinePlaceholder":23},[96,57281,57282,57284],{"class":98,"line":1657},[96,57283,54731],{"class":1946},[96,57285,15556],{"class":106},[96,57287,57288,57290,57292,57294,57296],{"class":98,"line":1662},[96,57289,54750],{"class":155},[96,57291,51416],{"class":106},[96,57293,1522],{"class":155},[96,57295,51471],{"class":102},[96,57297,1273],{"class":106},[96,57299,57300,57302,57304,57306,57308,57310],{"class":98,"line":1676},[96,57301,54685],{"class":155},[96,57303,51416],{"class":106},[96,57305,763],{"class":155},[96,57307,51471],{"class":102},[96,57309,51535],{"class":155},[96,57311,1273],{"class":106},[96,57313,57314,57316,57318,57320],{"class":98,"line":1681},[96,57315,54988],{"class":155},[96,57317,51416],{"class":106},[96,57319,51456],{"class":155},[96,57321,1273],{"class":106},[96,57323,57324,57326,57328,57330,57332],{"class":98,"line":1710},[96,57325,54901],{"class":155},[96,57327,51416],{"class":106},[96,57329,932],{"class":155},[96,57331,51471],{"class":102},[96,57333,1273],{"class":106},[96,57335,57336,57339,57341,57343,57345],{"class":98,"line":1715},[96,57337,57338],{"class":155},"      line-height",[96,57340,51416],{"class":106},[96,57342,508],{"class":155},[96,57344,51471],{"class":102},[96,57346,1273],{"class":106},[96,57348,57349],{"class":98,"line":1732},[96,57350,2170],{"class":106},[96,57352,57353],{"class":98,"line":1737},[96,57354,2383],{"emptyLinePlaceholder":23},[96,57356,57357,57360],{"class":98,"line":1742},[96,57358,57359],{"class":1946},"    .qs",[96,57361,15556],{"class":106},[96,57363,57364],{"class":98,"line":1747},[96,57365,2383],{"emptyLinePlaceholder":23},[96,57367,57368,57370,57372,57375,57377],{"class":98,"line":1761},[96,57369,54750],{"class":155},[96,57371,51416],{"class":106},[96,57373,57374],{"class":155},"450",[96,57376,51471],{"class":102},[96,57378,1273],{"class":106},[96,57380,57381,57383,57385,57387,57389],{"class":98,"line":1766},[96,57382,54764],{"class":155},[96,57384,51416],{"class":106},[96,57386,508],{"class":155},[96,57388,51471],{"class":102},[96,57390,1273],{"class":106},[96,57392,57393,57396,57398,57401],{"class":98,"line":2560},[96,57394,57395],{"class":155},"      color",[96,57397,51416],{"class":106},[96,57399,57400],{"class":155},"red",[96,57402,1273],{"class":106},[96,57404,57405],{"class":98,"line":2574},[96,57406,2383],{"emptyLinePlaceholder":23},[96,57408,57409],{"class":98,"line":2582},[96,57410,2170],{"class":106},[96,57412,57413],{"class":98,"line":2587},[96,57414,2383],{"emptyLinePlaceholder":23},[96,57416,57417,57420],{"class":98,"line":2593},[96,57418,57419],{"class":1946},"    .btns",[96,57421,15556],{"class":106},[96,57423,57424,57426,57428,57430],{"class":98,"line":2599},[96,57425,57265],{"class":155},[96,57427,51416],{"class":106},[96,57429,51571],{"class":155},[96,57431,1273],{"class":106},[96,57433,57434],{"class":98,"line":2604},[96,57435,2170],{"class":106},[96,57437,57438],{"class":98,"line":7932},[96,57439,2383],{"emptyLinePlaceholder":23},[96,57441,57442,57444,57447],{"class":98,"line":7956},[96,57443,57419],{"class":1946},[96,57445,57446],{"class":51279}," button",[96,57448,15556],{"class":106},[96,57450,57451,57453,57455,57457,57459],{"class":98,"line":7961},[96,57452,54750],{"class":155},[96,57454,51416],{"class":106},[96,57456,924],{"class":155},[96,57458,51471],{"class":102},[96,57460,1273],{"class":106},[96,57462,57463,57465,57467,57469,57471],{"class":98,"line":7967},[96,57464,54764],{"class":155},[96,57466,51416],{"class":106},[96,57468,380],{"class":155},[96,57470,51471],{"class":102},[96,57472,1273],{"class":106},[96,57474,57475,57477,57479,57481,57484,57486],{"class":98,"line":7994},[96,57476,54685],{"class":155},[96,57478,51416],{"class":106},[96,57480,298],{"class":155},[96,57482,57483],{"class":155}," 50",[96,57485,51471],{"class":102},[96,57487,1273],{"class":106},[96,57489,57490],{"class":98,"line":7999},[96,57491,2170],{"class":106},[96,57493,57494,57496,57498],{"class":98,"line":8005},[96,57495,52396],{"class":106},[96,57497,5110],{"class":51279},[96,57499,51286],{"class":106},[96,57501,57502,57504,57506],{"class":98,"line":8017},[96,57503,51764],{"class":106},[96,57505,51313],{"class":51279},[96,57507,51286],{"class":106},[96,57509,57510],{"class":98,"line":8029},[96,57511,2383],{"emptyLinePlaceholder":23},[96,57513,57514,57516,57518],{"class":98,"line":8041},[96,57515,1017],{"class":106},[96,57517,51779],{"class":51279},[96,57519,51286],{"class":106},[96,57521,57522,57524,57526,57529,57531],{"class":98,"line":9700},[96,57523,52123],{"class":106},[96,57525,38],{"class":51279},[96,57527,57528],{"class":106},">随机点名\u003C\u002F",[96,57530,38],{"class":51279},[96,57532,51286],{"class":106},[96,57534,57535,57537,57539,57541,57543,57545],{"class":98,"line":9725},[96,57536,52123],{"class":106},[96,57538,51590],{"class":51279},[96,57540,53465],{"class":1946},[96,57542,152],{"class":106},[96,57544,53470],{"class":211},[96,57546,51286],{"class":106},[96,57548,57549,57551,57553,57556,57558],{"class":98,"line":9748},[96,57550,51320],{"class":106},[96,57552,96],{"class":51279},[96,57554,57555],{"class":106},">名字是：\u003C\u002F",[96,57557,96],{"class":51279},[96,57559,51286],{"class":106},[96,57561,57562,57564,57566,57568,57570,57573,57576,57578],{"class":98,"line":9772},[96,57563,51320],{"class":106},[96,57565,51590],{"class":51279},[96,57567,53465],{"class":1946},[96,57569,152],{"class":106},[96,57571,57572],{"class":211},"\"qs\"",[96,57574,57575],{"class":106},">这里显示姓名\u003C\u002F",[96,57577,51590],{"class":51279},[96,57579,51286],{"class":106},[96,57581,57582,57584,57586],{"class":98,"line":9777},[96,57583,52396],{"class":106},[96,57585,51590],{"class":51279},[96,57587,51286],{"class":106},[96,57589,57590,57592,57594,57596,57598,57601],{"class":98,"line":9782},[96,57591,52123],{"class":106},[96,57593,51590],{"class":51279},[96,57595,53465],{"class":1946},[96,57597,152],{"class":106},[96,57599,57600],{"class":211},"\"btns\"",[96,57602,51286],{"class":106},[96,57604,57605,57607,57609,57611,57613,57616,57619,57621],{"class":98,"line":9787},[96,57606,51320],{"class":106},[96,57608,53866],{"class":51279},[96,57610,53465],{"class":1946},[96,57612,152],{"class":106},[96,57614,57615],{"class":211},"\"start\"",[96,57617,57618],{"class":106},">开始\u003C\u002F",[96,57620,53866],{"class":51279},[96,57622,51286],{"class":106},[96,57624,57625,57627,57629,57631,57633,57636,57639,57641],{"class":98,"line":9796},[96,57626,51320],{"class":106},[96,57628,53866],{"class":51279},[96,57630,53465],{"class":1946},[96,57632,152],{"class":106},[96,57634,57635],{"class":211},"\"end\"",[96,57637,57638],{"class":106},">结束\u003C\u002F",[96,57640,53866],{"class":51279},[96,57642,51286],{"class":106},[96,57644,57645,57647,57649],{"class":98,"line":9801},[96,57646,52396],{"class":106},[96,57648,51590],{"class":51279},[96,57650,51286],{"class":106},[96,57652,57653],{"class":98,"line":9807},[96,57654,2383],{"emptyLinePlaceholder":23},[96,57656,57657,57659,57661],{"class":98,"line":9828},[96,57658,52123],{"class":106},[96,57660,51792],{"class":51279},[96,57662,51286],{"class":106},[96,57664,57665],{"class":98,"line":9834},[96,57666,57667],{"class":165},"    \u002F\u002F 数据数组\n",[96,57669,57670,57672,57675,57677,57679,57682,57684,57687,57689,57692,57694,57697,57699,57702],{"class":98,"line":9848},[96,57671,11205],{"class":102},[96,57673,57674],{"class":155}," arr",[96,57676,13548],{"class":102},[96,57678,52205],{"class":106},[96,57680,57681],{"class":211},"'马超'",[96,57683,12419],{"class":106},[96,57685,57686],{"class":211},"'黄忠'",[96,57688,12419],{"class":106},[96,57690,57691],{"class":211},"'赵云'",[96,57693,12419],{"class":106},[96,57695,57696],{"class":211},"'关羽'",[96,57698,12419],{"class":106},[96,57700,57701],{"class":211},"'张飞'",[96,57703,33225],{"class":106},[96,57705,57706,57708,57711,57713,57715,57717,57719,57722],{"class":98,"line":9854},[96,57707,11205],{"class":102},[96,57709,57710],{"class":155}," qs",[96,57712,13548],{"class":102},[96,57714,54375],{"class":106},[96,57716,54378],{"class":1946},[96,57718,107],{"class":106},[96,57720,57721],{"class":211},"'.qs'",[96,57723,113],{"class":106},[96,57725,57726],{"class":98,"line":9881},[96,57727,57728],{"class":165},"    \u002F\u002F 1.业务1.开始按钮模块\n",[96,57730,57731,57733,57735,57737,57739,57741,57743,57746],{"class":98,"line":9890},[96,57732,11205],{"class":102},[96,57734,4167],{"class":155},[96,57736,13548],{"class":102},[96,57738,54375],{"class":106},[96,57740,54378],{"class":1946},[96,57742,107],{"class":106},[96,57744,57745],{"class":211},"'.start'",[96,57747,113],{"class":106},[96,57749,57750],{"class":98,"line":9896},[96,57751,57752],{"class":165},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[96,57754,57755,57757,57760,57762],{"class":98,"line":9904},[96,57756,52198],{"class":102},[96,57758,57759],{"class":106}," timerId ",[96,57761,152],{"class":102},[96,57763,47312],{"class":155},[96,57765,57766],{"class":98,"line":9909},[96,57767,57768],{"class":165},"    \u002F\u002F 随机号要全局变量\n",[96,57770,57771,57773,57776,57778],{"class":98,"line":16588},[96,57772,52198],{"class":102},[96,57774,57775],{"class":106}," random ",[96,57777,152],{"class":102},[96,57779,47312],{"class":155},[96,57781,57782],{"class":98,"line":16594},[96,57783,57784],{"class":165},"    \u002F\u002F 1.1 添加点击事件\n",[96,57786,57787,57790,57793,57795,57798,57800,57802],{"class":98,"line":16617},[96,57788,57789],{"class":106},"    start.",[96,57791,57792],{"class":1946},"addEventListener",[96,57794,107],{"class":106},[96,57796,57797],{"class":211},"'click'",[96,57799,12419],{"class":106},[96,57801,54428],{"class":102},[96,57803,54431],{"class":106},[96,57805,57806,57809,57811,57813,57815,57817],{"class":98,"line":16623},[96,57807,57808],{"class":106},"      timerId ",[96,57810,152],{"class":102},[96,57812,54423],{"class":1946},[96,57814,107],{"class":106},[96,57816,54428],{"class":102},[96,57818,54431],{"class":106},[96,57820,57821],{"class":98,"line":16646},[96,57822,57823],{"class":165},"        \u002F\u002F 随机数\n",[96,57825,57826,57829,57831,57834,57837,57840,57842,57844,57846,57848],{"class":98,"line":16660},[96,57827,57828],{"class":106},"        random ",[96,57830,152],{"class":102},[96,57832,57833],{"class":1946}," parseInt",[96,57835,57836],{"class":106},"(Math.",[96,57838,57839],{"class":1946},"random",[96,57841,13034],{"class":106},[96,57843,562],{"class":102},[96,57845,51944],{"class":106},[96,57847,51947],{"class":155},[96,57849,113],{"class":106},[96,57851,57852,57855,57857],{"class":98,"line":16680},[96,57853,57854],{"class":106},"        qs.innerHTML ",[96,57856,152],{"class":102},[96,57858,57859],{"class":106}," arr[random]\n",[96,57861,57862,57865,57867],{"class":98,"line":16686},[96,57863,57864],{"class":106},"      }, ",[96,57866,380],{"class":155},[96,57868,113],{"class":106},[96,57870,57871],{"class":98,"line":16697},[96,57872,57873],{"class":165},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[96,57875,57876,57878,57881,57883,57886,57888],{"class":98,"line":16720},[96,57877,54459],{"class":102},[96,57879,57880],{"class":106}," (arr.",[96,57882,51947],{"class":155},[96,57884,57885],{"class":102}," ===",[96,57887,25097],{"class":155},[96,57889,12426],{"class":106},[96,57891,57892],{"class":98,"line":16742},[96,57893,57894],{"class":165},"        \u002F\u002F start.disabled = true\n",[96,57896,57897],{"class":98,"line":16747},[96,57898,57899],{"class":165},"        \u002F\u002F end.disabled = true\n",[96,57901,57902],{"class":98,"line":16753},[96,57903,57904],{"class":165},"        \u002F\u002F 可以合起来写\n",[96,57906,57907,57910,57912,57915,57917],{"class":98,"line":16767},[96,57908,57909],{"class":106},"        start.disabled ",[96,57911,152],{"class":102},[96,57913,57914],{"class":106}," end.disabled ",[96,57916,152],{"class":102},[96,57918,57919],{"class":155}," true\n",[96,57921,57922],{"class":98,"line":16780},[96,57923,52377],{"class":106},[96,57925,57926],{"class":98,"line":16785},[96,57927,33440],{"class":106},[96,57929,57930],{"class":98,"line":16799},[96,57931,57932],{"class":165},"    \u002F\u002F 1.2 关闭按钮模块\n",[96,57934,57935,57937,57939,57941,57943,57945,57947,57950],{"class":98,"line":16804},[96,57936,11205],{"class":102},[96,57938,4183],{"class":155},[96,57940,13548],{"class":102},[96,57942,54375],{"class":106},[96,57944,54378],{"class":1946},[96,57946,107],{"class":106},[96,57948,57949],{"class":211},"'.end'",[96,57951,113],{"class":106},[96,57953,57954,57957,57959,57961,57963,57965,57967],{"class":98,"line":16810},[96,57955,57956],{"class":106},"    end.",[96,57958,57792],{"class":1946},[96,57960,107],{"class":106},[96,57962,57797],{"class":211},[96,57964,12419],{"class":106},[96,57966,54428],{"class":102},[96,57968,54431],{"class":106},[96,57970,57971,57974],{"class":98,"line":16815},[96,57972,57973],{"class":1946},"      clearInterval",[96,57975,57976],{"class":106},"(timerId)\n",[96,57978,57979],{"class":98,"line":16829},[96,57980,57981],{"class":165},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[96,57983,57984,57987,57990,57993,57995],{"class":98,"line":16834},[96,57985,57986],{"class":106},"      arr.",[96,57988,57989],{"class":1946},"splice",[96,57991,57992],{"class":106},"(random, ",[96,57994,324],{"class":155},[96,57996,113],{"class":106},[96,57998,57999],{"class":98,"line":16839},[96,58000,33440],{"class":106},[96,58002,58003],{"class":98,"line":16853},[96,58004,2383],{"emptyLinePlaceholder":23},[96,58006,58007,58009,58011],{"class":98,"line":16865},[96,58008,52396],{"class":106},[96,58010,51792],{"class":51279},[96,58012,51286],{"class":106},[96,58014,58015,58017,58019],{"class":98,"line":16870},[96,58016,51764],{"class":106},[96,58018,51779],{"class":51279},[96,58020,51286],{"class":106},[96,58022,58023],{"class":98,"line":16883},[96,58024,2383],{"emptyLinePlaceholder":23},[96,58026,58027,58029,58031],{"class":98,"line":16888},[96,58028,51764],{"class":106},[96,58030,50614],{"class":51279},[96,58032,51286],{"class":106},[14,58034,58035],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[67,58037,58039],{"id":58038},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[87,58041,58043],{"className":50612,"code":58042,"language":50614,"meta":18,"style":18},"\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",[93,58044,58045,58055,58069,58073,58081,58095,58115,58127,58135,58139,58147,58159,58167,58186,58203,58219,58229,58233,58241,58249,58253],{"__ignoreMap":18},[96,58046,58047,58049,58051,58053],{"class":98,"line":99},[96,58048,51276],{"class":106},[96,58050,51280],{"class":51279},[96,58052,51283],{"class":1946},[96,58054,51286],{"class":106},[96,58056,58057,58059,58061,58063,58065,58067],{"class":98,"line":19},[96,58058,1017],{"class":106},[96,58060,50614],{"class":51279},[96,58062,51295],{"class":1946},[96,58064,152],{"class":106},[96,58066,51300],{"class":211},[96,58068,51286],{"class":106},[96,58070,58071],{"class":98,"line":1162},[96,58072,2383],{"emptyLinePlaceholder":23},[96,58074,58075,58077,58079],{"class":98,"line":1177},[96,58076,1017],{"class":106},[96,58078,51313],{"class":51279},[96,58080,51286],{"class":106},[96,58082,58083,58085,58087,58089,58091,58093],{"class":98,"line":1183},[96,58084,52123],{"class":106},[96,58086,51323],{"class":51279},[96,58088,51326],{"class":1946},[96,58090,152],{"class":106},[96,58092,51331],{"class":211},[96,58094,51286],{"class":106},[96,58096,58097,58099,58101,58103,58105,58107,58109,58111,58113],{"class":98,"line":1197},[96,58098,52123],{"class":106},[96,58100,51323],{"class":51279},[96,58102,14904],{"class":1946},[96,58104,152],{"class":106},[96,58106,51370],{"class":211},[96,58108,51350],{"class":1946},[96,58110,152],{"class":106},[96,58112,51377],{"class":211},[96,58114,51286],{"class":106},[96,58116,58117,58119,58121,58123,58125],{"class":98,"line":1203},[96,58118,52123],{"class":106},[96,58120,51386],{"class":51279},[96,58122,51389],{"class":106},[96,58124,51386],{"class":51279},[96,58126,51286],{"class":106},[96,58128,58129,58131,58133],{"class":98,"line":1294},[96,58130,51764],{"class":106},[96,58132,51313],{"class":51279},[96,58134,51286],{"class":106},[96,58136,58137],{"class":98,"line":1300},[96,58138,2383],{"emptyLinePlaceholder":23},[96,58140,58141,58143,58145],{"class":98,"line":1312},[96,58142,1017],{"class":106},[96,58144,51779],{"class":51279},[96,58146,51286],{"class":106},[96,58148,58149,58151,58153,58155,58157],{"class":98,"line":1595},[96,58150,52123],{"class":106},[96,58152,53866],{"class":51279},[96,58154,53872],{"class":106},[96,58156,53866],{"class":51279},[96,58158,51286],{"class":106},[96,58160,58161,58163,58165],{"class":98,"line":1600},[96,58162,52123],{"class":106},[96,58164,51792],{"class":51279},[96,58166,51286],{"class":106},[96,58168,58169,58171,58173,58175,58177,58179,58181,58184],{"class":98,"line":1606},[96,58170,11205],{"class":102},[96,58172,54370],{"class":155},[96,58174,13548],{"class":102},[96,58176,54375],{"class":106},[96,58178,54378],{"class":1946},[96,58180,107],{"class":106},[96,58182,58183],{"class":211},"'button'",[96,58185,113],{"class":106},[96,58187,58188,58191,58193,58195,58197,58199,58201],{"class":98,"line":1611},[96,58189,58190],{"class":106},"    btn.",[96,58192,57792],{"class":1946},[96,58194,107],{"class":106},[96,58196,57797],{"class":211},[96,58198,12419],{"class":106},[96,58200,54428],{"class":102},[96,58202,54431],{"class":106},[96,58204,58205,58208,58210,58212,58215,58217],{"class":98,"line":1625},[96,58206,58207],{"class":102},"      const",[96,58209,2223],{"class":155},[96,58211,13548],{"class":102},[96,58213,58214],{"class":106}," Math.",[96,58216,57839],{"class":1946},[96,58218,1959],{"class":106},[96,58220,58221,58224,58227],{"class":98,"line":1630},[96,58222,58223],{"class":106},"      console.",[96,58225,58226],{"class":1946},"log",[96,58228,120],{"class":106},[96,58230,58231],{"class":98,"line":1636},[96,58232,33440],{"class":106},[96,58234,58235,58237,58239],{"class":98,"line":1657},[96,58236,52396],{"class":106},[96,58238,51792],{"class":51279},[96,58240,51286],{"class":106},[96,58242,58243,58245,58247],{"class":98,"line":1662},[96,58244,51764],{"class":106},[96,58246,51779],{"class":51279},[96,58248,51286],{"class":106},[96,58250,58251],{"class":98,"line":1676},[96,58252,2383],{"emptyLinePlaceholder":23},[96,58254,58255,58257,58259],{"class":98,"line":1681},[96,58256,51764],{"class":106},[96,58258,50614],{"class":51279},[96,58260,51286],{"class":106},[14,58262,58263],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[14,58265,58266],{},"常量不可以重新赋值",[14,58268,58269],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[87,58271,58273],{"className":50612,"code":58272,"language":50614,"meta":18,"style":18},"\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",[93,58274,58275,58285,58299,58303,58311,58325,58345,58357,58365,58369,58377,58389,58397,58408,58426,58442,58456,58464,58468,58476,58484,58488],{"__ignoreMap":18},[96,58276,58277,58279,58281,58283],{"class":98,"line":99},[96,58278,51276],{"class":106},[96,58280,51280],{"class":51279},[96,58282,51283],{"class":1946},[96,58284,51286],{"class":106},[96,58286,58287,58289,58291,58293,58295,58297],{"class":98,"line":19},[96,58288,1017],{"class":106},[96,58290,50614],{"class":51279},[96,58292,51295],{"class":1946},[96,58294,152],{"class":106},[96,58296,51300],{"class":211},[96,58298,51286],{"class":106},[96,58300,58301],{"class":98,"line":1162},[96,58302,2383],{"emptyLinePlaceholder":23},[96,58304,58305,58307,58309],{"class":98,"line":1177},[96,58306,1017],{"class":106},[96,58308,51313],{"class":51279},[96,58310,51286],{"class":106},[96,58312,58313,58315,58317,58319,58321,58323],{"class":98,"line":1183},[96,58314,52123],{"class":106},[96,58316,51323],{"class":51279},[96,58318,51326],{"class":1946},[96,58320,152],{"class":106},[96,58322,51331],{"class":211},[96,58324,51286],{"class":106},[96,58326,58327,58329,58331,58333,58335,58337,58339,58341,58343],{"class":98,"line":1197},[96,58328,52123],{"class":106},[96,58330,51323],{"class":51279},[96,58332,14904],{"class":1946},[96,58334,152],{"class":106},[96,58336,51370],{"class":211},[96,58338,51350],{"class":1946},[96,58340,152],{"class":106},[96,58342,51377],{"class":211},[96,58344,51286],{"class":106},[96,58346,58347,58349,58351,58353,58355],{"class":98,"line":1203},[96,58348,52123],{"class":106},[96,58350,51386],{"class":51279},[96,58352,51389],{"class":106},[96,58354,51386],{"class":51279},[96,58356,51286],{"class":106},[96,58358,58359,58361,58363],{"class":98,"line":1294},[96,58360,51764],{"class":106},[96,58362,51313],{"class":51279},[96,58364,51286],{"class":106},[96,58366,58367],{"class":98,"line":1300},[96,58368,2383],{"emptyLinePlaceholder":23},[96,58370,58371,58373,58375],{"class":98,"line":1312},[96,58372,1017],{"class":106},[96,58374,51779],{"class":51279},[96,58376,51286],{"class":106},[96,58378,58379,58381,58383,58385,58387],{"class":98,"line":1595},[96,58380,52123],{"class":106},[96,58382,53866],{"class":51279},[96,58384,53872],{"class":106},[96,58386,53866],{"class":51279},[96,58388,51286],{"class":106},[96,58390,58391,58393,58395],{"class":98,"line":1600},[96,58392,52123],{"class":106},[96,58394,51792],{"class":51279},[96,58396,51286],{"class":106},[96,58398,58399,58401,58403,58405],{"class":98,"line":1606},[96,58400,11205],{"class":102},[96,58402,2223],{"class":155},[96,58404,13548],{"class":102},[96,58406,58407],{"class":155}," 10\n",[96,58409,58410,58412,58414,58416,58418,58420,58422,58424],{"class":98,"line":1611},[96,58411,11205],{"class":102},[96,58413,54370],{"class":155},[96,58415,13548],{"class":102},[96,58417,54375],{"class":106},[96,58419,54378],{"class":1946},[96,58421,107],{"class":106},[96,58423,58183],{"class":211},[96,58425,113],{"class":106},[96,58427,58428,58430,58432,58434,58436,58438,58440],{"class":98,"line":1625},[96,58429,58190],{"class":106},[96,58431,57792],{"class":1946},[96,58433,107],{"class":106},[96,58435,57797],{"class":211},[96,58437,12419],{"class":106},[96,58439,54428],{"class":102},[96,58441,54431],{"class":106},[96,58443,58444,58446,58448,58450,58452,58454],{"class":98,"line":1630},[96,58445,58207],{"class":102},[96,58447,2223],{"class":155},[96,58449,13548],{"class":102},[96,58451,58214],{"class":106},[96,58453,57839],{"class":1946},[96,58455,1959],{"class":106},[96,58457,58458,58460,58462],{"class":98,"line":1636},[96,58459,58223],{"class":106},[96,58461,58226],{"class":1946},[96,58463,120],{"class":106},[96,58465,58466],{"class":98,"line":1657},[96,58467,33440],{"class":106},[96,58469,58470,58472,58474],{"class":98,"line":1662},[96,58471,52396],{"class":106},[96,58473,51792],{"class":51279},[96,58475,51286],{"class":106},[96,58477,58478,58480,58482],{"class":98,"line":1676},[96,58479,51764],{"class":106},[96,58481,51779],{"class":51279},[96,58483,51286],{"class":106},[96,58485,58486],{"class":98,"line":1681},[96,58487,2383],{"emptyLinePlaceholder":23},[96,58489,58490,58492,58494],{"class":98,"line":1710},[96,58491,51764],{"class":106},[96,58493,50614],{"class":51279},[96,58495,51286],{"class":106},[14,58497,58498],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[87,58500,58502],{"className":50612,"code":58501,"language":50614,"meta":18,"style":18},"\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",[93,58503,58504,58514,58528,58532,58540,58554,58574,58586,58594,58598,58606,58618,58626,58636,58654,58670,58683,58691,58695,58703,58711,58715],{"__ignoreMap":18},[96,58505,58506,58508,58510,58512],{"class":98,"line":99},[96,58507,51276],{"class":106},[96,58509,51280],{"class":51279},[96,58511,51283],{"class":1946},[96,58513,51286],{"class":106},[96,58515,58516,58518,58520,58522,58524,58526],{"class":98,"line":19},[96,58517,1017],{"class":106},[96,58519,50614],{"class":51279},[96,58521,51295],{"class":1946},[96,58523,152],{"class":106},[96,58525,51300],{"class":211},[96,58527,51286],{"class":106},[96,58529,58530],{"class":98,"line":1162},[96,58531,2383],{"emptyLinePlaceholder":23},[96,58533,58534,58536,58538],{"class":98,"line":1177},[96,58535,1017],{"class":106},[96,58537,51313],{"class":51279},[96,58539,51286],{"class":106},[96,58541,58542,58544,58546,58548,58550,58552],{"class":98,"line":1183},[96,58543,52123],{"class":106},[96,58545,51323],{"class":51279},[96,58547,51326],{"class":1946},[96,58549,152],{"class":106},[96,58551,51331],{"class":211},[96,58553,51286],{"class":106},[96,58555,58556,58558,58560,58562,58564,58566,58568,58570,58572],{"class":98,"line":1197},[96,58557,52123],{"class":106},[96,58559,51323],{"class":51279},[96,58561,14904],{"class":1946},[96,58563,152],{"class":106},[96,58565,51370],{"class":211},[96,58567,51350],{"class":1946},[96,58569,152],{"class":106},[96,58571,51377],{"class":211},[96,58573,51286],{"class":106},[96,58575,58576,58578,58580,58582,58584],{"class":98,"line":1203},[96,58577,52123],{"class":106},[96,58579,51386],{"class":51279},[96,58581,51389],{"class":106},[96,58583,51386],{"class":51279},[96,58585,51286],{"class":106},[96,58587,58588,58590,58592],{"class":98,"line":1294},[96,58589,51764],{"class":106},[96,58591,51313],{"class":51279},[96,58593,51286],{"class":106},[96,58595,58596],{"class":98,"line":1300},[96,58597,2383],{"emptyLinePlaceholder":23},[96,58599,58600,58602,58604],{"class":98,"line":1312},[96,58601,1017],{"class":106},[96,58603,51779],{"class":51279},[96,58605,51286],{"class":106},[96,58607,58608,58610,58612,58614,58616],{"class":98,"line":1595},[96,58609,52123],{"class":106},[96,58611,53866],{"class":51279},[96,58613,53872],{"class":106},[96,58615,53866],{"class":51279},[96,58617,51286],{"class":106},[96,58619,58620,58622,58624],{"class":98,"line":1600},[96,58621,52123],{"class":106},[96,58623,51792],{"class":51279},[96,58625,51286],{"class":106},[96,58627,58628,58630,58632,58634],{"class":98,"line":1606},[96,58629,11205],{"class":102},[96,58631,2223],{"class":155},[96,58633,13548],{"class":102},[96,58635,58407],{"class":155},[96,58637,58638,58640,58642,58644,58646,58648,58650,58652],{"class":98,"line":1611},[96,58639,11205],{"class":102},[96,58641,54370],{"class":155},[96,58643,13548],{"class":102},[96,58645,54375],{"class":106},[96,58647,54378],{"class":1946},[96,58649,107],{"class":106},[96,58651,58183],{"class":211},[96,58653,113],{"class":106},[96,58655,58656,58658,58660,58662,58664,58666,58668],{"class":98,"line":1625},[96,58657,58190],{"class":106},[96,58659,57792],{"class":1946},[96,58661,107],{"class":106},[96,58663,57797],{"class":211},[96,58665,12419],{"class":106},[96,58667,54428],{"class":102},[96,58669,54431],{"class":106},[96,58671,58672,58675,58677,58679,58681],{"class":98,"line":1630},[96,58673,58674],{"class":106},"      num ",[96,58676,152],{"class":102},[96,58678,58214],{"class":106},[96,58680,57839],{"class":1946},[96,58682,1959],{"class":106},[96,58684,58685,58687,58689],{"class":98,"line":1636},[96,58686,58223],{"class":106},[96,58688,58226],{"class":1946},[96,58690,120],{"class":106},[96,58692,58693],{"class":98,"line":1657},[96,58694,33440],{"class":106},[96,58696,58697,58699,58701],{"class":98,"line":1662},[96,58698,52396],{"class":106},[96,58700,51792],{"class":51279},[96,58702,51286],{"class":106},[96,58704,58705,58707,58709],{"class":98,"line":1676},[96,58706,51764],{"class":106},[96,58708,51779],{"class":51279},[96,58710,51286],{"class":106},[96,58712,58713],{"class":98,"line":1681},[96,58714,2383],{"emptyLinePlaceholder":23},[96,58716,58717,58719,58721],{"class":98,"line":1710},[96,58718,51764],{"class":106},[96,58720,50614],{"class":51279},[96,58722,51286],{"class":106},[14,58724,58725],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[67,58727,58729],{"id":58728},"_324-事件监听版本","3.2.4 事件监听版本",[14,58731,58732],{},[1445,58733],{"alt":18,"src":58734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[14,58736,58737],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[14,58739,58740],{},"这种方式会覆盖前边的事件监听:",[87,58742,58744],{"className":50612,"code":58743,"language":50614,"meta":18,"style":18},"\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",[93,58745,58746,58756,58770,58774,58782,58796,58816,58828,58836,58840,58848,58860,58868,58886,58900,58911,58915,58927,58937,58941,58949,58957,58961],{"__ignoreMap":18},[96,58747,58748,58750,58752,58754],{"class":98,"line":99},[96,58749,51276],{"class":106},[96,58751,51280],{"class":51279},[96,58753,51283],{"class":1946},[96,58755,51286],{"class":106},[96,58757,58758,58760,58762,58764,58766,58768],{"class":98,"line":19},[96,58759,1017],{"class":106},[96,58761,50614],{"class":51279},[96,58763,51295],{"class":1946},[96,58765,152],{"class":106},[96,58767,51300],{"class":211},[96,58769,51286],{"class":106},[96,58771,58772],{"class":98,"line":1162},[96,58773,2383],{"emptyLinePlaceholder":23},[96,58775,58776,58778,58780],{"class":98,"line":1177},[96,58777,1017],{"class":106},[96,58779,51313],{"class":51279},[96,58781,51286],{"class":106},[96,58783,58784,58786,58788,58790,58792,58794],{"class":98,"line":1183},[96,58785,52123],{"class":106},[96,58787,51323],{"class":51279},[96,58789,51326],{"class":1946},[96,58791,152],{"class":106},[96,58793,51331],{"class":211},[96,58795,51286],{"class":106},[96,58797,58798,58800,58802,58804,58806,58808,58810,58812,58814],{"class":98,"line":1197},[96,58799,52123],{"class":106},[96,58801,51323],{"class":51279},[96,58803,14904],{"class":1946},[96,58805,152],{"class":106},[96,58807,51370],{"class":211},[96,58809,51350],{"class":1946},[96,58811,152],{"class":106},[96,58813,51377],{"class":211},[96,58815,51286],{"class":106},[96,58817,58818,58820,58822,58824,58826],{"class":98,"line":1203},[96,58819,52123],{"class":106},[96,58821,51386],{"class":51279},[96,58823,51389],{"class":106},[96,58825,51386],{"class":51279},[96,58827,51286],{"class":106},[96,58829,58830,58832,58834],{"class":98,"line":1294},[96,58831,51764],{"class":106},[96,58833,51313],{"class":51279},[96,58835,51286],{"class":106},[96,58837,58838],{"class":98,"line":1300},[96,58839,2383],{"emptyLinePlaceholder":23},[96,58841,58842,58844,58846],{"class":98,"line":1312},[96,58843,1017],{"class":106},[96,58845,51779],{"class":51279},[96,58847,51286],{"class":106},[96,58849,58850,58852,58854,58856,58858],{"class":98,"line":1595},[96,58851,52123],{"class":106},[96,58853,53866],{"class":51279},[96,58855,53872],{"class":106},[96,58857,53866],{"class":51279},[96,58859,51286],{"class":106},[96,58861,58862,58864,58866],{"class":98,"line":1600},[96,58863,52123],{"class":106},[96,58865,51792],{"class":51279},[96,58867,51286],{"class":106},[96,58869,58870,58872,58874,58876,58878,58880,58882,58884],{"class":98,"line":1606},[96,58871,11205],{"class":102},[96,58873,54370],{"class":155},[96,58875,13548],{"class":102},[96,58877,54375],{"class":106},[96,58879,54378],{"class":1946},[96,58881,107],{"class":106},[96,58883,58183],{"class":211},[96,58885,113],{"class":106},[96,58887,58888,58890,58893,58895,58898],{"class":98,"line":1611},[96,58889,58190],{"class":106},[96,58891,58892],{"class":1946},"onclick",[96,58894,13548],{"class":102},[96,58896,58897],{"class":102}," function",[96,58899,54431],{"class":106},[96,58901,58902,58905,58907,58909],{"class":98,"line":1625},[96,58903,58904],{"class":1946},"      alert",[96,58906,107],{"class":106},[96,58908,579],{"class":155},[96,58910,113],{"class":106},[96,58912,58913],{"class":98,"line":1630},[96,58914,2170],{"class":106},[96,58916,58917,58919,58921,58923,58925],{"class":98,"line":1636},[96,58918,58190],{"class":106},[96,58920,58892],{"class":1946},[96,58922,13548],{"class":102},[96,58924,58897],{"class":102},[96,58926,54431],{"class":106},[96,58928,58929,58931,58933,58935],{"class":98,"line":1657},[96,58930,58904],{"class":1946},[96,58932,107],{"class":106},[96,58934,857],{"class":155},[96,58936,113],{"class":106},[96,58938,58939],{"class":98,"line":1662},[96,58940,2170],{"class":106},[96,58942,58943,58945,58947],{"class":98,"line":1676},[96,58944,52396],{"class":106},[96,58946,51792],{"class":51279},[96,58948,51286],{"class":106},[96,58950,58951,58953,58955],{"class":98,"line":1681},[96,58952,51764],{"class":106},[96,58954,51779],{"class":51279},[96,58956,51286],{"class":106},[96,58958,58959],{"class":98,"line":1710},[96,58960,2383],{"emptyLinePlaceholder":23},[96,58962,58963,58965,58967],{"class":98,"line":1715},[96,58964,51764],{"class":106},[96,58966,50614],{"class":51279},[96,58968,51286],{"class":106},[14,58970,58971],{},"只要点击就输出结果为22,前边11被覆盖了",[87,58973,58975],{"className":50612,"code":58974,"language":50614,"meta":18,"style":18},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[93,58976,58977,58982,58987,58991,58996,59001],{"__ignoreMap":18},[96,58978,58979],{"class":98,"line":99},[96,58980,58981],{"class":106},"  btn.addEventListener('click', function () {\n",[96,58983,58984],{"class":98,"line":19},[96,58985,58986],{"class":106},"      alert(11)\n",[96,58988,58989],{"class":98,"line":1162},[96,58990,33440],{"class":106},[96,58992,58993],{"class":98,"line":1177},[96,58994,58995],{"class":106},"    btn.addEventListener('click', function () {\n",[96,58997,58998],{"class":98,"line":1183},[96,58999,59000],{"class":106},"      alert(22)\n",[96,59002,59003],{"class":98,"line":1197},[96,59004,33440],{"class":106},[14,59006,59007],{},"点击第一次输出11,第二次点击为22",[67,59009,59011],{"id":59010},"_325-事件类型","3.2.5 事件类型",[14,59013,59014],{},[1445,59015],{"alt":18,"src":59016},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[21982,59018,59020],{"id":59019},"_3251-鼠标事件","3.2.5.1 鼠标事件",[14,59022,59023],{},"补充知识:",[14,59025,59026],{},"轮播图自动播放模块,可以使用",[14,59028,59029],{},"let timerId = setInterval(function () {",[14,59031,59032],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[14,59034,59035],{},"用js方法模拟进行点击事件,click必须加()",[14,59037,59038],{},"next.click()",[14,59040,59041],{},"}, 1000)",[14,59043,59044],{},[1445,59045],{"alt":18,"src":59046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[87,59048,59050],{"className":53046,"code":59049,"language":53048,"meta":18,"style":18},"\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",[93,59051,59052,59056,59066,59080,59084,59092,59107,59127,59147,59160,59168,59173,59178,59182,59186,59191,59196,59201,59206,59210,59214,59219,59224,59229,59233,59237,59242,59246,59251,59256,59260,59264,59269,59274,59279,59284,59289,59293,59297,59302,59307,59312,59317,59322,59326,59330,59335,59340,59345,59350,59355,59360,59365,59370,59375,59380,59384,59388,59393,59398,59402,59406,59411,59416,59420,59425,59430,59434,59438,59443,59447,59452,59457,59461,59466,59470,59474,59479,59484,59489,59494,59499,59504,59509,59513,59517,59521,59526,59531,59536,59541,59545,59553,59561,59565,59573,59588,59602,59623,59631,59645,59658,59673,59692,59704,59716,59728,59740,59752,59764,59776,59784,59799,59823,59847,59855,59863,59871,59879,59884,59889,59894,59899,59904,59909,59914,59919,59924,59929,59933,59938,59943,59948,59953,59958,59963,59968,59973,59978,59982,59987,59992,59997,60002,60007,60012,60017,60022,60027,60032,60037,60042,60046,60050,60055,60060,60065,60069,60074,60079,60084,60089,60094,60098,60103,60107,60111,60115,60119,60123,60127,60132,60137,60142,60147,60152,60157,60162,60167,60172,60176,60180,60185,60190,60195,60200,60205,60209,60214,60219,60224,60229,60234,60239,60243,60247,60252,60256,60261,60265,60270,60275,60280,60285,60290,60295,60299,60307,60315,60319],{"__ignoreMap":18},[96,59053,59054],{"class":98,"line":99},[96,59055,2383],{"emptyLinePlaceholder":23},[96,59057,59058,59060,59062,59064],{"class":98,"line":19},[96,59059,51276],{"class":106},[96,59061,51280],{"class":102},[96,59063,51283],{"class":155},[96,59065,51286],{"class":106},[96,59067,59068,59070,59072,59074,59076,59078],{"class":98,"line":1162},[96,59069,1017],{"class":106},[96,59071,50614],{"class":51279},[96,59073,51295],{"class":1946},[96,59075,152],{"class":106},[96,59077,51300],{"class":211},[96,59079,51286],{"class":106},[96,59081,59082],{"class":98,"line":1177},[96,59083,2383],{"emptyLinePlaceholder":23},[96,59085,59086,59088,59090],{"class":98,"line":1183},[96,59087,1017],{"class":106},[96,59089,51313],{"class":51279},[96,59091,51286],{"class":106},[96,59093,59094,59096,59098,59100,59102,59104],{"class":98,"line":1197},[96,59095,52123],{"class":106},[96,59097,51323],{"class":51279},[96,59099,51326],{"class":1946},[96,59101,152],{"class":106},[96,59103,51331],{"class":211},[96,59105,59106],{"class":106}," \u002F>\n",[96,59108,59109,59111,59113,59115,59117,59119,59121,59123,59125],{"class":98,"line":1203},[96,59110,52123],{"class":106},[96,59112,51323],{"class":51279},[96,59114,51342],{"class":1946},[96,59116,152],{"class":106},[96,59118,51347],{"class":211},[96,59120,51350],{"class":1946},[96,59122,152],{"class":106},[96,59124,51355],{"class":211},[96,59126,59106],{"class":106},[96,59128,59129,59131,59133,59135,59137,59139,59141,59143,59145],{"class":98,"line":1294},[96,59130,52123],{"class":106},[96,59132,51323],{"class":51279},[96,59134,14904],{"class":1946},[96,59136,152],{"class":106},[96,59138,51370],{"class":211},[96,59140,51350],{"class":1946},[96,59142,152],{"class":106},[96,59144,51377],{"class":211},[96,59146,59106],{"class":106},[96,59148,59149,59151,59153,59156,59158],{"class":98,"line":1300},[96,59150,52123],{"class":106},[96,59152,51386],{"class":51279},[96,59154,59155],{"class":106},">轮播图点击切换\u003C\u002F",[96,59157,51386],{"class":51279},[96,59159,51286],{"class":106},[96,59161,59162,59164,59166],{"class":98,"line":1312},[96,59163,52123],{"class":106},[96,59165,5110],{"class":51279},[96,59167,51286],{"class":106},[96,59169,59170],{"class":98,"line":1595},[96,59171,59172],{"class":106},"    * {\n",[96,59174,59175],{"class":98,"line":1600},[96,59176,59177],{"class":106},"      box-sizing: border-box;\n",[96,59179,59180],{"class":98,"line":1606},[96,59181,2170],{"class":106},[96,59183,59184],{"class":98,"line":1611},[96,59185,2383],{"emptyLinePlaceholder":23},[96,59187,59188],{"class":98,"line":1625},[96,59189,59190],{"class":106},"    .slider {\n",[96,59192,59193],{"class":98,"line":1630},[96,59194,59195],{"class":106},"      width: 560px;\n",[96,59197,59198],{"class":98,"line":1636},[96,59199,59200],{"class":106},"      height: 400px;\n",[96,59202,59203],{"class":98,"line":1657},[96,59204,59205],{"class":106},"      overflow: hidden;\n",[96,59207,59208],{"class":98,"line":1662},[96,59209,2170],{"class":106},[96,59211,59212],{"class":98,"line":1676},[96,59213,2383],{"emptyLinePlaceholder":23},[96,59215,59216],{"class":98,"line":1681},[96,59217,59218],{"class":106},"    .slider-wrapper {\n",[96,59220,59221],{"class":98,"line":1710},[96,59222,59223],{"class":106},"      width: 100%;\n",[96,59225,59226],{"class":98,"line":1715},[96,59227,59228],{"class":106},"      height: 320px;\n",[96,59230,59231],{"class":98,"line":1732},[96,59232,2170],{"class":106},[96,59234,59235],{"class":98,"line":1737},[96,59236,2383],{"emptyLinePlaceholder":23},[96,59238,59239],{"class":98,"line":1742},[96,59240,59241],{"class":106},"    .slider-wrapper img {\n",[96,59243,59244],{"class":98,"line":1747},[96,59245,59223],{"class":106},[96,59247,59248],{"class":98,"line":1761},[96,59249,59250],{"class":106},"      height: 100%;\n",[96,59252,59253],{"class":98,"line":1766},[96,59254,59255],{"class":106},"      display: block;\n",[96,59257,59258],{"class":98,"line":2560},[96,59259,2170],{"class":106},[96,59261,59262],{"class":98,"line":2574},[96,59263,2383],{"emptyLinePlaceholder":23},[96,59265,59266],{"class":98,"line":2582},[96,59267,59268],{"class":106},"    .slider-footer {\n",[96,59270,59271],{"class":98,"line":2587},[96,59272,59273],{"class":106},"      height: 80px;\n",[96,59275,59276],{"class":98,"line":2593},[96,59277,59278],{"class":106},"      background-color: rgb(100, 67, 68);\n",[96,59280,59281],{"class":98,"line":2599},[96,59282,59283],{"class":106},"      padding: 12px 12px 0 12px;\n",[96,59285,59286],{"class":98,"line":2604},[96,59287,59288],{"class":106},"      position: relative;\n",[96,59290,59291],{"class":98,"line":7932},[96,59292,2170],{"class":106},[96,59294,59295],{"class":98,"line":7956},[96,59296,2383],{"emptyLinePlaceholder":23},[96,59298,59299],{"class":98,"line":7961},[96,59300,59301],{"class":106},"    .slider-footer .toggle {\n",[96,59303,59304],{"class":98,"line":7967},[96,59305,59306],{"class":106},"      position: absolute;\n",[96,59308,59309],{"class":98,"line":7994},[96,59310,59311],{"class":106},"      right: 0;\n",[96,59313,59314],{"class":98,"line":7999},[96,59315,59316],{"class":106},"      top: 12px;\n",[96,59318,59319],{"class":98,"line":8005},[96,59320,59321],{"class":106},"      display: flex;\n",[96,59323,59324],{"class":98,"line":8017},[96,59325,2170],{"class":106},[96,59327,59328],{"class":98,"line":8029},[96,59329,2383],{"emptyLinePlaceholder":23},[96,59331,59332],{"class":98,"line":8041},[96,59333,59334],{"class":106},"    .slider-footer .toggle button {\n",[96,59336,59337],{"class":98,"line":9700},[96,59338,59339],{"class":106},"      margin-right: 12px;\n",[96,59341,59342],{"class":98,"line":9725},[96,59343,59344],{"class":106},"      width: 28px;\n",[96,59346,59347],{"class":98,"line":9748},[96,59348,59349],{"class":106},"      height: 28px;\n",[96,59351,59352],{"class":98,"line":9772},[96,59353,59354],{"class":106},"      appearance: none;\n",[96,59356,59357],{"class":98,"line":9777},[96,59358,59359],{"class":106},"      border: none;\n",[96,59361,59362],{"class":98,"line":9782},[96,59363,59364],{"class":106},"      background: rgba(255, 255, 255, 0.1);\n",[96,59366,59367],{"class":98,"line":9787},[96,59368,59369],{"class":106},"      color: #fff;\n",[96,59371,59372],{"class":98,"line":9796},[96,59373,59374],{"class":106},"      border-radius: 4px;\n",[96,59376,59377],{"class":98,"line":9801},[96,59378,59379],{"class":106},"      cursor: pointer;\n",[96,59381,59382],{"class":98,"line":9807},[96,59383,2170],{"class":106},[96,59385,59386],{"class":98,"line":9828},[96,59387,2383],{"emptyLinePlaceholder":23},[96,59389,59390],{"class":98,"line":9834},[96,59391,59392],{"class":106},"    .slider-footer .toggle button:hover {\n",[96,59394,59395],{"class":98,"line":9848},[96,59396,59397],{"class":106},"      background: rgba(255, 255, 255, 0.2);\n",[96,59399,59400],{"class":98,"line":9854},[96,59401,2170],{"class":106},[96,59403,59404],{"class":98,"line":9881},[96,59405,2383],{"emptyLinePlaceholder":23},[96,59407,59408],{"class":98,"line":9890},[96,59409,59410],{"class":106},"    .slider-footer p {\n",[96,59412,59413],{"class":98,"line":9896},[96,59414,59415],{"class":106},"      margin: 0;\n",[96,59417,59418],{"class":98,"line":9904},[96,59419,59369],{"class":106},[96,59421,59422],{"class":98,"line":9909},[96,59423,59424],{"class":106},"      font-size: 18px;\n",[96,59426,59427],{"class":98,"line":16588},[96,59428,59429],{"class":106},"      margin-bottom: 10px;\n",[96,59431,59432],{"class":98,"line":16594},[96,59433,2170],{"class":106},[96,59435,59436],{"class":98,"line":16617},[96,59437,2383],{"emptyLinePlaceholder":23},[96,59439,59440],{"class":98,"line":16623},[96,59441,59442],{"class":106},"    .slider-indicator {\n",[96,59444,59445],{"class":98,"line":16646},[96,59446,59415],{"class":106},[96,59448,59449],{"class":98,"line":16660},[96,59450,59451],{"class":106},"      padding: 0;\n",[96,59453,59454],{"class":98,"line":16680},[96,59455,59456],{"class":106},"      list-style: none;\n",[96,59458,59459],{"class":98,"line":16686},[96,59460,59321],{"class":106},[96,59462,59463],{"class":98,"line":16697},[96,59464,59465],{"class":106},"      align-items: center;\n",[96,59467,59468],{"class":98,"line":16720},[96,59469,2170],{"class":106},[96,59471,59472],{"class":98,"line":16742},[96,59473,2383],{"emptyLinePlaceholder":23},[96,59475,59476],{"class":98,"line":16747},[96,59477,59478],{"class":106},"    .slider-indicator li {\n",[96,59480,59481],{"class":98,"line":16753},[96,59482,59483],{"class":106},"      width: 8px;\n",[96,59485,59486],{"class":98,"line":16767},[96,59487,59488],{"class":106},"      height: 8px;\n",[96,59490,59491],{"class":98,"line":16780},[96,59492,59493],{"class":106},"      margin: 4px;\n",[96,59495,59496],{"class":98,"line":16785},[96,59497,59498],{"class":106},"      border-radius: 50%;\n",[96,59500,59501],{"class":98,"line":16799},[96,59502,59503],{"class":106},"      background: #fff;\n",[96,59505,59506],{"class":98,"line":16804},[96,59507,59508],{"class":106},"      opacity: 0.4;\n",[96,59510,59511],{"class":98,"line":16810},[96,59512,59379],{"class":106},[96,59514,59515],{"class":98,"line":16815},[96,59516,2170],{"class":106},[96,59518,59519],{"class":98,"line":16829},[96,59520,2383],{"emptyLinePlaceholder":23},[96,59522,59523],{"class":98,"line":16834},[96,59524,59525],{"class":106},"    .slider-indicator li.active {\n",[96,59527,59528],{"class":98,"line":16839},[96,59529,59530],{"class":106},"      width: 12px;\n",[96,59532,59533],{"class":98,"line":16853},[96,59534,59535],{"class":106},"      height: 12px;\n",[96,59537,59538],{"class":98,"line":16865},[96,59539,59540],{"class":106},"      opacity: 1;\n",[96,59542,59543],{"class":98,"line":16870},[96,59544,2170],{"class":106},[96,59546,59547,59549,59551],{"class":98,"line":16883},[96,59548,52396],{"class":106},[96,59550,5110],{"class":51279},[96,59552,51286],{"class":106},[96,59554,59555,59557,59559],{"class":98,"line":16888},[96,59556,51764],{"class":106},[96,59558,51313],{"class":51279},[96,59560,51286],{"class":106},[96,59562,59563],{"class":98,"line":16893},[96,59564,2383],{"emptyLinePlaceholder":23},[96,59566,59567,59569,59571],{"class":98,"line":16898},[96,59568,1017],{"class":106},[96,59570,51779],{"class":51279},[96,59572,51286],{"class":106},[96,59574,59575,59577,59579,59581,59583,59586],{"class":98,"line":16911},[96,59576,52123],{"class":106},[96,59578,51590],{"class":51279},[96,59580,53465],{"class":1946},[96,59582,152],{"class":106},[96,59584,59585],{"class":211},"\"slider\"",[96,59587,51286],{"class":106},[96,59589,59590,59592,59594,59596,59598,59600],{"class":98,"line":16916},[96,59591,51320],{"class":106},[96,59593,51590],{"class":51279},[96,59595,53465],{"class":1946},[96,59597,152],{"class":106},[96,59599,55206],{"class":211},[96,59601,51286],{"class":106},[96,59603,59604,59606,59608,59610,59612,59615,59617,59619,59621],{"class":98,"line":32612},[96,59605,55213],{"class":106},[96,59607,1445],{"class":51279},[96,59609,55218],{"class":1946},[96,59611,152],{"class":106},[96,59613,59614],{"class":211},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[96,59616,55226],{"class":1946},[96,59618,152],{"class":106},[96,59620,7636],{"class":211},[96,59622,59106],{"class":106},[96,59624,59625,59627,59629],{"class":98,"line":32618},[96,59626,51755],{"class":106},[96,59628,51590],{"class":51279},[96,59630,51286],{"class":106},[96,59632,59633,59635,59637,59639,59641,59643],{"class":98,"line":32624},[96,59634,51320],{"class":106},[96,59636,51590],{"class":51279},[96,59638,53465],{"class":1946},[96,59640,152],{"class":106},[96,59642,55253],{"class":211},[96,59644,51286],{"class":106},[96,59646,59647,59649,59651,59654,59656],{"class":98,"line":32630},[96,59648,55213],{"class":106},[96,59650,14],{"class":51279},[96,59652,59653],{"class":106},">对人类来说会不会太超前了？\u003C\u002F",[96,59655,14],{"class":51279},[96,59657,51286],{"class":106},[96,59659,59660,59662,59664,59666,59668,59671],{"class":98,"line":32636},[96,59661,55213],{"class":106},[96,59663,1114],{"class":51279},[96,59665,53465],{"class":1946},[96,59667,152],{"class":106},[96,59669,59670],{"class":211},"\"slider-indicator\"",[96,59672,51286],{"class":106},[96,59674,59675,59677,59679,59681,59683,59686,59688,59690],{"class":98,"line":32647},[96,59676,55281],{"class":106},[96,59678,53],{"class":51279},[96,59680,53465],{"class":1946},[96,59682,152],{"class":106},[96,59684,59685],{"class":211},"\"active\"",[96,59687,55293],{"class":106},[96,59689,53],{"class":51279},[96,59691,51286],{"class":106},[96,59693,59694,59696,59698,59700,59702],{"class":98,"line":32653},[96,59695,55281],{"class":106},[96,59697,53],{"class":51279},[96,59699,55293],{"class":106},[96,59701,53],{"class":51279},[96,59703,51286],{"class":106},[96,59705,59706,59708,59710,59712,59714],{"class":98,"line":32673},[96,59707,55281],{"class":106},[96,59709,53],{"class":51279},[96,59711,55293],{"class":106},[96,59713,53],{"class":51279},[96,59715,51286],{"class":106},[96,59717,59718,59720,59722,59724,59726],{"class":98,"line":32679},[96,59719,55281],{"class":106},[96,59721,53],{"class":51279},[96,59723,55293],{"class":106},[96,59725,53],{"class":51279},[96,59727,51286],{"class":106},[96,59729,59730,59732,59734,59736,59738],{"class":98,"line":32690},[96,59731,55281],{"class":106},[96,59733,53],{"class":51279},[96,59735,55293],{"class":106},[96,59737,53],{"class":51279},[96,59739,51286],{"class":106},[96,59741,59742,59744,59746,59748,59750],{"class":98,"line":32696},[96,59743,55281],{"class":106},[96,59745,53],{"class":51279},[96,59747,55293],{"class":106},[96,59749,53],{"class":51279},[96,59751,51286],{"class":106},[96,59753,59754,59756,59758,59760,59762],{"class":98,"line":32702},[96,59755,55281],{"class":106},[96,59757,53],{"class":51279},[96,59759,55293],{"class":106},[96,59761,53],{"class":51279},[96,59763,51286],{"class":106},[96,59765,59766,59768,59770,59772,59774],{"class":98,"line":32708},[96,59767,55281],{"class":106},[96,59769,53],{"class":51279},[96,59771,55293],{"class":106},[96,59773,53],{"class":51279},[96,59775,51286],{"class":106},[96,59777,59778,59780,59782],{"class":98,"line":32714},[96,59779,55386],{"class":106},[96,59781,1114],{"class":51279},[96,59783,51286],{"class":106},[96,59785,59786,59788,59790,59792,59794,59797],{"class":98,"line":32720},[96,59787,55213],{"class":106},[96,59789,51590],{"class":51279},[96,59791,53465],{"class":1946},[96,59793,152],{"class":106},[96,59795,59796],{"class":211},"\"toggle\"",[96,59798,51286],{"class":106},[96,59800,59801,59803,59805,59807,59809,59812,59814,59817,59819,59821],{"class":98,"line":32726},[96,59802,55281],{"class":106},[96,59804,53866],{"class":51279},[96,59806,53465],{"class":1946},[96,59808,152],{"class":106},[96,59810,59811],{"class":211},"\"prev\"",[96,59813,1067],{"class":106},[96,59815,59816],{"class":155},"&lt;",[96,59818,51764],{"class":106},[96,59820,53866],{"class":51279},[96,59822,51286],{"class":106},[96,59824,59825,59827,59829,59831,59833,59836,59838,59841,59843,59845],{"class":98,"line":32732},[96,59826,55281],{"class":106},[96,59828,53866],{"class":51279},[96,59830,53465],{"class":1946},[96,59832,152],{"class":106},[96,59834,59835],{"class":211},"\"next\"",[96,59837,1067],{"class":106},[96,59839,59840],{"class":155},"&gt;",[96,59842,51764],{"class":106},[96,59844,53866],{"class":51279},[96,59846,51286],{"class":106},[96,59848,59849,59851,59853],{"class":98,"line":32752},[96,59850,55386],{"class":106},[96,59852,51590],{"class":51279},[96,59854,51286],{"class":106},[96,59856,59857,59859,59861],{"class":98,"line":32758},[96,59858,51755],{"class":106},[96,59860,51590],{"class":51279},[96,59862,51286],{"class":106},[96,59864,59865,59867,59869],{"class":98,"line":32774},[96,59866,52396],{"class":106},[96,59868,51590],{"class":51279},[96,59870,51286],{"class":106},[96,59872,59873,59875,59877],{"class":98,"line":32780},[96,59874,52123],{"class":106},[96,59876,51792],{"class":51279},[96,59878,51286],{"class":106},[96,59880,59881],{"class":98,"line":32794},[96,59882,59883],{"class":106},"    \u002F\u002F 1. 初始数据\n",[96,59885,59886],{"class":98,"line":32800},[96,59887,59888],{"class":106},"    const data = [\n",[96,59890,59891],{"class":98,"line":32815},[96,59892,59893],{"class":106},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[96,59895,59896],{"class":98,"line":32821},[96,59897,59898],{"class":106},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[96,59900,59901],{"class":98,"line":32830},[96,59902,59903],{"class":106},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[96,59905,59906],{"class":98,"line":32836},[96,59907,59908],{"class":106},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[96,59910,59911],{"class":98,"line":32845},[96,59912,59913],{"class":106},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[96,59915,59916],{"class":98,"line":32851},[96,59917,59918],{"class":106},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[96,59920,59921],{"class":98,"line":32857},[96,59922,59923],{"class":106},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[96,59925,59926],{"class":98,"line":32866},[96,59927,59928],{"class":106},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[96,59930,59931],{"class":98,"line":32872},[96,59932,53088],{"class":106},[96,59934,59935],{"class":98,"line":32883},[96,59936,59937],{"class":106},"    \u002F\u002F 获取元素\n",[96,59939,59940],{"class":98,"line":32889},[96,59941,59942],{"class":106},"    const img = document.querySelector('.slider-wrapper img')\n",[96,59944,59945],{"class":98,"line":32908},[96,59946,59947],{"class":106},"    const p = document.querySelector('.slider-footer p')\n",[96,59949,59950],{"class":98,"line":32914},[96,59951,59952],{"class":106},"    const footer = document.querySelector('.slider-footer')\n",[96,59954,59955],{"class":98,"line":32925},[96,59956,59957],{"class":106},"    \u002F\u002F 1. 右按钮业务\n",[96,59959,59960],{"class":98,"line":32931},[96,59961,59962],{"class":106},"    \u002F\u002F 1.1 获取右侧按钮 \n",[96,59964,59965],{"class":98,"line":32951},[96,59966,59967],{"class":106},"    const next = document.querySelector('.next')\n",[96,59969,59970],{"class":98,"line":32967},[96,59971,59972],{"class":106},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[96,59974,59975],{"class":98,"line":32973},[96,59976,59977],{"class":106},"    \u002F\u002F 1.2 注册点击事件\n",[96,59979,59980],{"class":98,"line":32987},[96,59981,2383],{"emptyLinePlaceholder":23},[96,59983,59984],{"class":98,"line":32993},[96,59985,59986],{"class":106},"    next.addEventListener('click', function () {\n",[96,59988,59989],{"class":98,"line":32999},[96,59990,59991],{"class":106},"      \u002F\u002F console.log(11)\n",[96,59993,59994],{"class":98,"line":33010},[96,59995,59996],{"class":106},"      i++\n",[96,59998,59999],{"class":98,"line":33016},[96,60000,60001],{"class":106},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[96,60003,60004],{"class":98,"line":33022},[96,60005,60006],{"class":106},"      \u002F\u002F if (i >= 8) {\n",[96,60008,60009],{"class":98,"line":33032},[96,60010,60011],{"class":106},"      \u002F\u002F   i = 0\n",[96,60013,60014],{"class":98,"line":33038},[96,60015,60016],{"class":106},"      \u002F\u002F }\n",[96,60018,60019],{"class":98,"line":33049},[96,60020,60021],{"class":106},"      i = i >= data.length ? 0 : i\n",[96,60023,60024],{"class":98,"line":33055},[96,60025,60026],{"class":106},"      \u002F\u002F 1.3 得到对应的对象\n",[96,60028,60029],{"class":98,"line":33065},[96,60030,60031],{"class":106},"      \u002F\u002F console.log(data[i])\n",[96,60033,60034],{"class":98,"line":33070},[96,60035,60036],{"class":106},"      \u002F\u002F 调用函数\n",[96,60038,60039],{"class":98,"line":33076},[96,60040,60041],{"class":106},"      toggle()\n",[96,60043,60044],{"class":98,"line":33125},[96,60045,33440],{"class":106},[96,60047,60048],{"class":98,"line":33172},[96,60049,2383],{"emptyLinePlaceholder":23},[96,60051,60052],{"class":98,"line":33177},[96,60053,60054],{"class":106},"    \u002F\u002F 2. 左侧按钮业务\n",[96,60056,60057],{"class":98,"line":33183},[96,60058,60059],{"class":106},"    \u002F\u002F 2.1 获取左侧按钮 \n",[96,60061,60062],{"class":98,"line":33202},[96,60063,60064],{"class":106},"    const prev = document.querySelector('.prev')\n",[96,60066,60067],{"class":98,"line":33208},[96,60068,59977],{"class":106},[96,60070,60071],{"class":98,"line":33228},[96,60072,60073],{"class":106},"    prev.addEventListener('click', function () {\n",[96,60075,60076],{"class":98,"line":33234},[96,60077,60078],{"class":106},"      i--\n",[96,60080,60081],{"class":98,"line":33240},[96,60082,60083],{"class":106},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[96,60085,60086],{"class":98,"line":33250},[96,60087,60088],{"class":106},"      \u002F\u002F if (i \u003C 0) {\n",[96,60090,60091],{"class":98,"line":33255},[96,60092,60093],{"class":106},"      \u002F\u002F   i = 7\n",[96,60095,60096],{"class":98,"line":33261},[96,60097,60016],{"class":106},[96,60099,60100],{"class":98,"line":33277},[96,60101,60102],{"class":106},"      i = i \u003C 0 ? data.length - 1 : i\n",[96,60104,60105],{"class":98,"line":33322},[96,60106,60026],{"class":106},[96,60108,60109],{"class":98,"line":33328},[96,60110,60031],{"class":106},[96,60112,60113],{"class":98,"line":33334},[96,60114,60036],{"class":106},[96,60116,60117],{"class":98,"line":33340},[96,60118,60041],{"class":106},[96,60120,60121],{"class":98,"line":33351},[96,60122,33440],{"class":106},[96,60124,60125],{"class":98,"line":33357},[96,60126,2383],{"emptyLinePlaceholder":23},[96,60128,60129],{"class":98,"line":33363},[96,60130,60131],{"class":106},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[96,60133,60134],{"class":98,"line":33369},[96,60135,60136],{"class":106},"    function toggle() {\n",[96,60138,60139],{"class":98,"line":33387},[96,60140,60141],{"class":106},"      \u002F\u002F 1.4 渲染对应的数据\n",[96,60143,60144],{"class":98,"line":33401},[96,60145,60146],{"class":106},"      img.src = data[i].url\n",[96,60148,60149],{"class":98,"line":33410},[96,60150,60151],{"class":106},"      p.innerHTML = data[i].title\n",[96,60153,60154],{"class":98,"line":33419},[96,60155,60156],{"class":106},"      footer.style.backgroundColor = data[i].color\n",[96,60158,60159],{"class":98,"line":33428},[96,60160,60161],{"class":106},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[96,60163,60164],{"class":98,"line":33437},[96,60165,60166],{"class":106},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[96,60168,60169],{"class":98,"line":33443},[96,60170,60171],{"class":106},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[96,60173,60174],{"class":98,"line":33449},[96,60175,2170],{"class":106},[96,60177,60178],{"class":98,"line":33457},[96,60179,2383],{"emptyLinePlaceholder":23},[96,60181,60182],{"class":98,"line":33462},[96,60183,60184],{"class":106},"    \u002F\u002F 3. 自动播放模块\n",[96,60186,60187],{"class":98,"line":33468},[96,60188,60189],{"class":106},"    let timerId = setInterval(function () {\n",[96,60191,60192],{"class":98,"line":33479},[96,60193,60194],{"class":106},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[96,60196,60197],{"class":98,"line":33485},[96,60198,60199],{"class":106},"      next.click()\n",[96,60201,60202],{"class":98,"line":33505},[96,60203,60204],{"class":106},"    }, 1000)\n",[96,60206,60207],{"class":98,"line":33511},[96,60208,2383],{"emptyLinePlaceholder":23},[96,60210,60211],{"class":98,"line":33517},[96,60212,60213],{"class":106},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[96,60215,60216],{"class":98,"line":33523},[96,60217,60218],{"class":106},"    const slider = document.querySelector('.slider')\n",[96,60220,60221],{"class":98,"line":33540},[96,60222,60223],{"class":106},"    \u002F\u002F 注册事件\n",[96,60225,60226],{"class":98,"line":33546},[96,60227,60228],{"class":106},"    slider.addEventListener('mouseenter', function () {\n",[96,60230,60231],{"class":98,"line":33552},[96,60232,60233],{"class":106},"      \u002F\u002F 停止定时器\n",[96,60235,60236],{"class":98,"line":33558},[96,60237,60238],{"class":106},"      clearInterval(timerId)\n",[96,60240,60241],{"class":98,"line":33564},[96,60242,33440],{"class":106},[96,60244,60245],{"class":98,"line":33570},[96,60246,2383],{"emptyLinePlaceholder":23},[96,60248,60249],{"class":98,"line":33597},[96,60250,60251],{"class":106},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[96,60253,60254],{"class":98,"line":33621},[96,60255,60223],{"class":106},[96,60257,60258],{"class":98,"line":33627},[96,60259,60260],{"class":106},"    slider.addEventListener('mouseleave', function () {\n",[96,60262,60263],{"class":98,"line":33633},[96,60264,60233],{"class":106},[96,60266,60267],{"class":98,"line":33639},[96,60268,60269],{"class":106},"      if (timerId) clearInterval(timerId)\n",[96,60271,60272],{"class":98,"line":33650},[96,60273,60274],{"class":106},"      \u002F\u002F 开启定时器\n",[96,60276,60277],{"class":98,"line":33661},[96,60278,60279],{"class":106},"      timerId = setInterval(function () {\n",[96,60281,60282],{"class":98,"line":33667},[96,60283,60284],{"class":106},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[96,60286,60287],{"class":98,"line":33684},[96,60288,60289],{"class":106},"        next.click()\n",[96,60291,60292],{"class":98,"line":33707},[96,60293,60294],{"class":106},"      }, 1000)\n",[96,60296,60297],{"class":98,"line":33730},[96,60298,33440],{"class":106},[96,60300,60301,60303,60305],{"class":98,"line":33736},[96,60302,52396],{"class":106},[96,60304,51792],{"class":51279},[96,60306,51286],{"class":106},[96,60308,60309,60311,60313],{"class":98,"line":33741},[96,60310,51764],{"class":106},[96,60312,51779],{"class":51279},[96,60314,51286],{"class":106},[96,60316,60317],{"class":98,"line":33750},[96,60318,2383],{"emptyLinePlaceholder":23},[96,60320,60321,60323,60325],{"class":98,"line":33760},[96,60322,51764],{"class":106},[96,60324,50614],{"class":51279},[96,60326,51286],{"class":106},[21982,60328,60330],{"id":60329},"_3252-焦点事件","3.2.5.2 焦点事件",[14,60332,60333],{},"小米搜索框案例：",[87,60335,60337],{"className":50612,"code":60336,"language":50614,"meta":18,"style":18},"\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",[93,60338,60339,60349,60363,60367,60375,60389,60409,60429,60441,60449,60455,60465,60475,60487,60491,60495,60502,60506,60517,60521,60525,60532,60543,60556,60570,60574,60578,60587,60599,60611,60625,60638,60651,60669,60680,60684,60688,60697,60714,60718,60722,60729,60739,60749,60760,60773,60785,60801,60812,60824,60828,60832,60840,60851,60868,60880,60892,60903,60907,60911,60922,60933,60937,60945,60949,60957,60961,60969,60984,61007,61022,61053,61080,61107,61134,61161,61188,61215,61224,61232,61240,61245,61265,61285,61290,61295,61313,61318,61328,61333,61347,61352,61357,61374,61383,61395,61399,61407,61415,61419],{"__ignoreMap":18},[96,60340,60341,60343,60345,60347],{"class":98,"line":99},[96,60342,51276],{"class":106},[96,60344,51280],{"class":51279},[96,60346,51283],{"class":1946},[96,60348,51286],{"class":106},[96,60350,60351,60353,60355,60357,60359,60361],{"class":98,"line":19},[96,60352,1017],{"class":106},[96,60354,50614],{"class":51279},[96,60356,51295],{"class":1946},[96,60358,152],{"class":106},[96,60360,51300],{"class":211},[96,60362,51286],{"class":106},[96,60364,60365],{"class":98,"line":1162},[96,60366,2383],{"emptyLinePlaceholder":23},[96,60368,60369,60371,60373],{"class":98,"line":1177},[96,60370,1017],{"class":106},[96,60372,51313],{"class":51279},[96,60374,51286],{"class":106},[96,60376,60377,60379,60381,60383,60385,60387],{"class":98,"line":1183},[96,60378,51320],{"class":106},[96,60380,51323],{"class":51279},[96,60382,51326],{"class":1946},[96,60384,152],{"class":106},[96,60386,51331],{"class":211},[96,60388,51286],{"class":106},[96,60390,60391,60393,60395,60397,60399,60401,60403,60405,60407],{"class":98,"line":1197},[96,60392,51320],{"class":106},[96,60394,51323],{"class":51279},[96,60396,51342],{"class":1946},[96,60398,152],{"class":106},[96,60400,51347],{"class":211},[96,60402,51350],{"class":1946},[96,60404,152],{"class":106},[96,60406,51355],{"class":211},[96,60408,51286],{"class":106},[96,60410,60411,60413,60415,60417,60419,60421,60423,60425,60427],{"class":98,"line":1203},[96,60412,51320],{"class":106},[96,60414,51323],{"class":51279},[96,60416,14904],{"class":1946},[96,60418,152],{"class":106},[96,60420,51370],{"class":211},[96,60422,51350],{"class":1946},[96,60424,152],{"class":106},[96,60426,51377],{"class":211},[96,60428,51286],{"class":106},[96,60430,60431,60433,60435,60437,60439],{"class":98,"line":1294},[96,60432,51320],{"class":106},[96,60434,51386],{"class":51279},[96,60436,51389],{"class":106},[96,60438,51386],{"class":51279},[96,60440,51286],{"class":106},[96,60442,60443,60445,60447],{"class":98,"line":1300},[96,60444,51320],{"class":106},[96,60446,5110],{"class":51279},[96,60448,51286],{"class":106},[96,60450,60451,60453],{"class":98,"line":1312},[96,60452,51406],{"class":51279},[96,60454,15556],{"class":106},[96,60456,60457,60459,60461,60463],{"class":98,"line":1595},[96,60458,51413],{"class":155},[96,60460,51416],{"class":106},[96,60462,298],{"class":155},[96,60464,1273],{"class":106},[96,60466,60467,60469,60471,60473],{"class":98,"line":1600},[96,60468,51425],{"class":155},[96,60470,51416],{"class":106},[96,60472,298],{"class":155},[96,60474,1273],{"class":106},[96,60476,60477,60480,60482,60485],{"class":98,"line":1606},[96,60478,60479],{"class":155},"            box-sizing",[96,60481,51416],{"class":106},[96,60483,60484],{"class":155},"border-box",[96,60486,1273],{"class":106},[96,60488,60489],{"class":98,"line":1611},[96,60490,2512],{"class":106},[96,60492,60493],{"class":98,"line":1625},[96,60494,2383],{"emptyLinePlaceholder":23},[96,60496,60497,60500],{"class":98,"line":1630},[96,60498,60499],{"class":51279},"        ul",[96,60501,15556],{"class":106},[96,60503,60504],{"class":98,"line":1636},[96,60505,2383],{"emptyLinePlaceholder":23},[96,60507,60508,60511,60513,60515],{"class":98,"line":1657},[96,60509,60510],{"class":155},"            list-style",[96,60512,51416],{"class":106},[96,60514,54716],{"class":155},[96,60516,1273],{"class":106},[96,60518,60519],{"class":98,"line":1662},[96,60520,2512],{"class":106},[96,60522,60523],{"class":98,"line":1676},[96,60524,2383],{"emptyLinePlaceholder":23},[96,60526,60527,60530],{"class":98,"line":1681},[96,60528,60529],{"class":1946},"        .mi",[96,60531,15556],{"class":106},[96,60533,60534,60537,60539,60541],{"class":98,"line":1710},[96,60535,60536],{"class":155},"            position",[96,60538,51416],{"class":106},[96,60540,54743],{"class":155},[96,60542,1273],{"class":106},[96,60544,60545,60547,60549,60552,60554],{"class":98,"line":1715},[96,60546,51463],{"class":155},[96,60548,51416],{"class":106},[96,60550,60551],{"class":155},"223",[96,60553,51471],{"class":102},[96,60555,1273],{"class":106},[96,60557,60558,60560,60562,60564,60566,60568],{"class":98,"line":1732},[96,60559,51413],{"class":155},[96,60561,51416],{"class":106},[96,60563,418],{"class":155},[96,60565,51471],{"class":102},[96,60567,51535],{"class":155},[96,60569,1273],{"class":106},[96,60571,60572],{"class":98,"line":1737},[96,60573,2512],{"class":106},[96,60575,60576],{"class":98,"line":1742},[96,60577,2383],{"emptyLinePlaceholder":23},[96,60579,60580,60582,60585],{"class":98,"line":1747},[96,60581,60529],{"class":1946},[96,60583,60584],{"class":51279}," input",[96,60586,15556],{"class":106},[96,60588,60589,60591,60593,60595,60597],{"class":98,"line":1761},[96,60590,51463],{"class":155},[96,60592,51416],{"class":106},[96,60594,60551],{"class":155},[96,60596,51471],{"class":102},[96,60598,1273],{"class":106},[96,60600,60601,60603,60605,60607,60609],{"class":98,"line":1766},[96,60602,51478],{"class":155},[96,60604,51416],{"class":106},[96,60606,714],{"class":155},[96,60608,51471],{"class":102},[96,60610,1273],{"class":106},[96,60612,60613,60615,60617,60619,60621,60623],{"class":98,"line":2560},[96,60614,51425],{"class":155},[96,60616,51416],{"class":106},[96,60618,298],{"class":155},[96,60620,2021],{"class":155},[96,60622,51471],{"class":102},[96,60624,1273],{"class":106},[96,60626,60627,60630,60632,60634,60636],{"class":98,"line":2574},[96,60628,60629],{"class":155},"            font-size",[96,60631,51416],{"class":106},[96,60633,656],{"class":155},[96,60635,51471],{"class":102},[96,60637,1273],{"class":106},[96,60639,60640,60643,60645,60647,60649],{"class":98,"line":2582},[96,60641,60642],{"class":155},"            line-height",[96,60644,51416],{"class":106},[96,60646,714],{"class":155},[96,60648,51471],{"class":102},[96,60650,1273],{"class":106},[96,60652,60653,60656,60658,60660,60662,60664,60667],{"class":98,"line":2587},[96,60654,60655],{"class":155},"            border",[96,60657,51416],{"class":106},[96,60659,324],{"class":155},[96,60661,51471],{"class":102},[96,60663,51500],{"class":155},[96,60665,60666],{"class":155}," #e0e0e0",[96,60668,1273],{"class":106},[96,60670,60671,60674,60676,60678],{"class":98,"line":2593},[96,60672,60673],{"class":155},"            outline",[96,60675,51416],{"class":106},[96,60677,54716],{"class":155},[96,60679,1273],{"class":106},[96,60681,60682],{"class":98,"line":2599},[96,60683,2512],{"class":106},[96,60685,60686],{"class":98,"line":2604},[96,60687,2383],{"emptyLinePlaceholder":23},[96,60689,60690,60692,60695],{"class":98,"line":7932},[96,60691,60529],{"class":1946},[96,60693,60694],{"class":1946}," .search",[96,60696,15556],{"class":106},[96,60698,60699,60701,60703,60705,60707,60709,60712],{"class":98,"line":7956},[96,60700,60655],{"class":155},[96,60702,51416],{"class":106},[96,60704,324],{"class":155},[96,60706,51471],{"class":102},[96,60708,51500],{"class":155},[96,60710,60711],{"class":155}," #ff6700",[96,60713,1273],{"class":106},[96,60715,60716],{"class":98,"line":7961},[96,60717,2512],{"class":106},[96,60719,60720],{"class":98,"line":7967},[96,60721,2383],{"emptyLinePlaceholder":23},[96,60723,60724,60727],{"class":98,"line":7994},[96,60725,60726],{"class":1946},"        .result-list",[96,60728,15556],{"class":106},[96,60730,60731,60733,60735,60737],{"class":98,"line":7999},[96,60732,51451],{"class":155},[96,60734,51416],{"class":106},[96,60736,54716],{"class":155},[96,60738,1273],{"class":106},[96,60740,60741,60743,60745,60747],{"class":98,"line":8005},[96,60742,60536],{"class":155},[96,60744,51416],{"class":106},[96,60746,54810],{"class":155},[96,60748,1273],{"class":106},[96,60750,60751,60754,60756,60758],{"class":98,"line":8017},[96,60752,60753],{"class":155},"            left",[96,60755,51416],{"class":106},[96,60757,298],{"class":155},[96,60759,1273],{"class":106},[96,60761,60762,60765,60767,60769,60771],{"class":98,"line":8029},[96,60763,60764],{"class":155},"            top",[96,60766,51416],{"class":106},[96,60768,714],{"class":155},[96,60770,51471],{"class":102},[96,60772,1273],{"class":106},[96,60774,60775,60777,60779,60781,60783],{"class":98,"line":8041},[96,60776,51463],{"class":155},[96,60778,51416],{"class":106},[96,60780,60551],{"class":155},[96,60782,51471],{"class":102},[96,60784,1273],{"class":106},[96,60786,60787,60789,60791,60793,60795,60797,60799],{"class":98,"line":9700},[96,60788,60655],{"class":155},[96,60790,51416],{"class":106},[96,60792,324],{"class":155},[96,60794,51471],{"class":102},[96,60796,51500],{"class":155},[96,60798,60711],{"class":155},[96,60800,1273],{"class":106},[96,60802,60803,60806,60808,60810],{"class":98,"line":9725},[96,60804,60805],{"class":155},"            border-top",[96,60807,51416],{"class":106},[96,60809,298],{"class":155},[96,60811,1273],{"class":106},[96,60813,60814,60817,60819,60822],{"class":98,"line":9748},[96,60815,60816],{"class":155},"            background",[96,60818,51416],{"class":106},[96,60820,60821],{"class":155},"#fff",[96,60823,1273],{"class":106},[96,60825,60826],{"class":98,"line":9772},[96,60827,2512],{"class":106},[96,60829,60830],{"class":98,"line":9777},[96,60831,2383],{"emptyLinePlaceholder":23},[96,60833,60834,60836,60838],{"class":98,"line":9782},[96,60835,60726],{"class":1946},[96,60837,1381],{"class":51279},[96,60839,15556],{"class":106},[96,60841,60842,60844,60846,60849],{"class":98,"line":9787},[96,60843,51451],{"class":155},[96,60845,51416],{"class":106},[96,60847,60848],{"class":155},"block",[96,60850,1273],{"class":106},[96,60852,60853,60855,60857,60859,60861,60864,60866],{"class":98,"line":9796},[96,60854,51425],{"class":155},[96,60856,51416],{"class":106},[96,60858,451],{"class":155},[96,60860,51471],{"class":102},[96,60862,60863],{"class":155}," 15",[96,60865,51471],{"class":102},[96,60867,1273],{"class":106},[96,60869,60870,60872,60874,60876,60878],{"class":98,"line":9801},[96,60871,60629],{"class":155},[96,60873,51416],{"class":106},[96,60875,605],{"class":155},[96,60877,51471],{"class":102},[96,60879,1273],{"class":106},[96,60881,60882,60885,60887,60890],{"class":98,"line":9807},[96,60883,60884],{"class":155},"            color",[96,60886,51416],{"class":106},[96,60888,60889],{"class":155},"#424242",[96,60891,1273],{"class":106},[96,60893,60894,60897,60899,60901],{"class":98,"line":9828},[96,60895,60896],{"class":155},"            text-decoration",[96,60898,51416],{"class":106},[96,60900,54716],{"class":155},[96,60902,1273],{"class":106},[96,60904,60905],{"class":98,"line":9834},[96,60906,2512],{"class":106},[96,60908,60909],{"class":98,"line":9848},[96,60910,2383],{"emptyLinePlaceholder":23},[96,60912,60913,60915,60917,60920],{"class":98,"line":9854},[96,60914,60726],{"class":1946},[96,60916,1381],{"class":51279},[96,60918,60919],{"class":1946},":hover",[96,60921,15556],{"class":106},[96,60923,60924,60926,60928,60931],{"class":98,"line":9881},[96,60925,51619],{"class":155},[96,60927,51416],{"class":106},[96,60929,60930],{"class":155},"#eee",[96,60932,1273],{"class":106},[96,60934,60935],{"class":98,"line":9890},[96,60936,2512],{"class":106},[96,60938,60939,60941,60943],{"class":98,"line":9896},[96,60940,51755],{"class":106},[96,60942,5110],{"class":51279},[96,60944,51286],{"class":106},[96,60946,60947],{"class":98,"line":9904},[96,60948,2383],{"emptyLinePlaceholder":23},[96,60950,60951,60953,60955],{"class":98,"line":9909},[96,60952,51764],{"class":106},[96,60954,51313],{"class":51279},[96,60956,51286],{"class":106},[96,60958,60959],{"class":98,"line":16588},[96,60960,2383],{"emptyLinePlaceholder":23},[96,60962,60963,60965,60967],{"class":98,"line":16594},[96,60964,1017],{"class":106},[96,60966,51779],{"class":51279},[96,60968,51286],{"class":106},[96,60970,60971,60973,60975,60977,60979,60982],{"class":98,"line":16617},[96,60972,51320],{"class":106},[96,60974,51590],{"class":51279},[96,60976,53465],{"class":1946},[96,60978,152],{"class":106},[96,60980,60981],{"class":211},"\"mi\"",[96,60983,51286],{"class":106},[96,60985,60986,60988,60990,60992,60994,60997,61000,61002,61005],{"class":98,"line":16623},[96,60987,55281],{"class":106},[96,60989,53800],{"class":51279},[96,60991,53803],{"class":1946},[96,60993,152],{"class":106},[96,60995,60996],{"class":211},"\"search\"",[96,60998,60999],{"class":1946}," placeholder",[96,61001,152],{"class":106},[96,61003,61004],{"class":211},"\"小米笔记本\"",[96,61006,51286],{"class":106},[96,61008,61009,61011,61013,61015,61017,61020],{"class":98,"line":16646},[96,61010,55281],{"class":106},[96,61012,1114],{"class":51279},[96,61014,53465],{"class":1946},[96,61016,152],{"class":106},[96,61018,61019],{"class":211},"\"result-list\"",[96,61021,51286],{"class":106},[96,61023,61024,61027,61029,61032,61034,61037,61039,61042,61045,61047,61049,61051],{"class":98,"line":16660},[96,61025,61026],{"class":106},"            \u003C",[96,61028,53],{"class":51279},[96,61030,61031],{"class":106},">\u003C",[96,61033,345],{"class":51279},[96,61035,61036],{"class":1946}," href",[96,61038,152],{"class":106},[96,61040,61041],{"class":211},"\"#\"",[96,61043,61044],{"class":106},">全部商品\u003C\u002F",[96,61046,345],{"class":51279},[96,61048,55293],{"class":106},[96,61050,53],{"class":51279},[96,61052,51286],{"class":106},[96,61054,61055,61057,61059,61061,61063,61065,61067,61069,61072,61074,61076,61078],{"class":98,"line":16680},[96,61056,61026],{"class":106},[96,61058,53],{"class":51279},[96,61060,61031],{"class":106},[96,61062,345],{"class":51279},[96,61064,61036],{"class":1946},[96,61066,152],{"class":106},[96,61068,61041],{"class":211},[96,61070,61071],{"class":106},">小米11\u003C\u002F",[96,61073,345],{"class":51279},[96,61075,55293],{"class":106},[96,61077,53],{"class":51279},[96,61079,51286],{"class":106},[96,61081,61082,61084,61086,61088,61090,61092,61094,61096,61099,61101,61103,61105],{"class":98,"line":16686},[96,61083,61026],{"class":106},[96,61085,53],{"class":51279},[96,61087,61031],{"class":106},[96,61089,345],{"class":51279},[96,61091,61036],{"class":1946},[96,61093,152],{"class":106},[96,61095,61041],{"class":211},[96,61097,61098],{"class":106},">小米10S\u003C\u002F",[96,61100,345],{"class":51279},[96,61102,55293],{"class":106},[96,61104,53],{"class":51279},[96,61106,51286],{"class":106},[96,61108,61109,61111,61113,61115,61117,61119,61121,61123,61126,61128,61130,61132],{"class":98,"line":16697},[96,61110,61026],{"class":106},[96,61112,53],{"class":51279},[96,61114,61031],{"class":106},[96,61116,345],{"class":51279},[96,61118,61036],{"class":1946},[96,61120,152],{"class":106},[96,61122,61041],{"class":211},[96,61124,61125],{"class":106},">小米笔记本\u003C\u002F",[96,61127,345],{"class":51279},[96,61129,55293],{"class":106},[96,61131,53],{"class":51279},[96,61133,51286],{"class":106},[96,61135,61136,61138,61140,61142,61144,61146,61148,61150,61153,61155,61157,61159],{"class":98,"line":16720},[96,61137,61026],{"class":106},[96,61139,53],{"class":51279},[96,61141,61031],{"class":106},[96,61143,345],{"class":51279},[96,61145,61036],{"class":1946},[96,61147,152],{"class":106},[96,61149,61041],{"class":211},[96,61151,61152],{"class":106},">小米手机\u003C\u002F",[96,61154,345],{"class":51279},[96,61156,55293],{"class":106},[96,61158,53],{"class":51279},[96,61160,51286],{"class":106},[96,61162,61163,61165,61167,61169,61171,61173,61175,61177,61180,61182,61184,61186],{"class":98,"line":16742},[96,61164,61026],{"class":106},[96,61166,53],{"class":51279},[96,61168,61031],{"class":106},[96,61170,345],{"class":51279},[96,61172,61036],{"class":1946},[96,61174,152],{"class":106},[96,61176,61041],{"class":211},[96,61178,61179],{"class":106},">黑鲨4\u003C\u002F",[96,61181,345],{"class":51279},[96,61183,55293],{"class":106},[96,61185,53],{"class":51279},[96,61187,51286],{"class":106},[96,61189,61190,61192,61194,61196,61198,61200,61202,61204,61207,61209,61211,61213],{"class":98,"line":16747},[96,61191,61026],{"class":106},[96,61193,53],{"class":51279},[96,61195,61031],{"class":106},[96,61197,345],{"class":51279},[96,61199,61036],{"class":1946},[96,61201,152],{"class":106},[96,61203,61041],{"class":211},[96,61205,61206],{"class":106},">空调\u003C\u002F",[96,61208,345],{"class":51279},[96,61210,55293],{"class":106},[96,61212,53],{"class":51279},[96,61214,51286],{"class":106},[96,61216,61217,61220,61222],{"class":98,"line":16753},[96,61218,61219],{"class":106},"        \u003C\u002F",[96,61221,1114],{"class":51279},[96,61223,51286],{"class":106},[96,61225,61226,61228,61230],{"class":98,"line":16767},[96,61227,51755],{"class":106},[96,61229,51590],{"class":51279},[96,61231,51286],{"class":106},[96,61233,61234,61236,61238],{"class":98,"line":16780},[96,61235,51320],{"class":106},[96,61237,51792],{"class":51279},[96,61239,51286],{"class":106},[96,61241,61242],{"class":98,"line":16785},[96,61243,61244],{"class":165},"        \u002F\u002F 1. 获取元素\n",[96,61246,61247,61250,61252,61254,61256,61258,61260,61263],{"class":98,"line":16799},[96,61248,61249],{"class":102},"        const",[96,61251,60584],{"class":155},[96,61253,13548],{"class":102},[96,61255,54375],{"class":106},[96,61257,54378],{"class":1946},[96,61259,107],{"class":106},[96,61261,61262],{"class":211},"'[type=search]'",[96,61264,113],{"class":106},[96,61266,61267,61269,61272,61274,61276,61278,61280,61283],{"class":98,"line":16804},[96,61268,61249],{"class":102},[96,61270,61271],{"class":155}," ul",[96,61273,13548],{"class":102},[96,61275,54375],{"class":106},[96,61277,54378],{"class":1946},[96,61279,107],{"class":106},[96,61281,61282],{"class":211},"'.result-list'",[96,61284,113],{"class":106},[96,61286,61287],{"class":98,"line":16810},[96,61288,61289],{"class":165},"        \u002F\u002F console.log(input)\n",[96,61291,61292],{"class":98,"line":16815},[96,61293,61294],{"class":165},"        \u002F\u002F 2. 监听事件 获得焦点\n",[96,61296,61297,61300,61302,61304,61307,61309,61311],{"class":98,"line":16829},[96,61298,61299],{"class":106},"        input.",[96,61301,57792],{"class":1946},[96,61303,107],{"class":106},[96,61305,61306],{"class":211},"'focus'",[96,61308,12419],{"class":106},[96,61310,54428],{"class":102},[96,61312,54431],{"class":106},[96,61314,61315],{"class":98,"line":16834},[96,61316,61317],{"class":165},"            \u002F\u002F ul显示\n",[96,61319,61320,61323,61325],{"class":98,"line":16839},[96,61321,61322],{"class":106},"            ul.style.display ",[96,61324,152],{"class":102},[96,61326,61327],{"class":211}," 'block'\n",[96,61329,61330],{"class":98,"line":16853},[96,61331,61332],{"class":165},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[96,61334,61335,61338,61340,61342,61345],{"class":98,"line":16865},[96,61336,61337],{"class":106},"            input.classList.",[96,61339,5318],{"class":1946},[96,61341,107],{"class":106},[96,61343,61344],{"class":211},"'search'",[96,61346,113],{"class":106},[96,61348,61349],{"class":98,"line":16870},[96,61350,61351],{"class":106},"        })\n",[96,61353,61354],{"class":98,"line":16883},[96,61355,61356],{"class":165},"        \u002F\u002F 3. 监听事件 失去焦点\n",[96,61358,61359,61361,61363,61365,61368,61370,61372],{"class":98,"line":16888},[96,61360,61299],{"class":106},[96,61362,57792],{"class":1946},[96,61364,107],{"class":106},[96,61366,61367],{"class":211},"'blur'",[96,61369,12419],{"class":106},[96,61371,54428],{"class":102},[96,61373,54431],{"class":106},[96,61375,61376,61378,61380],{"class":98,"line":16893},[96,61377,61322],{"class":106},[96,61379,152],{"class":102},[96,61381,61382],{"class":211}," 'none'\n",[96,61384,61385,61387,61389,61391,61393],{"class":98,"line":16898},[96,61386,61337],{"class":106},[96,61388,56985],{"class":1946},[96,61390,107],{"class":106},[96,61392,61344],{"class":211},[96,61394,113],{"class":106},[96,61396,61397],{"class":98,"line":16911},[96,61398,61351],{"class":106},[96,61400,61401,61403,61405],{"class":98,"line":16916},[96,61402,51755],{"class":106},[96,61404,51792],{"class":51279},[96,61406,51286],{"class":106},[96,61408,61409,61411,61413],{"class":98,"line":32612},[96,61410,51764],{"class":106},[96,61412,51779],{"class":51279},[96,61414,51286],{"class":106},[96,61416,61417],{"class":98,"line":32618},[96,61418,2383],{"emptyLinePlaceholder":23},[96,61420,61421,61423,61425],{"class":98,"line":32624},[96,61422,51764],{"class":106},[96,61424,50614],{"class":51279},[96,61426,51286],{"class":106},[21982,61428,61430],{"id":61429},"_3253-键盘事件","3.2.5.3 键盘事件",[14,61432,61433],{},"评论字数统计案例",[14,61435,61436],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[14,61438,61439],{},"牢记focus伪类选择器",[51323,61441],{"charSet":61442},"UTF-8",[51323,61444],{"name":61445,"content":61446},"viewport","width=device-width, initial-scale=1.0",[51386,61448,61449],{},"Document",[5110,61451,61452],{},"\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",[53800,61454],{"type":5171},[1114,61456,61457,61460],{},[53,61458,61459],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[53,61461,61462],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[87,61464,61466],{"className":50612,"code":61465,"language":50614,"meta":18,"style":18},"\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",[93,61467,61468,61478,61492,61496,61504,61518,61538,61558,61571,61579,61586,61599,61613,61623,61633,61637,61641,61648,61660,61672,61684,61696,61725,61738,61742,61746,61755,61766,61778,61789,61800,61812,61823,61835,61851,61863,61867,61871,61882,61893,61903,61915,61919,61923,61931,61942,61952,61963,61975,61988,62000,62012,62016,62020,62029,62041,62052,62065,62076,62090,62094,62098,62105,62117,62129,62139,62143,62147,62156,62168,62178,62182,62186,62197,62207,62226,62239,62243,62247,62257,62267,62271,62275,62286,62297,62309,62321,62325,62329,62340,62351,62365,62369,62373,62384,62394,62406,62410,62418,62426,62430,62438,62453,62472,62512,62525,62533,62547,62567,62575,62590,62613,62631,62646,62666,62686,62706,62714,62722,62730,62738,62758,62778,62783,62800,62809,62813,62818,62834,62842,62846,62851,62868,62873,62898,62902,62906,62911,62916,62924,62932,62936],{"__ignoreMap":18},[96,61469,61470,61472,61474,61476],{"class":98,"line":99},[96,61471,51276],{"class":106},[96,61473,51280],{"class":51279},[96,61475,51283],{"class":1946},[96,61477,51286],{"class":106},[96,61479,61480,61482,61484,61486,61488,61490],{"class":98,"line":19},[96,61481,1017],{"class":106},[96,61483,50614],{"class":51279},[96,61485,51295],{"class":1946},[96,61487,152],{"class":106},[96,61489,51300],{"class":211},[96,61491,51286],{"class":106},[96,61493,61494],{"class":98,"line":1162},[96,61495,2383],{"emptyLinePlaceholder":23},[96,61497,61498,61500,61502],{"class":98,"line":1177},[96,61499,1017],{"class":106},[96,61501,51313],{"class":51279},[96,61503,51286],{"class":106},[96,61505,61506,61508,61510,61512,61514,61516],{"class":98,"line":1183},[96,61507,52123],{"class":106},[96,61509,51323],{"class":51279},[96,61511,51326],{"class":1946},[96,61513,152],{"class":106},[96,61515,51331],{"class":211},[96,61517,51286],{"class":106},[96,61519,61520,61522,61524,61526,61528,61530,61532,61534,61536],{"class":98,"line":1197},[96,61521,52123],{"class":106},[96,61523,51323],{"class":51279},[96,61525,51342],{"class":1946},[96,61527,152],{"class":106},[96,61529,51347],{"class":211},[96,61531,51350],{"class":1946},[96,61533,152],{"class":106},[96,61535,51355],{"class":211},[96,61537,51286],{"class":106},[96,61539,61540,61542,61544,61546,61548,61550,61552,61554,61556],{"class":98,"line":1203},[96,61541,52123],{"class":106},[96,61543,51323],{"class":51279},[96,61545,14904],{"class":1946},[96,61547,152],{"class":106},[96,61549,51370],{"class":211},[96,61551,51350],{"class":1946},[96,61553,152],{"class":106},[96,61555,51377],{"class":211},[96,61557,51286],{"class":106},[96,61559,61560,61562,61564,61567,61569],{"class":98,"line":1294},[96,61561,52123],{"class":106},[96,61563,51386],{"class":51279},[96,61565,61566],{"class":106},">评论回车发布\u003C\u002F",[96,61568,51386],{"class":51279},[96,61570,51286],{"class":106},[96,61572,61573,61575,61577],{"class":98,"line":1300},[96,61574,52123],{"class":106},[96,61576,5110],{"class":51279},[96,61578,51286],{"class":106},[96,61580,61581,61584],{"class":98,"line":1312},[96,61582,61583],{"class":1946},"    .wrapper",[96,61585,15556],{"class":106},[96,61587,61588,61591,61593,61595,61597],{"class":98,"line":1595},[96,61589,61590],{"class":155},"      min-width",[96,61592,51416],{"class":106},[96,61594,3970],{"class":155},[96,61596,51471],{"class":102},[96,61598,1273],{"class":106},[96,61600,61601,61604,61606,61609,61611],{"class":98,"line":1600},[96,61602,61603],{"class":155},"      max-width",[96,61605,51416],{"class":106},[96,61607,61608],{"class":155},"800",[96,61610,51471],{"class":102},[96,61612,1273],{"class":106},[96,61614,61615,61617,61619,61621],{"class":98,"line":1606},[96,61616,54988],{"class":155},[96,61618,51416],{"class":106},[96,61620,51456],{"class":155},[96,61622,1273],{"class":106},[96,61624,61625,61627,61629,61631],{"class":98,"line":1611},[96,61626,54999],{"class":155},[96,61628,51416],{"class":106},[96,61630,51559],{"class":155},[96,61632,1273],{"class":106},[96,61634,61635],{"class":98,"line":1625},[96,61636,2170],{"class":106},[96,61638,61639],{"class":98,"line":1630},[96,61640,2383],{"emptyLinePlaceholder":23},[96,61642,61643,61646],{"class":98,"line":1636},[96,61644,61645],{"class":1946},"    .avatar",[96,61647,15556],{"class":106},[96,61649,61650,61652,61654,61656,61658],{"class":98,"line":1657},[96,61651,54750],{"class":155},[96,61653,51416],{"class":106},[96,61655,714],{"class":155},[96,61657,51471],{"class":102},[96,61659,1273],{"class":106},[96,61661,61662,61664,61666,61668,61670],{"class":98,"line":1662},[96,61663,54764],{"class":155},[96,61665,51416],{"class":106},[96,61667,714],{"class":155},[96,61669,51471],{"class":102},[96,61671,1273],{"class":106},[96,61673,61674,61676,61678,61680,61682],{"class":98,"line":1676},[96,61675,55113],{"class":155},[96,61677,51416],{"class":106},[96,61679,763],{"class":155},[96,61681,435],{"class":102},[96,61683,1273],{"class":106},[96,61685,61686,61689,61691,61694],{"class":98,"line":1681},[96,61687,61688],{"class":155},"      overflow",[96,61690,51416],{"class":106},[96,61692,61693],{"class":155},"hidden",[96,61695,1273],{"class":106},[96,61697,61698,61701,61703,61706,61708,61711,61713,61716,61718,61720,61723],{"class":98,"line":1710},[96,61699,61700],{"class":155},"      background",[96,61702,51416],{"class":106},[96,61704,61705],{"class":155},"url",[96,61707,107],{"class":106},[96,61709,61710],{"class":5200},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[96,61712,13698],{"class":106},[96,61714,61715],{"class":155},"no-repeat",[96,61717,17128],{"class":155},[96,61719,24957],{"class":106},[96,61721,61722],{"class":155},"cover",[96,61724,1273],{"class":106},[96,61726,61727,61730,61732,61734,61736],{"class":98,"line":1715},[96,61728,61729],{"class":155},"      margin-right",[96,61731,51416],{"class":106},[96,61733,807],{"class":155},[96,61735,51471],{"class":102},[96,61737,1273],{"class":106},[96,61739,61740],{"class":98,"line":1732},[96,61741,2170],{"class":106},[96,61743,61744],{"class":98,"line":1737},[96,61745,2383],{"emptyLinePlaceholder":23},[96,61747,61748,61750,61753],{"class":98,"line":1742},[96,61749,61583],{"class":1946},[96,61751,61752],{"class":51279}," textarea",[96,61754,15556],{"class":106},[96,61756,61757,61760,61762,61764],{"class":98,"line":1747},[96,61758,61759],{"class":155},"      outline",[96,61761,51416],{"class":106},[96,61763,54716],{"class":155},[96,61765,1273],{"class":106},[96,61767,61768,61771,61773,61776],{"class":98,"line":1761},[96,61769,61770],{"class":155},"      border-color",[96,61772,51416],{"class":106},[96,61774,61775],{"class":155},"transparent",[96,61777,1273],{"class":106},[96,61779,61780,61783,61785,61787],{"class":98,"line":1766},[96,61781,61782],{"class":155},"      resize",[96,61784,51416],{"class":106},[96,61786,54716],{"class":155},[96,61788,1273],{"class":106},[96,61790,61791,61793,61795,61798],{"class":98,"line":2560},[96,61792,61700],{"class":155},[96,61794,51416],{"class":106},[96,61796,61797],{"class":155},"#f5f5f5",[96,61799,1273],{"class":106},[96,61801,61802,61804,61806,61808,61810],{"class":98,"line":2574},[96,61803,55113],{"class":155},[96,61805,51416],{"class":106},[96,61807,400],{"class":155},[96,61809,51471],{"class":102},[96,61811,1273],{"class":106},[96,61813,61814,61817,61819,61821],{"class":98,"line":2582},[96,61815,61816],{"class":155},"      flex",[96,61818,51416],{"class":106},[96,61820,324],{"class":155},[96,61822,1273],{"class":106},[96,61824,61825,61827,61829,61831,61833],{"class":98,"line":2587},[96,61826,54674],{"class":155},[96,61828,51416],{"class":106},[96,61830,553],{"class":155},[96,61832,51471],{"class":102},[96,61834,1273],{"class":106},[96,61836,61837,61840,61842,61844,61847,61849],{"class":98,"line":2593},[96,61838,61839],{"class":155},"      transition",[96,61841,51416],{"class":106},[96,61843,28100],{"class":155},[96,61845,61846],{"class":155}," 0.5",[96,61848,802],{"class":102},[96,61850,1273],{"class":106},[96,61852,61853,61855,61857,61859,61861],{"class":98,"line":2599},[96,61854,54764],{"class":155},[96,61856,51416],{"class":106},[96,61858,1058],{"class":155},[96,61860,51471],{"class":102},[96,61862,1273],{"class":106},[96,61864,61865],{"class":98,"line":2604},[96,61866,2170],{"class":106},[96,61868,61869],{"class":98,"line":7932},[96,61870,2383],{"emptyLinePlaceholder":23},[96,61872,61873,61875,61877,61880],{"class":98,"line":7956},[96,61874,61583],{"class":1946},[96,61876,61752],{"class":51279},[96,61878,61879],{"class":1946},":focus",[96,61881,15556],{"class":106},[96,61883,61884,61886,61888,61891],{"class":98,"line":7961},[96,61885,61770],{"class":155},[96,61887,51416],{"class":106},[96,61889,61890],{"class":155},"#e4e4e4",[96,61892,1273],{"class":106},[96,61894,61895,61897,61899,61901],{"class":98,"line":7967},[96,61896,61700],{"class":155},[96,61898,51416],{"class":106},[96,61900,60821],{"class":155},[96,61902,1273],{"class":106},[96,61904,61905,61907,61909,61911,61913],{"class":98,"line":7994},[96,61906,54764],{"class":155},[96,61908,51416],{"class":106},[96,61910,763],{"class":155},[96,61912,51471],{"class":102},[96,61914,1273],{"class":106},[96,61916,61917],{"class":98,"line":7999},[96,61918,2170],{"class":106},[96,61920,61921],{"class":98,"line":8005},[96,61922,2383],{"emptyLinePlaceholder":23},[96,61924,61925,61927,61929],{"class":98,"line":8017},[96,61926,61583],{"class":1946},[96,61928,57446],{"class":51279},[96,61930,15556],{"class":106},[96,61932,61933,61935,61937,61940],{"class":98,"line":8029},[96,61934,61700],{"class":155},[96,61936,51416],{"class":106},[96,61938,61939],{"class":155},"#00aeec",[96,61941,1273],{"class":106},[96,61943,61944,61946,61948,61950],{"class":98,"line":8041},[96,61945,57395],{"class":155},[96,61947,51416],{"class":106},[96,61949,60821],{"class":155},[96,61951,1273],{"class":106},[96,61953,61954,61957,61959,61961],{"class":98,"line":9700},[96,61955,61956],{"class":155},"      border",[96,61958,51416],{"class":106},[96,61960,54716],{"class":155},[96,61962,1273],{"class":106},[96,61964,61965,61967,61969,61971,61973],{"class":98,"line":9725},[96,61966,55113],{"class":155},[96,61968,51416],{"class":106},[96,61970,400],{"class":155},[96,61972,51471],{"class":102},[96,61974,1273],{"class":106},[96,61976,61977,61980,61982,61984,61986],{"class":98,"line":9748},[96,61978,61979],{"class":155},"      margin-left",[96,61981,51416],{"class":106},[96,61983,553],{"class":155},[96,61985,51471],{"class":102},[96,61987,1273],{"class":106},[96,61989,61990,61992,61994,61996,61998],{"class":98,"line":9772},[96,61991,54750],{"class":155},[96,61993,51416],{"class":106},[96,61995,463],{"class":155},[96,61997,51471],{"class":102},[96,61999,1273],{"class":106},[96,62001,62002,62005,62007,62010],{"class":98,"line":9777},[96,62003,62004],{"class":155},"      cursor",[96,62006,51416],{"class":106},[96,62008,62009],{"class":155},"pointer",[96,62011,1273],{"class":106},[96,62013,62014],{"class":98,"line":9782},[96,62015,2170],{"class":106},[96,62017,62018],{"class":98,"line":9787},[96,62019,2383],{"emptyLinePlaceholder":23},[96,62021,62022,62024,62027],{"class":98,"line":9796},[96,62023,61583],{"class":1946},[96,62025,62026],{"class":1946}," .total",[96,62028,15556],{"class":106},[96,62030,62031,62033,62035,62037,62039],{"class":98,"line":9801},[96,62032,61729],{"class":155},[96,62034,51416],{"class":106},[96,62036,719],{"class":155},[96,62038,51471],{"class":102},[96,62040,1273],{"class":106},[96,62042,62043,62045,62047,62050],{"class":98,"line":9807},[96,62044,57395],{"class":155},[96,62046,51416],{"class":106},[96,62048,62049],{"class":155},"#999",[96,62051,1273],{"class":106},[96,62053,62054,62057,62059,62061,62063],{"class":98,"line":9828},[96,62055,62056],{"class":155},"      margin-top",[96,62058,51416],{"class":106},[96,62060,426],{"class":155},[96,62062,51471],{"class":102},[96,62064,1273],{"class":106},[96,62066,62067,62070,62072,62074],{"class":98,"line":9834},[96,62068,62069],{"class":155},"      opacity",[96,62071,51416],{"class":106},[96,62073,298],{"class":155},[96,62075,1273],{"class":106},[96,62077,62078,62080,62082,62084,62086,62088],{"class":98,"line":9848},[96,62079,61839],{"class":155},[96,62081,51416],{"class":106},[96,62083,28100],{"class":155},[96,62085,61846],{"class":155},[96,62087,802],{"class":102},[96,62089,1273],{"class":106},[96,62091,62092],{"class":98,"line":9854},[96,62093,2170],{"class":106},[96,62095,62096],{"class":98,"line":9881},[96,62097,2383],{"emptyLinePlaceholder":23},[96,62099,62100,62103],{"class":98,"line":9890},[96,62101,62102],{"class":1946},"    .list",[96,62104,15556],{"class":106},[96,62106,62107,62109,62111,62113,62115],{"class":98,"line":9896},[96,62108,61590],{"class":155},[96,62110,51416],{"class":106},[96,62112,3970],{"class":155},[96,62114,51471],{"class":102},[96,62116,1273],{"class":106},[96,62118,62119,62121,62123,62125,62127],{"class":98,"line":9904},[96,62120,61603],{"class":155},[96,62122,51416],{"class":106},[96,62124,61608],{"class":155},[96,62126,51471],{"class":102},[96,62128,1273],{"class":106},[96,62130,62131,62133,62135,62137],{"class":98,"line":9909},[96,62132,54988],{"class":155},[96,62134,51416],{"class":106},[96,62136,51456],{"class":155},[96,62138,1273],{"class":106},[96,62140,62141],{"class":98,"line":16588},[96,62142,2170],{"class":106},[96,62144,62145],{"class":98,"line":16594},[96,62146,2383],{"emptyLinePlaceholder":23},[96,62148,62149,62151,62154],{"class":98,"line":16617},[96,62150,62102],{"class":1946},[96,62152,62153],{"class":1946}," .item",[96,62155,15556],{"class":106},[96,62157,62158,62160,62162,62164,62166],{"class":98,"line":16623},[96,62159,54750],{"class":155},[96,62161,51416],{"class":106},[96,62163,418],{"class":155},[96,62165,435],{"class":102},[96,62167,1273],{"class":106},[96,62169,62170,62172,62174,62176],{"class":98,"line":16646},[96,62171,54988],{"class":155},[96,62173,51416],{"class":106},[96,62175,51456],{"class":155},[96,62177,1273],{"class":106},[96,62179,62180],{"class":98,"line":16660},[96,62181,2170],{"class":106},[96,62183,62184],{"class":98,"line":16680},[96,62185,2383],{"emptyLinePlaceholder":23},[96,62187,62188,62190,62192,62195],{"class":98,"line":16686},[96,62189,62102],{"class":1946},[96,62191,62153],{"class":1946},[96,62193,62194],{"class":1946}," .info",[96,62196,15556],{"class":106},[96,62198,62199,62201,62203,62205],{"class":98,"line":16697},[96,62200,61816],{"class":155},[96,62202,51416],{"class":106},[96,62204,324],{"class":155},[96,62206,1273],{"class":106},[96,62208,62209,62212,62214,62216,62218,62221,62224],{"class":98,"line":16720},[96,62210,62211],{"class":155},"      border-bottom",[96,62213,51416],{"class":106},[96,62215,324],{"class":155},[96,62217,51471],{"class":102},[96,62219,62220],{"class":155}," dashed",[96,62222,62223],{"class":155}," #e4e4e4",[96,62225,1273],{"class":106},[96,62227,62228,62231,62233,62235,62237],{"class":98,"line":16742},[96,62229,62230],{"class":155},"      padding-bottom",[96,62232,51416],{"class":106},[96,62234,553],{"class":155},[96,62236,51471],{"class":102},[96,62238,1273],{"class":106},[96,62240,62241],{"class":98,"line":16747},[96,62242,2170],{"class":106},[96,62244,62245],{"class":98,"line":16753},[96,62246,2383],{"emptyLinePlaceholder":23},[96,62248,62249,62251,62253,62255],{"class":98,"line":16767},[96,62250,62102],{"class":1946},[96,62252,62153],{"class":1946},[96,62254,6809],{"class":51279},[96,62256,15556],{"class":106},[96,62258,62259,62261,62263,62265],{"class":98,"line":16780},[96,62260,54685],{"class":155},[96,62262,51416],{"class":106},[96,62264,298],{"class":155},[96,62266,1273],{"class":106},[96,62268,62269],{"class":98,"line":16785},[96,62270,2170],{"class":106},[96,62272,62273],{"class":98,"line":16799},[96,62274,2383],{"emptyLinePlaceholder":23},[96,62276,62277,62279,62281,62284],{"class":98,"line":16804},[96,62278,62102],{"class":1946},[96,62280,62153],{"class":1946},[96,62282,62283],{"class":1946}," .name",[96,62285,15556],{"class":106},[96,62287,62288,62290,62292,62295],{"class":98,"line":16810},[96,62289,57395],{"class":155},[96,62291,51416],{"class":106},[96,62293,62294],{"class":155},"#FB7299",[96,62296,1273],{"class":106},[96,62298,62299,62301,62303,62305,62307],{"class":98,"line":16815},[96,62300,54901],{"class":155},[96,62302,51416],{"class":106},[96,62304,656],{"class":155},[96,62306,51471],{"class":102},[96,62308,1273],{"class":106},[96,62310,62311,62314,62316,62319],{"class":98,"line":16829},[96,62312,62313],{"class":155},"      font-weight",[96,62315,51416],{"class":106},[96,62317,62318],{"class":155},"bold",[96,62320,1273],{"class":106},[96,62322,62323],{"class":98,"line":16834},[96,62324,2170],{"class":106},[96,62326,62327],{"class":98,"line":16839},[96,62328,2383],{"emptyLinePlaceholder":23},[96,62330,62331,62333,62335,62338],{"class":98,"line":16853},[96,62332,62102],{"class":1946},[96,62334,62153],{"class":1946},[96,62336,62337],{"class":1946}," .text",[96,62339,15556],{"class":106},[96,62341,62342,62344,62346,62349],{"class":98,"line":16865},[96,62343,57395],{"class":155},[96,62345,51416],{"class":106},[96,62347,62348],{"class":155},"#333",[96,62350,1273],{"class":106},[96,62352,62353,62355,62357,62359,62361,62363],{"class":98,"line":16870},[96,62354,54674],{"class":155},[96,62356,51416],{"class":106},[96,62358,553],{"class":155},[96,62360,51471],{"class":102},[96,62362,4076],{"class":155},[96,62364,1273],{"class":106},[96,62366,62367],{"class":98,"line":16883},[96,62368,2170],{"class":106},[96,62370,62371],{"class":98,"line":16888},[96,62372,2383],{"emptyLinePlaceholder":23},[96,62374,62375,62377,62379,62382],{"class":98,"line":16893},[96,62376,62102],{"class":1946},[96,62378,62153],{"class":1946},[96,62380,62381],{"class":1946}," .time",[96,62383,15556],{"class":106},[96,62385,62386,62388,62390,62392],{"class":98,"line":16898},[96,62387,57395],{"class":155},[96,62389,51416],{"class":106},[96,62391,62049],{"class":155},[96,62393,1273],{"class":106},[96,62395,62396,62398,62400,62402,62404],{"class":98,"line":16911},[96,62397,54901],{"class":155},[96,62399,51416],{"class":106},[96,62401,605],{"class":155},[96,62403,51471],{"class":102},[96,62405,1273],{"class":106},[96,62407,62408],{"class":98,"line":16916},[96,62409,2170],{"class":106},[96,62411,62412,62414,62416],{"class":98,"line":32612},[96,62413,52396],{"class":106},[96,62415,5110],{"class":51279},[96,62417,51286],{"class":106},[96,62419,62420,62422,62424],{"class":98,"line":32618},[96,62421,51764],{"class":106},[96,62423,51313],{"class":51279},[96,62425,51286],{"class":106},[96,62427,62428],{"class":98,"line":32624},[96,62429,2383],{"emptyLinePlaceholder":23},[96,62431,62432,62434,62436],{"class":98,"line":32630},[96,62433,1017],{"class":106},[96,62435,51779],{"class":51279},[96,62437,51286],{"class":106},[96,62439,62440,62442,62444,62446,62448,62451],{"class":98,"line":32636},[96,62441,52123],{"class":106},[96,62443,51590],{"class":51279},[96,62445,53465],{"class":1946},[96,62447,152],{"class":106},[96,62449,62450],{"class":211},"\"wrapper\"",[96,62452,51286],{"class":106},[96,62454,62455,62457,62459,62461,62463,62466,62468,62470],{"class":98,"line":32647},[96,62456,51320],{"class":106},[96,62458,548],{"class":51279},[96,62460,53465],{"class":1946},[96,62462,152],{"class":106},[96,62464,62465],{"class":211},"\"avatar\"",[96,62467,55293],{"class":106},[96,62469,548],{"class":51279},[96,62471,51286],{"class":106},[96,62473,62474,62476,62478,62480,62482,62485,62487,62489,62492,62494,62496,62498,62501,62503,62506,62508,62510],{"class":98,"line":32653},[96,62475,51320],{"class":106},[96,62477,54267],{"class":51279},[96,62479,14943],{"class":1946},[96,62481,152],{"class":106},[96,62483,62484],{"class":211},"\"tx\"",[96,62486,60999],{"class":1946},[96,62488,152],{"class":106},[96,62490,62491],{"class":211},"\"发一条友善的评论\"",[96,62493,54290],{"class":1946},[96,62495,152],{"class":106},[96,62497,3684],{"class":211},[96,62499,62500],{"class":1946}," maxlength",[96,62502,152],{"class":106},[96,62504,62505],{"class":211},"\"200\"",[96,62507,55293],{"class":106},[96,62509,54267],{"class":51279},[96,62511,51286],{"class":106},[96,62513,62514,62516,62518,62521,62523],{"class":98,"line":32673},[96,62515,51320],{"class":106},[96,62517,53866],{"class":51279},[96,62519,62520],{"class":106},">发布\u003C\u002F",[96,62522,53866],{"class":51279},[96,62524,51286],{"class":106},[96,62526,62527,62529,62531],{"class":98,"line":32679},[96,62528,52396],{"class":106},[96,62530,51590],{"class":51279},[96,62532,51286],{"class":106},[96,62534,62535,62537,62539,62541,62543,62545],{"class":98,"line":32690},[96,62536,52123],{"class":106},[96,62538,51590],{"class":51279},[96,62540,53465],{"class":1946},[96,62542,152],{"class":106},[96,62544,62450],{"class":211},[96,62546,51286],{"class":106},[96,62548,62549,62551,62553,62555,62557,62560,62563,62565],{"class":98,"line":32696},[96,62550,51320],{"class":106},[96,62552,96],{"class":51279},[96,62554,53465],{"class":1946},[96,62556,152],{"class":106},[96,62558,62559],{"class":211},"\"total\"",[96,62561,62562],{"class":106},">0\u002F200字\u003C\u002F",[96,62564,96],{"class":51279},[96,62566,51286],{"class":106},[96,62568,62569,62571,62573],{"class":98,"line":32702},[96,62570,52396],{"class":106},[96,62572,51590],{"class":51279},[96,62574,51286],{"class":106},[96,62576,62577,62579,62581,62583,62585,62588],{"class":98,"line":32708},[96,62578,52123],{"class":106},[96,62580,51590],{"class":51279},[96,62582,53465],{"class":1946},[96,62584,152],{"class":106},[96,62586,62587],{"class":211},"\"list\"",[96,62589,51286],{"class":106},[96,62591,62592,62594,62596,62598,62600,62603,62606,62608,62611],{"class":98,"line":32714},[96,62593,51320],{"class":106},[96,62595,51590],{"class":51279},[96,62597,53465],{"class":1946},[96,62599,152],{"class":106},[96,62601,62602],{"class":211},"\"item\"",[96,62604,62605],{"class":1946}," style",[96,62607,152],{"class":106},[96,62609,62610],{"class":211},"\"display: none;\"",[96,62612,51286],{"class":106},[96,62614,62615,62617,62619,62621,62623,62625,62627,62629],{"class":98,"line":32720},[96,62616,55213],{"class":106},[96,62618,548],{"class":51279},[96,62620,53465],{"class":1946},[96,62622,152],{"class":106},[96,62624,62465],{"class":211},[96,62626,55293],{"class":106},[96,62628,548],{"class":51279},[96,62630,51286],{"class":106},[96,62632,62633,62635,62637,62639,62641,62644],{"class":98,"line":32726},[96,62634,55213],{"class":106},[96,62636,51590],{"class":51279},[96,62638,53465],{"class":1946},[96,62640,152],{"class":106},[96,62642,62643],{"class":211},"\"info\"",[96,62645,51286],{"class":106},[96,62647,62648,62650,62652,62654,62656,62659,62662,62664],{"class":98,"line":32732},[96,62649,55281],{"class":106},[96,62651,14],{"class":51279},[96,62653,53465],{"class":1946},[96,62655,152],{"class":106},[96,62657,62658],{"class":211},"\"name\"",[96,62660,62661],{"class":106},">清风徐来\u003C\u002F",[96,62663,14],{"class":51279},[96,62665,51286],{"class":106},[96,62667,62668,62670,62672,62674,62676,62679,62682,62684],{"class":98,"line":32752},[96,62669,55281],{"class":106},[96,62671,14],{"class":51279},[96,62673,53465],{"class":1946},[96,62675,152],{"class":106},[96,62677,62678],{"class":211},"\"text\"",[96,62680,62681],{"class":106},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[96,62683,14],{"class":51279},[96,62685,51286],{"class":106},[96,62687,62688,62690,62692,62694,62696,62699,62702,62704],{"class":98,"line":32758},[96,62689,55281],{"class":106},[96,62691,14],{"class":51279},[96,62693,53465],{"class":1946},[96,62695,152],{"class":106},[96,62697,62698],{"class":211},"\"time\"",[96,62700,62701],{"class":106},">2022-10-10 20:29:21\u003C\u002F",[96,62703,14],{"class":51279},[96,62705,51286],{"class":106},[96,62707,62708,62710,62712],{"class":98,"line":32774},[96,62709,55386],{"class":106},[96,62711,51590],{"class":51279},[96,62713,51286],{"class":106},[96,62715,62716,62718,62720],{"class":98,"line":32780},[96,62717,51755],{"class":106},[96,62719,51590],{"class":51279},[96,62721,51286],{"class":106},[96,62723,62724,62726,62728],{"class":98,"line":32794},[96,62725,52396],{"class":106},[96,62727,51590],{"class":51279},[96,62729,51286],{"class":106},[96,62731,62732,62734,62736],{"class":98,"line":32800},[96,62733,52123],{"class":106},[96,62735,51792],{"class":51279},[96,62737,51286],{"class":106},[96,62739,62740,62742,62745,62747,62749,62751,62753,62756],{"class":98,"line":32815},[96,62741,11205],{"class":102},[96,62743,62744],{"class":155}," tx",[96,62746,13548],{"class":102},[96,62748,54375],{"class":106},[96,62750,54378],{"class":1946},[96,62752,107],{"class":106},[96,62754,62755],{"class":211},"'#tx'",[96,62757,113],{"class":106},[96,62759,62760,62762,62765,62767,62769,62771,62773,62776],{"class":98,"line":32821},[96,62761,11205],{"class":102},[96,62763,62764],{"class":155}," total",[96,62766,13548],{"class":102},[96,62768,54375],{"class":106},[96,62770,54378],{"class":1946},[96,62772,107],{"class":106},[96,62774,62775],{"class":211},"'.total'",[96,62777,113],{"class":106},[96,62779,62780],{"class":98,"line":32830},[96,62781,62782],{"class":165},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[96,62784,62785,62788,62790,62792,62794,62796,62798],{"class":98,"line":32836},[96,62786,62787],{"class":106},"    tx.",[96,62789,57792],{"class":1946},[96,62791,107],{"class":106},[96,62793,61306],{"class":211},[96,62795,12419],{"class":106},[96,62797,54428],{"class":102},[96,62799,54431],{"class":106},[96,62801,62802,62805,62807],{"class":98,"line":32845},[96,62803,62804],{"class":106},"      total.style.opacity ",[96,62806,152],{"class":102},[96,62808,55678],{"class":155},[96,62810,62811],{"class":98,"line":32851},[96,62812,33440],{"class":106},[96,62814,62815],{"class":98,"line":32857},[96,62816,62817],{"class":165},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[96,62819,62820,62822,62824,62826,62828,62830,62832],{"class":98,"line":32866},[96,62821,62787],{"class":106},[96,62823,57792],{"class":1946},[96,62825,107],{"class":106},[96,62827,61367],{"class":211},[96,62829,12419],{"class":106},[96,62831,54428],{"class":102},[96,62833,54431],{"class":106},[96,62835,62836,62838,62840],{"class":98,"line":32872},[96,62837,62804],{"class":106},[96,62839,152],{"class":102},[96,62841,47312],{"class":155},[96,62843,62844],{"class":98,"line":32883},[96,62845,33440],{"class":106},[96,62847,62848],{"class":98,"line":32889},[96,62849,62850],{"class":165},"    \u002F\u002F 3. 检测用户输入\n",[96,62852,62853,62855,62857,62859,62862,62864,62866],{"class":98,"line":32908},[96,62854,62787],{"class":106},[96,62856,57792],{"class":1946},[96,62858,107],{"class":106},[96,62860,62861],{"class":211},"'input'",[96,62863,12419],{"class":106},[96,62865,54428],{"class":102},[96,62867,54431],{"class":106},[96,62869,62870],{"class":98,"line":32914},[96,62871,62872],{"class":165},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[96,62874,62875,62878,62880,62883,62886,62888,62891,62893,62895],{"class":98,"line":32925},[96,62876,62877],{"class":106},"      total.innerHTML ",[96,62879,152],{"class":102},[96,62881,62882],{"class":211}," `${",[96,62884,62885],{"class":106},"tx",[96,62887,665],{"class":211},[96,62889,62890],{"class":106},"value",[96,62892,665],{"class":211},[96,62894,51947],{"class":155},[96,62896,62897],{"class":211},"}\u002F200字`\n",[96,62899,62900],{"class":98,"line":32931},[96,62901,33440],{"class":106},[96,62903,62904],{"class":98,"line":32951},[96,62905,2383],{"emptyLinePlaceholder":23},[96,62907,62908],{"class":98,"line":32967},[96,62909,62910],{"class":165},"    \u002F\u002F const str = 'andy'\n",[96,62912,62913],{"class":98,"line":32973},[96,62914,62915],{"class":165},"    \u002F\u002F console.log(str.length)\n",[96,62917,62918,62920,62922],{"class":98,"line":32987},[96,62919,52396],{"class":106},[96,62921,51792],{"class":51279},[96,62923,51286],{"class":106},[96,62925,62926,62928,62930],{"class":98,"line":32993},[96,62927,51764],{"class":106},[96,62929,51779],{"class":51279},[96,62931,51286],{"class":106},[96,62933,62934],{"class":98,"line":32999},[96,62935,2383],{"emptyLinePlaceholder":23},[96,62937,62938,62940,62942],{"class":98,"line":33010},[96,62939,51764],{"class":106},[96,62941,50614],{"class":51279},[96,62943,51286],{"class":106},[21982,62945,62947],{"id":62946},"_3254-change事件","3.2.5.4 change事件",[14,62949,62950],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[14,62952,62953],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[14,62955,62956],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[87,62958,62960],{"className":50612,"code":62959,"language":50614,"meta":18,"style":18},"\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",[93,62961,62962,62972,62986,62990,62998,63012,63032,63044,63052,63056,63064,63078,63086,63104,63122,63134,63138,63146,63154,63158],{"__ignoreMap":18},[96,62963,62964,62966,62968,62970],{"class":98,"line":99},[96,62965,51276],{"class":106},[96,62967,51280],{"class":51279},[96,62969,51283],{"class":1946},[96,62971,51286],{"class":106},[96,62973,62974,62976,62978,62980,62982,62984],{"class":98,"line":19},[96,62975,1017],{"class":106},[96,62977,50614],{"class":51279},[96,62979,51295],{"class":1946},[96,62981,152],{"class":106},[96,62983,51300],{"class":211},[96,62985,51286],{"class":106},[96,62987,62988],{"class":98,"line":1162},[96,62989,2383],{"emptyLinePlaceholder":23},[96,62991,62992,62994,62996],{"class":98,"line":1177},[96,62993,1017],{"class":106},[96,62995,51313],{"class":51279},[96,62997,51286],{"class":106},[96,62999,63000,63002,63004,63006,63008,63010],{"class":98,"line":1183},[96,63001,52123],{"class":106},[96,63003,51323],{"class":51279},[96,63005,51326],{"class":1946},[96,63007,152],{"class":106},[96,63009,51331],{"class":211},[96,63011,51286],{"class":106},[96,63013,63014,63016,63018,63020,63022,63024,63026,63028,63030],{"class":98,"line":1197},[96,63015,52123],{"class":106},[96,63017,51323],{"class":51279},[96,63019,14904],{"class":1946},[96,63021,152],{"class":106},[96,63023,51370],{"class":211},[96,63025,51350],{"class":1946},[96,63027,152],{"class":106},[96,63029,51377],{"class":211},[96,63031,51286],{"class":106},[96,63033,63034,63036,63038,63040,63042],{"class":98,"line":1203},[96,63035,52123],{"class":106},[96,63037,51386],{"class":51279},[96,63039,51389],{"class":106},[96,63041,51386],{"class":51279},[96,63043,51286],{"class":106},[96,63045,63046,63048,63050],{"class":98,"line":1294},[96,63047,51764],{"class":106},[96,63049,51313],{"class":51279},[96,63051,51286],{"class":106},[96,63053,63054],{"class":98,"line":1300},[96,63055,2383],{"emptyLinePlaceholder":23},[96,63057,63058,63060,63062],{"class":98,"line":1312},[96,63059,1017],{"class":106},[96,63061,51779],{"class":51279},[96,63063,51286],{"class":106},[96,63065,63066,63068,63070,63072,63074,63076],{"class":98,"line":1595},[96,63067,52123],{"class":106},[96,63069,53800],{"class":51279},[96,63071,53803],{"class":1946},[96,63073,152],{"class":106},[96,63075,62678],{"class":211},[96,63077,51286],{"class":106},[96,63079,63080,63082,63084],{"class":98,"line":1600},[96,63081,52123],{"class":106},[96,63083,51792],{"class":51279},[96,63085,51286],{"class":106},[96,63087,63088,63090,63092,63094,63096,63098,63100,63102],{"class":98,"line":1606},[96,63089,11205],{"class":102},[96,63091,60584],{"class":155},[96,63093,13548],{"class":102},[96,63095,54375],{"class":106},[96,63097,54378],{"class":1946},[96,63099,107],{"class":106},[96,63101,62861],{"class":211},[96,63103,113],{"class":106},[96,63105,63106,63109,63111,63113,63116,63118,63120],{"class":98,"line":1611},[96,63107,63108],{"class":106},"    input.",[96,63110,57792],{"class":1946},[96,63112,107],{"class":106},[96,63114,63115],{"class":211},"'change'",[96,63117,12419],{"class":106},[96,63119,54428],{"class":102},[96,63121,54431],{"class":106},[96,63123,63124,63126,63128,63130,63132],{"class":98,"line":1625},[96,63125,58223],{"class":106},[96,63127,58226],{"class":1946},[96,63129,107],{"class":106},[96,63131,700],{"class":155},[96,63133,113],{"class":106},[96,63135,63136],{"class":98,"line":1630},[96,63137,33440],{"class":106},[96,63139,63140,63142,63144],{"class":98,"line":1636},[96,63141,52396],{"class":106},[96,63143,51792],{"class":51279},[96,63145,51286],{"class":106},[96,63147,63148,63150,63152],{"class":98,"line":1657},[96,63149,51764],{"class":106},[96,63151,51779],{"class":51279},[96,63153,51286],{"class":106},[96,63155,63156],{"class":98,"line":1662},[96,63157,2383],{"emptyLinePlaceholder":23},[96,63159,63160,63162,63164],{"class":98,"line":1676},[96,63161,51764],{"class":106},[96,63163,50614],{"class":51279},[96,63165,51286],{"class":106},[14,63167,63168],{},"总结：内容发生改变才回去触发",[67,63170,63172],{"id":63171},"_326-事件对象","3.2.6 事件对象",[21982,63174,63176],{"id":63175},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[14,63178,63179],{},[1445,63180],{"alt":18,"src":63181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[14,63183,63184],{},[1445,63185],{"alt":18,"src":63186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[14,63188,63189],{},"点击一次，就输出了事件对象，它是个对象",[14,63191,63192],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[14,63194,63195],{},[1445,63196],{"alt":18,"src":63197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[21982,63199,63201],{"id":63200},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[14,63203,63204],{},[1445,63205],{"alt":18,"src":63206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[14,63208,63209],{},"实现按特殊字符才是实现打印输出效果：",[87,63211,63213],{"className":53046,"code":63212,"language":53048,"meta":18,"style":18},"\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",[93,63214,63215,63223,63228,63242,63250,63255,63260,63265,63270,63275,63280,63285,63290,63295,63299,63303,63311],{"__ignoreMap":18},[96,63216,63217,63219,63221],{"class":98,"line":99},[96,63218,1017],{"class":106},[96,63220,51779],{"class":51279},[96,63222,51286],{"class":106},[96,63224,63225],{"class":98,"line":19},[96,63226,63227],{"class":165},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[96,63229,63230,63232,63234,63236,63238,63240],{"class":98,"line":1162},[96,63231,52123],{"class":106},[96,63233,53800],{"class":51279},[96,63235,53803],{"class":1946},[96,63237,152],{"class":106},[96,63239,62678],{"class":211},[96,63241,51286],{"class":106},[96,63243,63244,63246,63248],{"class":98,"line":1177},[96,63245,52123],{"class":106},[96,63247,51792],{"class":51279},[96,63249,51286],{"class":106},[96,63251,63252],{"class":98,"line":1183},[96,63253,63254],{"class":106},"    \u002F\u002F const btn = document.querySelector('button')\n",[96,63256,63257],{"class":98,"line":1197},[96,63258,63259],{"class":106},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[96,63261,63262],{"class":98,"line":1203},[96,63263,63264],{"class":106},"    \u002F\u002F   console.log(e);\n",[96,63266,63267],{"class":98,"line":1294},[96,63268,63269],{"class":106},"    \u002F\u002F })\n",[96,63271,63272],{"class":98,"line":1300},[96,63273,63274],{"class":106},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[96,63276,63277],{"class":98,"line":1312},[96,63278,63279],{"class":106},"    const input = document.querySelector('input')\n",[96,63281,63282],{"class":98,"line":1595},[96,63283,63284],{"class":106},"    input.addEventListener('keyup', function (e) {\n",[96,63286,63287],{"class":98,"line":1600},[96,63288,63289],{"class":106},"      if (e.key === 'Enter') {\n",[96,63291,63292],{"class":98,"line":1606},[96,63293,63294],{"class":106},"        console.log('我按下了回车键')\n",[96,63296,63297],{"class":98,"line":1611},[96,63298,52377],{"class":106},[96,63300,63301],{"class":98,"line":1625},[96,63302,33440],{"class":106},[96,63304,63305,63307,63309],{"class":98,"line":1630},[96,63306,52396],{"class":106},[96,63308,51792],{"class":51279},[96,63310,51286],{"class":106},[96,63312,63313,63315,63317],{"class":98,"line":1636},[96,63314,51764],{"class":106},[96,63316,51779],{"class":51279},[96,63318,51286],{"class":106},[21982,63320,63322],{"id":63321},"_3263-trim方法","3.2.6.3 trim方法",[14,63324,63325],{},[1445,63326],{"alt":18,"src":63327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[14,63329,63330],{},[1445,63331],{"alt":18,"src":63332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[14,63334,63335],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[14,63337,63338],{},"str.trim()",[67,63340,63342],{"id":63341},"_327-环境对象","3.2.7 环境对象",[14,63344,63345],{},[1445,63346],{"alt":18,"src":63347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[14,63349,63350],{},[1445,63351],{"alt":18,"src":63352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[14,63354,63355],{},[1445,63356],{"alt":18,"src":63357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[14,63359,63360],{},"实际函数调用是window.fn()",[14,63362,63363],{},"普通函数里面this指向的是window",[1114,63365,63366,63369,63372],{},[53,63367,63368],{},"在普通函数下，this指向的是window",[53,63370,63371],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[53,63373,63374],{},"箭头函数没有this",[14,63376,63377],{},"粗略记法就是：谁调用，this就指向谁",[14,63379,63380],{},[1445,63381],{"alt":18,"src":63382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[14,63384,63385],{},[1445,63386],{"alt":18,"src":63387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[14,63389,63390],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[14,63392,63393],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[87,63395,63397],{"className":53046,"code":63396,"language":53048,"meta":18,"style":18},"\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",[93,63398,63399,63407,63419,63427,63432,63437,63442,63447,63451,63459],{"__ignoreMap":18},[96,63400,63401,63403,63405],{"class":98,"line":99},[96,63402,1017],{"class":106},[96,63404,51779],{"class":51279},[96,63406,51286],{"class":106},[96,63408,63409,63411,63413,63415,63417],{"class":98,"line":19},[96,63410,52123],{"class":106},[96,63412,53866],{"class":51279},[96,63414,53872],{"class":106},[96,63416,53866],{"class":51279},[96,63418,51286],{"class":106},[96,63420,63421,63423,63425],{"class":98,"line":1162},[96,63422,52123],{"class":106},[96,63424,51792],{"class":51279},[96,63426,51286],{"class":106},[96,63428,63429],{"class":98,"line":1177},[96,63430,63431],{"class":106},"    const button = document.querySelector('button')\n",[96,63433,63434],{"class":98,"line":1183},[96,63435,63436],{"class":106},"    button.addEventListener('click', function () {\n",[96,63438,63439],{"class":98,"line":1197},[96,63440,63441],{"class":106},"      \u002F\u002F console.log(this);\n",[96,63443,63444],{"class":98,"line":1203},[96,63445,63446],{"class":106},"      this.style.color = 'pink'\n",[96,63448,63449],{"class":98,"line":1294},[96,63450,33440],{"class":106},[96,63452,63453,63455,63457],{"class":98,"line":1300},[96,63454,52396],{"class":106},[96,63456,51792],{"class":51279},[96,63458,51286],{"class":106},[96,63460,63461,63463,63465],{"class":98,"line":1312},[96,63462,51764],{"class":106},[96,63464,51779],{"class":51279},[96,63466,51286],{"class":106},[67,63468,63470],{"id":63469},"_328-回调函数","3.2.8 回调函数",[14,63472,63473],{},[1445,63474],{"alt":18,"src":63475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[14,63477,63478],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[14,63480,11316],{},[1114,63482,63483,63486,63489],{},[53,63484,63485],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[53,63487,63488],{},"回调函数本质还是函数，只不过把它当成参数使用",[53,63490,63491],{},"使用匿名函数做为回调函数比较常见",[67,63493,63495],{"id":63494},"_329-tab栏切换","3.2.9 tab栏切换",[14,63497,63498],{},[1445,63499],{"alt":18,"src":63500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[87,63502,63504],{"className":50612,"code":63503,"language":50614,"meta":18,"style":18},"\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",[93,63505,63506,63516,63530,63534,63542,63556,63576,63596,63609,63617,63623,63633,63643,63647,63651,63658,63671,63684,63696,63712,63716,63720,63727,63739,63751,63763,63773,63783,63787,63791,63800,63812,63823,63835,63839,63843,63851,63861,63871,63881,63885,63889,63899,63913,63925,63929,63933,63945,63956,63973,63983,63987,63991,64006,64017,64027,64031,64035,64042,64057,64061,64065,64073,64083,64087,64091,64100,64110,64114,64122,64130,64134,64142,64157,64172,64185,64193,64227,64254,64281,64308,64335,64343,64351,64366,64403,64438,64473,64508,64543,64551,64559,64567,64572,64577,64597,64602,64631,64636,64641,64659,64664,64669,64674,64696,64701,64717,64721,64726,64731,64752,64757,64786,64790,64795,64799,64807,64815,64819],{"__ignoreMap":18},[96,63507,63508,63510,63512,63514],{"class":98,"line":99},[96,63509,51276],{"class":106},[96,63511,51280],{"class":51279},[96,63513,51283],{"class":1946},[96,63515,51286],{"class":106},[96,63517,63518,63520,63522,63524,63526,63528],{"class":98,"line":19},[96,63519,1017],{"class":106},[96,63521,50614],{"class":51279},[96,63523,51295],{"class":1946},[96,63525,152],{"class":106},[96,63527,51300],{"class":211},[96,63529,51286],{"class":106},[96,63531,63532],{"class":98,"line":1162},[96,63533,2383],{"emptyLinePlaceholder":23},[96,63535,63536,63538,63540],{"class":98,"line":1177},[96,63537,1017],{"class":106},[96,63539,51313],{"class":51279},[96,63541,51286],{"class":106},[96,63543,63544,63546,63548,63550,63552,63554],{"class":98,"line":1183},[96,63545,52123],{"class":106},[96,63547,51323],{"class":51279},[96,63549,51326],{"class":1946},[96,63551,152],{"class":106},[96,63553,51331],{"class":211},[96,63555,59106],{"class":106},[96,63557,63558,63560,63562,63564,63566,63568,63570,63572,63574],{"class":98,"line":1197},[96,63559,52123],{"class":106},[96,63561,51323],{"class":51279},[96,63563,51342],{"class":1946},[96,63565,152],{"class":106},[96,63567,51347],{"class":211},[96,63569,51350],{"class":1946},[96,63571,152],{"class":106},[96,63573,51355],{"class":211},[96,63575,59106],{"class":106},[96,63577,63578,63580,63582,63584,63586,63588,63590,63592,63594],{"class":98,"line":1203},[96,63579,52123],{"class":106},[96,63581,51323],{"class":51279},[96,63583,14904],{"class":1946},[96,63585,152],{"class":106},[96,63587,51370],{"class":211},[96,63589,51350],{"class":1946},[96,63591,152],{"class":106},[96,63593,51377],{"class":211},[96,63595,59106],{"class":106},[96,63597,63598,63600,63602,63605,63607],{"class":98,"line":1294},[96,63599,52123],{"class":106},[96,63601,51386],{"class":51279},[96,63603,63604],{"class":106},">tab栏切换\u003C\u002F",[96,63606,51386],{"class":51279},[96,63608,51286],{"class":106},[96,63610,63611,63613,63615],{"class":98,"line":1300},[96,63612,52123],{"class":106},[96,63614,5110],{"class":51279},[96,63616,51286],{"class":106},[96,63618,63619,63621],{"class":98,"line":1312},[96,63620,6387],{"class":51279},[96,63622,15556],{"class":106},[96,63624,63625,63627,63629,63631],{"class":98,"line":1595},[96,63626,54685],{"class":155},[96,63628,51416],{"class":106},[96,63630,298],{"class":155},[96,63632,1273],{"class":106},[96,63634,63635,63637,63639,63641],{"class":98,"line":1600},[96,63636,54674],{"class":155},[96,63638,51416],{"class":106},[96,63640,298],{"class":155},[96,63642,1273],{"class":106},[96,63644,63645],{"class":98,"line":1606},[96,63646,2170],{"class":106},[96,63648,63649],{"class":98,"line":1611},[96,63650,2383],{"emptyLinePlaceholder":23},[96,63652,63653,63656],{"class":98,"line":1625},[96,63654,63655],{"class":1946},"    .tab",[96,63657,15556],{"class":106},[96,63659,63660,63662,63664,63667,63669],{"class":98,"line":1630},[96,63661,54750],{"class":155},[96,63663,51416],{"class":106},[96,63665,63666],{"class":155},"590",[96,63668,51471],{"class":102},[96,63670,1273],{"class":106},[96,63672,63673,63675,63677,63680,63682],{"class":98,"line":1636},[96,63674,54764],{"class":155},[96,63676,51416],{"class":106},[96,63678,63679],{"class":155},"340",[96,63681,51471],{"class":102},[96,63683,1273],{"class":106},[96,63685,63686,63688,63690,63692,63694],{"class":98,"line":1657},[96,63687,54685],{"class":155},[96,63689,51416],{"class":106},[96,63691,807],{"class":155},[96,63693,51471],{"class":102},[96,63695,1273],{"class":106},[96,63697,63698,63700,63702,63704,63706,63708,63710],{"class":98,"line":1662},[96,63699,61956],{"class":155},[96,63701,51416],{"class":106},[96,63703,324],{"class":155},[96,63705,51471],{"class":102},[96,63707,51500],{"class":155},[96,63709,62223],{"class":155},[96,63711,1273],{"class":106},[96,63713,63714],{"class":98,"line":1676},[96,63715,2170],{"class":106},[96,63717,63718],{"class":98,"line":1681},[96,63719,2383],{"emptyLinePlaceholder":23},[96,63721,63722,63725],{"class":98,"line":1710},[96,63723,63724],{"class":1946},"    .tab-nav",[96,63726,15556],{"class":106},[96,63728,63729,63731,63733,63735,63737],{"class":98,"line":1715},[96,63730,54750],{"class":155},[96,63732,51416],{"class":106},[96,63734,418],{"class":155},[96,63736,435],{"class":102},[96,63738,1273],{"class":106},[96,63740,63741,63743,63745,63747,63749],{"class":98,"line":1732},[96,63742,54764],{"class":155},[96,63744,51416],{"class":106},[96,63746,1014],{"class":155},[96,63748,51471],{"class":102},[96,63750,1273],{"class":106},[96,63752,63753,63755,63757,63759,63761],{"class":98,"line":1737},[96,63754,57338],{"class":155},[96,63756,51416],{"class":106},[96,63758,1014],{"class":155},[96,63760,51471],{"class":102},[96,63762,1273],{"class":106},[96,63764,63765,63767,63769,63771],{"class":98,"line":1742},[96,63766,54988],{"class":155},[96,63768,51416],{"class":106},[96,63770,51456],{"class":155},[96,63772,1273],{"class":106},[96,63774,63775,63777,63779,63781],{"class":98,"line":1747},[96,63776,54999],{"class":155},[96,63778,51416],{"class":106},[96,63780,51647],{"class":155},[96,63782,1273],{"class":106},[96,63784,63785],{"class":98,"line":1761},[96,63786,2170],{"class":106},[96,63788,63789],{"class":98,"line":1766},[96,63790,2383],{"emptyLinePlaceholder":23},[96,63792,63793,63795,63798],{"class":98,"line":2560},[96,63794,63724],{"class":1946},[96,63796,63797],{"class":51279}," h3",[96,63799,15556],{"class":106},[96,63801,63802,63804,63806,63808,63810],{"class":98,"line":2574},[96,63803,54901],{"class":155},[96,63805,51416],{"class":106},[96,63807,907],{"class":155},[96,63809,51471],{"class":102},[96,63811,1273],{"class":106},[96,63813,63814,63816,63818,63821],{"class":98,"line":2582},[96,63815,62313],{"class":155},[96,63817,51416],{"class":106},[96,63819,63820],{"class":155},"normal",[96,63822,1273],{"class":106},[96,63824,63825,63827,63829,63831,63833],{"class":98,"line":2587},[96,63826,61979],{"class":155},[96,63828,51416],{"class":106},[96,63830,807],{"class":155},[96,63832,51471],{"class":102},[96,63834,1273],{"class":106},[96,63836,63837],{"class":98,"line":2593},[96,63838,2170],{"class":106},[96,63840,63841],{"class":98,"line":2599},[96,63842,2383],{"emptyLinePlaceholder":23},[96,63844,63845,63847,63849],{"class":98,"line":2604},[96,63846,63724],{"class":1946},[96,63848,61271],{"class":51279},[96,63850,15556],{"class":106},[96,63852,63853,63855,63857,63859],{"class":98,"line":7932},[96,63854,54711],{"class":155},[96,63856,51416],{"class":106},[96,63858,54716],{"class":155},[96,63860,1273],{"class":106},[96,63862,63863,63865,63867,63869],{"class":98,"line":7956},[96,63864,54988],{"class":155},[96,63866,51416],{"class":106},[96,63868,51456],{"class":155},[96,63870,1273],{"class":106},[96,63872,63873,63875,63877,63879],{"class":98,"line":7961},[96,63874,54999],{"class":155},[96,63876,51416],{"class":106},[96,63878,51559],{"class":155},[96,63880,1273],{"class":106},[96,63882,63883],{"class":98,"line":7967},[96,63884,2170],{"class":106},[96,63886,63887],{"class":98,"line":7994},[96,63888,2383],{"emptyLinePlaceholder":23},[96,63890,63891,63893,63895,63897],{"class":98,"line":7999},[96,63892,63724],{"class":1946},[96,63894,61271],{"class":51279},[96,63896,55054],{"class":51279},[96,63898,15556],{"class":106},[96,63900,63901,63903,63905,63907,63909,63911],{"class":98,"line":8005},[96,63902,54685],{"class":155},[96,63904,51416],{"class":106},[96,63906,298],{"class":155},[96,63908,8934],{"class":155},[96,63910,51471],{"class":102},[96,63912,1273],{"class":106},[96,63914,63915,63917,63919,63921,63923],{"class":98,"line":8017},[96,63916,54901],{"class":155},[96,63918,51416],{"class":106},[96,63920,656],{"class":155},[96,63922,51471],{"class":102},[96,63924,1273],{"class":106},[96,63926,63927],{"class":98,"line":8029},[96,63928,2170],{"class":106},[96,63930,63931],{"class":98,"line":8041},[96,63932,2383],{"emptyLinePlaceholder":23},[96,63934,63935,63937,63939,63941,63943],{"class":98,"line":9700},[96,63936,63724],{"class":1946},[96,63938,61271],{"class":51279},[96,63940,55054],{"class":51279},[96,63942,1381],{"class":51279},[96,63944,15556],{"class":106},[96,63946,63947,63950,63952,63954],{"class":98,"line":9725},[96,63948,63949],{"class":155},"      text-decoration",[96,63951,51416],{"class":106},[96,63953,54716],{"class":155},[96,63955,1273],{"class":106},[96,63957,63958,63960,63962,63964,63966,63968,63971],{"class":98,"line":9748},[96,63959,62211],{"class":155},[96,63961,51416],{"class":106},[96,63963,184],{"class":155},[96,63965,51471],{"class":102},[96,63967,51500],{"class":155},[96,63969,63970],{"class":155}," transparent",[96,63972,1273],{"class":106},[96,63974,63975,63977,63979,63981],{"class":98,"line":9772},[96,63976,57395],{"class":155},[96,63978,51416],{"class":106},[96,63980,62348],{"class":155},[96,63982,1273],{"class":106},[96,63984,63985],{"class":98,"line":9777},[96,63986,2170],{"class":106},[96,63988,63989],{"class":98,"line":9782},[96,63990,2383],{"emptyLinePlaceholder":23},[96,63992,63993,63995,63997,63999,64001,64004],{"class":98,"line":9787},[96,63994,63724],{"class":1946},[96,63996,61271],{"class":51279},[96,63998,55054],{"class":51279},[96,64000,1381],{"class":51279},[96,64002,64003],{"class":1946},".active",[96,64005,15556],{"class":106},[96,64007,64008,64010,64012,64015],{"class":98,"line":9796},[96,64009,61770],{"class":155},[96,64011,51416],{"class":106},[96,64013,64014],{"class":155},"#e1251b",[96,64016,1273],{"class":106},[96,64018,64019,64021,64023,64025],{"class":98,"line":9801},[96,64020,57395],{"class":155},[96,64022,51416],{"class":106},[96,64024,64014],{"class":155},[96,64026,1273],{"class":106},[96,64028,64029],{"class":98,"line":9807},[96,64030,2170],{"class":106},[96,64032,64033],{"class":98,"line":9828},[96,64034,2383],{"emptyLinePlaceholder":23},[96,64036,64037,64040],{"class":98,"line":9834},[96,64038,64039],{"class":1946},"    .tab-content",[96,64041,15556],{"class":106},[96,64043,64044,64046,64048,64050,64053,64055],{"class":98,"line":9848},[96,64045,54674],{"class":155},[96,64047,51416],{"class":106},[96,64049,298],{"class":155},[96,64051,64052],{"class":155}," 16",[96,64054,51471],{"class":102},[96,64056,1273],{"class":106},[96,64058,64059],{"class":98,"line":9854},[96,64060,2170],{"class":106},[96,64062,64063],{"class":98,"line":9881},[96,64064,2383],{"emptyLinePlaceholder":23},[96,64066,64067,64069,64071],{"class":98,"line":9890},[96,64068,64039],{"class":1946},[96,64070,62153],{"class":1946},[96,64072,15556],{"class":106},[96,64074,64075,64077,64079,64081],{"class":98,"line":9896},[96,64076,54988],{"class":155},[96,64078,51416],{"class":106},[96,64080,54716],{"class":155},[96,64082,1273],{"class":106},[96,64084,64085],{"class":98,"line":9904},[96,64086,2170],{"class":106},[96,64088,64089],{"class":98,"line":9909},[96,64090,2383],{"emptyLinePlaceholder":23},[96,64092,64093,64095,64098],{"class":98,"line":16588},[96,64094,64039],{"class":1946},[96,64096,64097],{"class":1946}," .item.active",[96,64099,15556],{"class":106},[96,64101,64102,64104,64106,64108],{"class":98,"line":16594},[96,64103,54988],{"class":155},[96,64105,51416],{"class":106},[96,64107,60848],{"class":155},[96,64109,1273],{"class":106},[96,64111,64112],{"class":98,"line":16617},[96,64113,2170],{"class":106},[96,64115,64116,64118,64120],{"class":98,"line":16623},[96,64117,52396],{"class":106},[96,64119,5110],{"class":51279},[96,64121,51286],{"class":106},[96,64123,64124,64126,64128],{"class":98,"line":16646},[96,64125,51764],{"class":106},[96,64127,51313],{"class":51279},[96,64129,51286],{"class":106},[96,64131,64132],{"class":98,"line":16660},[96,64133,2383],{"emptyLinePlaceholder":23},[96,64135,64136,64138,64140],{"class":98,"line":16680},[96,64137,1017],{"class":106},[96,64139,51779],{"class":51279},[96,64141,51286],{"class":106},[96,64143,64144,64146,64148,64150,64152,64155],{"class":98,"line":16686},[96,64145,52123],{"class":106},[96,64147,51590],{"class":51279},[96,64149,53465],{"class":1946},[96,64151,152],{"class":106},[96,64153,64154],{"class":211},"\"tab\"",[96,64156,51286],{"class":106},[96,64158,64159,64161,64163,64165,64167,64170],{"class":98,"line":16697},[96,64160,51320],{"class":106},[96,64162,51590],{"class":51279},[96,64164,53465],{"class":1946},[96,64166,152],{"class":106},[96,64168,64169],{"class":211},"\"tab-nav\"",[96,64171,51286],{"class":106},[96,64173,64174,64176,64178,64181,64183],{"class":98,"line":16720},[96,64175,55213],{"class":106},[96,64177,67],{"class":51279},[96,64179,64180],{"class":106},">每日特价\u003C\u002F",[96,64182,67],{"class":51279},[96,64184,51286],{"class":106},[96,64186,64187,64189,64191],{"class":98,"line":16742},[96,64188,55213],{"class":106},[96,64190,1114],{"class":51279},[96,64192,51286],{"class":106},[96,64194,64195,64197,64199,64201,64203,64205,64207,64209,64211,64213,64216,64219,64221,64223,64225],{"class":98,"line":16747},[96,64196,55281],{"class":106},[96,64198,53],{"class":51279},[96,64200,61031],{"class":106},[96,64202,345],{"class":51279},[96,64204,53465],{"class":1946},[96,64206,152],{"class":106},[96,64208,59685],{"class":211},[96,64210,61036],{"class":1946},[96,64212,152],{"class":106},[96,64214,64215],{"class":211},"\"javascript:;\"",[96,64217,64218],{"class":106},">精选\u003C\u002F",[96,64220,345],{"class":51279},[96,64222,55293],{"class":106},[96,64224,53],{"class":51279},[96,64226,51286],{"class":106},[96,64228,64229,64231,64233,64235,64237,64239,64241,64243,64246,64248,64250,64252],{"class":98,"line":16753},[96,64230,55281],{"class":106},[96,64232,53],{"class":51279},[96,64234,61031],{"class":106},[96,64236,345],{"class":51279},[96,64238,61036],{"class":1946},[96,64240,152],{"class":106},[96,64242,64215],{"class":211},[96,64244,64245],{"class":106},">美食\u003C\u002F",[96,64247,345],{"class":51279},[96,64249,55293],{"class":106},[96,64251,53],{"class":51279},[96,64253,51286],{"class":106},[96,64255,64256,64258,64260,64262,64264,64266,64268,64270,64273,64275,64277,64279],{"class":98,"line":16767},[96,64257,55281],{"class":106},[96,64259,53],{"class":51279},[96,64261,61031],{"class":106},[96,64263,345],{"class":51279},[96,64265,61036],{"class":1946},[96,64267,152],{"class":106},[96,64269,64215],{"class":211},[96,64271,64272],{"class":106},">百货\u003C\u002F",[96,64274,345],{"class":51279},[96,64276,55293],{"class":106},[96,64278,53],{"class":51279},[96,64280,51286],{"class":106},[96,64282,64283,64285,64287,64289,64291,64293,64295,64297,64300,64302,64304,64306],{"class":98,"line":16780},[96,64284,55281],{"class":106},[96,64286,53],{"class":51279},[96,64288,61031],{"class":106},[96,64290,345],{"class":51279},[96,64292,61036],{"class":1946},[96,64294,152],{"class":106},[96,64296,64215],{"class":211},[96,64298,64299],{"class":106},">个护\u003C\u002F",[96,64301,345],{"class":51279},[96,64303,55293],{"class":106},[96,64305,53],{"class":51279},[96,64307,51286],{"class":106},[96,64309,64310,64312,64314,64316,64318,64320,64322,64324,64327,64329,64331,64333],{"class":98,"line":16785},[96,64311,55281],{"class":106},[96,64313,53],{"class":51279},[96,64315,61031],{"class":106},[96,64317,345],{"class":51279},[96,64319,61036],{"class":1946},[96,64321,152],{"class":106},[96,64323,64215],{"class":211},[96,64325,64326],{"class":106},">预告\u003C\u002F",[96,64328,345],{"class":51279},[96,64330,55293],{"class":106},[96,64332,53],{"class":51279},[96,64334,51286],{"class":106},[96,64336,64337,64339,64341],{"class":98,"line":16799},[96,64338,55386],{"class":106},[96,64340,1114],{"class":51279},[96,64342,51286],{"class":106},[96,64344,64345,64347,64349],{"class":98,"line":16804},[96,64346,51755],{"class":106},[96,64348,51590],{"class":51279},[96,64350,51286],{"class":106},[96,64352,64353,64355,64357,64359,64361,64364],{"class":98,"line":16810},[96,64354,51320],{"class":106},[96,64356,51590],{"class":51279},[96,64358,53465],{"class":1946},[96,64360,152],{"class":106},[96,64362,64363],{"class":211},"\"tab-content\"",[96,64365,51286],{"class":106},[96,64367,64368,64370,64372,64374,64376,64379,64381,64383,64385,64387,64390,64392,64394,64396,64399,64401],{"class":98,"line":16815},[96,64369,55213],{"class":106},[96,64371,51590],{"class":51279},[96,64373,53465],{"class":1946},[96,64375,152],{"class":106},[96,64377,64378],{"class":211},"\"item active\"",[96,64380,61031],{"class":106},[96,64382,1445],{"class":51279},[96,64384,55218],{"class":1946},[96,64386,152],{"class":106},[96,64388,64389],{"class":211},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[96,64391,55226],{"class":1946},[96,64393,152],{"class":106},[96,64395,7636],{"class":211},[96,64397,64398],{"class":106}," \u002F>\u003C\u002F",[96,64400,51590],{"class":51279},[96,64402,51286],{"class":106},[96,64404,64405,64407,64409,64411,64413,64415,64417,64419,64421,64423,64426,64428,64430,64432,64434,64436],{"class":98,"line":16829},[96,64406,55213],{"class":106},[96,64408,51590],{"class":51279},[96,64410,53465],{"class":1946},[96,64412,152],{"class":106},[96,64414,62602],{"class":211},[96,64416,61031],{"class":106},[96,64418,1445],{"class":51279},[96,64420,55218],{"class":1946},[96,64422,152],{"class":106},[96,64424,64425],{"class":211},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[96,64427,55226],{"class":1946},[96,64429,152],{"class":106},[96,64431,7636],{"class":211},[96,64433,64398],{"class":106},[96,64435,51590],{"class":51279},[96,64437,51286],{"class":106},[96,64439,64440,64442,64444,64446,64448,64450,64452,64454,64456,64458,64461,64463,64465,64467,64469,64471],{"class":98,"line":16834},[96,64441,55213],{"class":106},[96,64443,51590],{"class":51279},[96,64445,53465],{"class":1946},[96,64447,152],{"class":106},[96,64449,62602],{"class":211},[96,64451,61031],{"class":106},[96,64453,1445],{"class":51279},[96,64455,55218],{"class":1946},[96,64457,152],{"class":106},[96,64459,64460],{"class":211},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[96,64462,55226],{"class":1946},[96,64464,152],{"class":106},[96,64466,7636],{"class":211},[96,64468,64398],{"class":106},[96,64470,51590],{"class":51279},[96,64472,51286],{"class":106},[96,64474,64475,64477,64479,64481,64483,64485,64487,64489,64491,64493,64496,64498,64500,64502,64504,64506],{"class":98,"line":16839},[96,64476,55213],{"class":106},[96,64478,51590],{"class":51279},[96,64480,53465],{"class":1946},[96,64482,152],{"class":106},[96,64484,62602],{"class":211},[96,64486,61031],{"class":106},[96,64488,1445],{"class":51279},[96,64490,55218],{"class":1946},[96,64492,152],{"class":106},[96,64494,64495],{"class":211},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[96,64497,55226],{"class":1946},[96,64499,152],{"class":106},[96,64501,7636],{"class":211},[96,64503,64398],{"class":106},[96,64505,51590],{"class":51279},[96,64507,51286],{"class":106},[96,64509,64510,64512,64514,64516,64518,64520,64522,64524,64526,64528,64531,64533,64535,64537,64539,64541],{"class":98,"line":16853},[96,64511,55213],{"class":106},[96,64513,51590],{"class":51279},[96,64515,53465],{"class":1946},[96,64517,152],{"class":106},[96,64519,62602],{"class":211},[96,64521,61031],{"class":106},[96,64523,1445],{"class":51279},[96,64525,55218],{"class":1946},[96,64527,152],{"class":106},[96,64529,64530],{"class":211},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[96,64532,55226],{"class":1946},[96,64534,152],{"class":106},[96,64536,7636],{"class":211},[96,64538,64398],{"class":106},[96,64540,51590],{"class":51279},[96,64542,51286],{"class":106},[96,64544,64545,64547,64549],{"class":98,"line":16865},[96,64546,51755],{"class":106},[96,64548,51590],{"class":51279},[96,64550,51286],{"class":106},[96,64552,64553,64555,64557],{"class":98,"line":16870},[96,64554,52396],{"class":106},[96,64556,51590],{"class":51279},[96,64558,51286],{"class":106},[96,64560,64561,64563,64565],{"class":98,"line":16883},[96,64562,52123],{"class":106},[96,64564,51792],{"class":51279},[96,64566,51286],{"class":106},[96,64568,64569],{"class":98,"line":16888},[96,64570,64571],{"class":165},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[96,64573,64574],{"class":98,"line":16893},[96,64575,64576],{"class":165},"    \u002F\u002F 1.1 获取 a 元素 \n",[96,64578,64579,64581,64584,64586,64588,64590,64592,64595],{"class":98,"line":16898},[96,64580,11205],{"class":102},[96,64582,64583],{"class":155}," as",[96,64585,13548],{"class":102},[96,64587,54375],{"class":106},[96,64589,55660],{"class":1946},[96,64591,107],{"class":106},[96,64593,64594],{"class":211},"'.tab-nav a'",[96,64596,113],{"class":106},[96,64598,64599],{"class":98,"line":16911},[96,64600,64601],{"class":165},"    \u002F\u002F console.log(as) \n",[96,64603,64604,64606,64608,64610,64612,64614,64616,64618,64620,64623,64625,64627,64629],{"class":98,"line":16916},[96,64605,3184],{"class":102},[96,64607,1641],{"class":106},[96,64609,51826],{"class":102},[96,64611,9422],{"class":106},[96,64613,152],{"class":102},[96,64615,4076],{"class":155},[96,64617,9429],{"class":106},[96,64619,1017],{"class":102},[96,64621,64622],{"class":106}," as.",[96,64624,51947],{"class":155},[96,64626,3197],{"class":106},[96,64628,2275],{"class":102},[96,64630,12426],{"class":106},[96,64632,64633],{"class":98,"line":32612},[96,64634,64635],{"class":165},"      \u002F\u002F console.log(as[i])\n",[96,64637,64638],{"class":98,"line":32618},[96,64639,64640],{"class":165},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[96,64642,64643,64646,64648,64650,64653,64655,64657],{"class":98,"line":32624},[96,64644,64645],{"class":106},"      as[i].",[96,64647,57792],{"class":1946},[96,64649,107],{"class":106},[96,64651,64652],{"class":211},"'mouseenter'",[96,64654,12419],{"class":106},[96,64656,54428],{"class":102},[96,64658,54431],{"class":106},[96,64660,64661],{"class":98,"line":32630},[96,64662,64663],{"class":165},"        \u002F\u002F console.log('鼠标经过')\n",[96,64665,64666],{"class":98,"line":32636},[96,64667,64668],{"class":165},"        \u002F\u002F 排他思想  \n",[96,64670,64671],{"class":98,"line":32647},[96,64672,64673],{"class":165},"        \u002F\u002F 干掉别人 移除类active\n",[96,64675,64676,64678,64680,64682,64685,64687,64689,64691,64694],{"class":98,"line":32653},[96,64677,51904],{"class":106},[96,64679,54378],{"class":1946},[96,64681,107],{"class":106},[96,64683,64684],{"class":211},"'.tab-nav .active'",[96,64686,56982],{"class":106},[96,64688,56985],{"class":1946},[96,64690,107],{"class":106},[96,64692,64693],{"class":211},"'active'",[96,64695,113],{"class":106},[96,64697,64698],{"class":98,"line":32673},[96,64699,64700],{"class":165},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[96,64702,64703,64706,64709,64711,64713,64715],{"class":98,"line":32679},[96,64704,64705],{"class":155},"        this",[96,64707,64708],{"class":106},".classList.",[96,64710,5318],{"class":1946},[96,64712,107],{"class":106},[96,64714,64693],{"class":211},[96,64716,113],{"class":106},[96,64718,64719],{"class":98,"line":32690},[96,64720,2383],{"emptyLinePlaceholder":23},[96,64722,64723],{"class":98,"line":32696},[96,64724,64725],{"class":165},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[96,64727,64728],{"class":98,"line":32702},[96,64729,64730],{"class":165},"        \u002F\u002F 干掉别人\n",[96,64732,64733,64735,64737,64739,64742,64744,64746,64748,64750],{"class":98,"line":32708},[96,64734,51904],{"class":106},[96,64736,54378],{"class":1946},[96,64738,107],{"class":106},[96,64740,64741],{"class":211},"'.tab-content .active'",[96,64743,56982],{"class":106},[96,64745,56985],{"class":1946},[96,64747,107],{"class":106},[96,64749,64693],{"class":211},[96,64751,113],{"class":106},[96,64753,64754],{"class":98,"line":32714},[96,64755,64756],{"class":165},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[96,64758,64759,64761,64763,64765,64768,64770,64772,64774,64776,64778,64780,64782,64784],{"class":98,"line":32720},[96,64760,51904],{"class":106},[96,64762,54378],{"class":1946},[96,64764,107],{"class":106},[96,64766,64767],{"class":211},"`.tab-content .item:nth-child(${",[96,64769,548],{"class":106},[96,64771,45545],{"class":102},[96,64773,25097],{"class":155},[96,64775,57011],{"class":211},[96,64777,56982],{"class":106},[96,64779,5318],{"class":1946},[96,64781,107],{"class":106},[96,64783,64693],{"class":211},[96,64785,113],{"class":106},[96,64787,64788],{"class":98,"line":32726},[96,64789,2383],{"emptyLinePlaceholder":23},[96,64791,64792],{"class":98,"line":32732},[96,64793,64794],{"class":106},"      })\n",[96,64796,64797],{"class":98,"line":32752},[96,64798,2170],{"class":106},[96,64800,64801,64803,64805],{"class":98,"line":32758},[96,64802,52396],{"class":106},[96,64804,51792],{"class":51279},[96,64806,51286],{"class":106},[96,64808,64809,64811,64813],{"class":98,"line":32774},[96,64810,51764],{"class":106},[96,64812,51779],{"class":51279},[96,64814,51286],{"class":106},[96,64816,64817],{"class":98,"line":32780},[96,64818,2383],{"emptyLinePlaceholder":23},[96,64820,64821,64823,64825],{"class":98,"line":32794},[96,64822,51764],{"class":106},[96,64824,50614],{"class":51279},[96,64826,51286],{"class":106},[14,64828,64829],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[14,64831,64832],{},"在监听事件中，this指向的就是他的调用者",[14,64834,64835],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[14,64837,53699],{},[14,64839,64840],{},"(function () {",[14,64842,64843],{},"const list = document.querySelector('.xtx-elevator-list')",[14,64845,64846],{},"list.addEventListener('click', function (e) {",[14,64848,64849],{},"if (e.target.tagName === 'A') {",[14,64851,64852],{},"\u002F\u002F 排他思想",[14,64854,64855],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[14,64857,64858],{},"const old = document.querySelector('.xtx-elevator-list .active')",[14,64860,64861],{},"\u002F\u002F console.log(old);",[14,64863,64864],{},"\u002F\u002F 判断",[14,64866,64867],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[14,64869,64870],{},"if (old) old.classList.remove('active')",[14,64872,64873],{},"e.target.classList.add('active')",[14,64875,1053],{},[14,64877,52443],{},[14,64879,64880],{},"})();",[67,64882,64884],{"id":64883},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[87,64886,64888],{"className":50612,"code":64887,"language":50614,"meta":18,"style":18},"\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",[93,64889,64890,64900,64904,64912,64916,64930,64944,64956,64964,64970,64980,64990,64994,64998,65005,65017,65028,65045,65058,65072,65082,65086,65090,65097,65108,65126,65136,65148,65152,65156,65163,65180,65191,65203,65207,65211,65218,65230,65234,65242,65250,65254,65262,65270,65278,65293,65337,65345,65358,65371,65384,65392,65400,65408,65436,65444,65456,65469,65482,65490,65498,65506,65532,65540,65553,65565,65578,65586,65594,65602,65628,65636,65649,65661,65674,65682,65690,65698,65703,65723,65728,65748,65753,65770,65775,65783,65788,65817,65830,65834,65838,65843,65847,65875,65880,65897,65902,65907,65912,65917,65943,65947,65951,65959,65967,65971],{"__ignoreMap":18},[96,64891,64892,64894,64896,64898],{"class":98,"line":99},[96,64893,51276],{"class":106},[96,64895,51280],{"class":51279},[96,64897,51283],{"class":1946},[96,64899,51286],{"class":106},[96,64901,64902],{"class":98,"line":19},[96,64903,2383],{"emptyLinePlaceholder":23},[96,64905,64906,64908,64910],{"class":98,"line":1162},[96,64907,1017],{"class":106},[96,64909,50614],{"class":51279},[96,64911,51286],{"class":106},[96,64913,64914],{"class":98,"line":1177},[96,64915,2383],{"emptyLinePlaceholder":23},[96,64917,64918,64920,64922,64924,64926,64928],{"class":98,"line":1183},[96,64919,1017],{"class":106},[96,64921,51313],{"class":51279},[96,64923,51295],{"class":1946},[96,64925,152],{"class":106},[96,64927,51300],{"class":211},[96,64929,51286],{"class":106},[96,64931,64932,64934,64936,64938,64940,64942],{"class":98,"line":1197},[96,64933,52123],{"class":106},[96,64935,51323],{"class":51279},[96,64937,51326],{"class":1946},[96,64939,152],{"class":106},[96,64941,51331],{"class":211},[96,64943,51286],{"class":106},[96,64945,64946,64948,64950,64952,64954],{"class":98,"line":1203},[96,64947,52123],{"class":106},[96,64949,51386],{"class":51279},[96,64951,55293],{"class":106},[96,64953,51386],{"class":51279},[96,64955,51286],{"class":106},[96,64957,64958,64960,64962],{"class":98,"line":1294},[96,64959,52123],{"class":106},[96,64961,5110],{"class":51279},[96,64963,51286],{"class":106},[96,64965,64966,64968],{"class":98,"line":1300},[96,64967,6387],{"class":51279},[96,64969,15556],{"class":106},[96,64971,64972,64974,64976,64978],{"class":98,"line":1312},[96,64973,54685],{"class":155},[96,64975,51416],{"class":106},[96,64977,298],{"class":155},[96,64979,1273],{"class":106},[96,64981,64982,64984,64986,64988],{"class":98,"line":1595},[96,64983,54674],{"class":155},[96,64985,51416],{"class":106},[96,64987,298],{"class":155},[96,64989,1273],{"class":106},[96,64991,64992],{"class":98,"line":1600},[96,64993,2170],{"class":106},[96,64995,64996],{"class":98,"line":1606},[96,64997,2383],{"emptyLinePlaceholder":23},[96,64999,65000,65003],{"class":98,"line":1611},[96,65001,65002],{"class":51279},"    table",[96,65004,15556],{"class":106},[96,65006,65007,65010,65012,65015],{"class":98,"line":1625},[96,65008,65009],{"class":155},"      border-collapse",[96,65011,51416],{"class":106},[96,65013,65014],{"class":155},"collapse",[96,65016,1273],{"class":106},[96,65018,65019,65022,65024,65026],{"class":98,"line":1630},[96,65020,65021],{"class":155},"      border-spacing",[96,65023,51416],{"class":106},[96,65025,298],{"class":155},[96,65027,1273],{"class":106},[96,65029,65030,65032,65034,65036,65038,65040,65043],{"class":98,"line":1636},[96,65031,61956],{"class":155},[96,65033,51416],{"class":106},[96,65035,324],{"class":155},[96,65037,51471],{"class":102},[96,65039,51500],{"class":155},[96,65041,65042],{"class":155}," #c0c0c0",[96,65044,1273],{"class":106},[96,65046,65047,65049,65051,65054,65056],{"class":98,"line":1657},[96,65048,54750],{"class":155},[96,65050,51416],{"class":106},[96,65052,65053],{"class":155},"500",[96,65055,51471],{"class":102},[96,65057,1273],{"class":106},[96,65059,65060,65062,65064,65066,65068,65070],{"class":98,"line":1662},[96,65061,54685],{"class":155},[96,65063,51416],{"class":106},[96,65065,418],{"class":155},[96,65067,51471],{"class":102},[96,65069,51535],{"class":155},[96,65071,1273],{"class":106},[96,65073,65074,65076,65078,65080],{"class":98,"line":1676},[96,65075,57265],{"class":155},[96,65077,51416],{"class":106},[96,65079,51571],{"class":155},[96,65081,1273],{"class":106},[96,65083,65084],{"class":98,"line":1681},[96,65085,2170],{"class":106},[96,65087,65088],{"class":98,"line":1710},[96,65089,2383],{"emptyLinePlaceholder":23},[96,65091,65092,65095],{"class":98,"line":1715},[96,65093,65094],{"class":51279},"    th",[96,65096,15556],{"class":106},[96,65098,65099,65101,65103,65106],{"class":98,"line":1732},[96,65100,54863],{"class":155},[96,65102,51416],{"class":106},[96,65104,65105],{"class":155},"#09c",[96,65107,1273],{"class":106},[96,65109,65110,65113,65115,65117,65119,65121,65124],{"class":98,"line":1737},[96,65111,65112],{"class":155},"      font",[96,65114,51416],{"class":106},[96,65116,62318],{"class":155},[96,65118,64052],{"class":155},[96,65120,51471],{"class":102},[96,65122,65123],{"class":211}," \"微软雅黑\"",[96,65125,1273],{"class":106},[96,65127,65128,65130,65132,65134],{"class":98,"line":1742},[96,65129,57395],{"class":155},[96,65131,51416],{"class":106},[96,65133,60821],{"class":155},[96,65135,1273],{"class":106},[96,65137,65138,65140,65142,65144,65146],{"class":98,"line":1747},[96,65139,54764],{"class":155},[96,65141,51416],{"class":106},[96,65143,907],{"class":155},[96,65145,51471],{"class":102},[96,65147,1273],{"class":106},[96,65149,65150],{"class":98,"line":1761},[96,65151,2170],{"class":106},[96,65153,65154],{"class":98,"line":1766},[96,65155,2383],{"emptyLinePlaceholder":23},[96,65157,65158,65161],{"class":98,"line":2560},[96,65159,65160],{"class":51279},"    td",[96,65162,15556],{"class":106},[96,65164,65165,65167,65169,65171,65173,65175,65178],{"class":98,"line":2574},[96,65166,61956],{"class":155},[96,65168,51416],{"class":106},[96,65170,324],{"class":155},[96,65172,51471],{"class":102},[96,65174,51500],{"class":155},[96,65176,65177],{"class":155}," #d0d0d0",[96,65179,1273],{"class":106},[96,65181,65182,65184,65186,65189],{"class":98,"line":2582},[96,65183,57395],{"class":155},[96,65185,51416],{"class":106},[96,65187,65188],{"class":155},"#404060",[96,65190,1273],{"class":106},[96,65192,65193,65195,65197,65199,65201],{"class":98,"line":2587},[96,65194,54674],{"class":155},[96,65196,51416],{"class":106},[96,65198,553],{"class":155},[96,65200,51471],{"class":102},[96,65202,1273],{"class":106},[96,65204,65205],{"class":98,"line":2593},[96,65206,2170],{"class":106},[96,65208,65209],{"class":98,"line":2599},[96,65210,2383],{"emptyLinePlaceholder":23},[96,65212,65213,65216],{"class":98,"line":2604},[96,65214,65215],{"class":1946},"    .allCheck",[96,65217,15556],{"class":106},[96,65219,65220,65222,65224,65226,65228],{"class":98,"line":7932},[96,65221,54750],{"class":155},[96,65223,51416],{"class":106},[96,65225,719],{"class":155},[96,65227,51471],{"class":102},[96,65229,1273],{"class":106},[96,65231,65232],{"class":98,"line":7956},[96,65233,2170],{"class":106},[96,65235,65236,65238,65240],{"class":98,"line":7961},[96,65237,52396],{"class":106},[96,65239,5110],{"class":51279},[96,65241,51286],{"class":106},[96,65243,65244,65246,65248],{"class":98,"line":7967},[96,65245,51764],{"class":106},[96,65247,51313],{"class":51279},[96,65249,51286],{"class":106},[96,65251,65252],{"class":98,"line":7994},[96,65253,2383],{"emptyLinePlaceholder":23},[96,65255,65256,65258,65260],{"class":98,"line":7999},[96,65257,1017],{"class":106},[96,65259,51779],{"class":51279},[96,65261,51286],{"class":106},[96,65263,65264,65266,65268],{"class":98,"line":8005},[96,65265,52123],{"class":106},[96,65267,244],{"class":51279},[96,65269,51286],{"class":106},[96,65271,65272,65274,65276],{"class":98,"line":8017},[96,65273,51320],{"class":106},[96,65275,250],{"class":51279},[96,65277,51286],{"class":106},[96,65279,65280,65282,65284,65286,65288,65291],{"class":98,"line":8029},[96,65281,55213],{"class":106},[96,65283,253],{"class":51279},[96,65285,53465],{"class":1946},[96,65287,152],{"class":106},[96,65289,65290],{"class":211},"\"allCheck\"",[96,65292,51286],{"class":106},[96,65294,65295,65297,65299,65301,65303,65305,65307,65309,65311,65313,65315,65318,65321,65323,65325,65327,65330,65333,65335],{"class":98,"line":8041},[96,65296,55281],{"class":106},[96,65298,53800],{"class":51279},[96,65300,53803],{"class":1946},[96,65302,152],{"class":106},[96,65304,53808],{"class":211},[96,65306,14904],{"class":1946},[96,65308,152],{"class":106},[96,65310,7636],{"class":211},[96,65312,14943],{"class":1946},[96,65314,152],{"class":106},[96,65316,65317],{"class":211},"\"checkAll\"",[96,65319,65320],{"class":106},"> \u003C",[96,65322,96],{"class":51279},[96,65324,53465],{"class":1946},[96,65326,152],{"class":106},[96,65328,65329],{"class":211},"\"all\"",[96,65331,65332],{"class":106},">全选\u003C\u002F",[96,65334,96],{"class":51279},[96,65336,51286],{"class":106},[96,65338,65339,65341,65343],{"class":98,"line":9700},[96,65340,55386],{"class":106},[96,65342,253],{"class":51279},[96,65344,51286],{"class":106},[96,65346,65347,65349,65351,65354,65356],{"class":98,"line":9725},[96,65348,55213],{"class":106},[96,65350,253],{"class":51279},[96,65352,65353],{"class":106},">商品\u003C\u002F",[96,65355,253],{"class":51279},[96,65357,51286],{"class":106},[96,65359,65360,65362,65364,65367,65369],{"class":98,"line":9748},[96,65361,55213],{"class":106},[96,65363,253],{"class":51279},[96,65365,65366],{"class":106},">商家\u003C\u002F",[96,65368,253],{"class":51279},[96,65370,51286],{"class":106},[96,65372,65373,65375,65377,65380,65382],{"class":98,"line":9772},[96,65374,55213],{"class":106},[96,65376,253],{"class":51279},[96,65378,65379],{"class":106},">价格\u003C\u002F",[96,65381,253],{"class":51279},[96,65383,51286],{"class":106},[96,65385,65386,65388,65390],{"class":98,"line":9777},[96,65387,51755],{"class":106},[96,65389,250],{"class":51279},[96,65391,51286],{"class":106},[96,65393,65394,65396,65398],{"class":98,"line":9782},[96,65395,51320],{"class":106},[96,65397,250],{"class":51279},[96,65399,51286],{"class":106},[96,65401,65402,65404,65406],{"class":98,"line":9787},[96,65403,55213],{"class":106},[96,65405,296],{"class":51279},[96,65407,51286],{"class":106},[96,65409,65410,65412,65414,65416,65418,65420,65422,65424,65427,65429,65431,65434],{"class":98,"line":9796},[96,65411,55281],{"class":106},[96,65413,53800],{"class":51279},[96,65415,53803],{"class":1946},[96,65417,152],{"class":106},[96,65419,53808],{"class":211},[96,65421,14904],{"class":1946},[96,65423,152],{"class":106},[96,65425,65426],{"class":211},"\"check\"",[96,65428,53465],{"class":1946},[96,65430,152],{"class":106},[96,65432,65433],{"class":211},"\"ck\"",[96,65435,51286],{"class":106},[96,65437,65438,65440,65442],{"class":98,"line":9801},[96,65439,55386],{"class":106},[96,65441,296],{"class":51279},[96,65443,51286],{"class":106},[96,65445,65446,65448,65450,65452,65454],{"class":98,"line":9807},[96,65447,55213],{"class":106},[96,65449,296],{"class":51279},[96,65451,61152],{"class":106},[96,65453,296],{"class":51279},[96,65455,51286],{"class":106},[96,65457,65458,65460,65462,65465,65467],{"class":98,"line":9828},[96,65459,55213],{"class":106},[96,65461,296],{"class":51279},[96,65463,65464],{"class":106},">小米\u003C\u002F",[96,65466,296],{"class":51279},[96,65468,51286],{"class":106},[96,65470,65471,65473,65475,65478,65480],{"class":98,"line":9834},[96,65472,55213],{"class":106},[96,65474,296],{"class":51279},[96,65476,65477],{"class":106},">￥1999\u003C\u002F",[96,65479,296],{"class":51279},[96,65481,51286],{"class":106},[96,65483,65484,65486,65488],{"class":98,"line":9848},[96,65485,51755],{"class":106},[96,65487,250],{"class":51279},[96,65489,51286],{"class":106},[96,65491,65492,65494,65496],{"class":98,"line":9854},[96,65493,51320],{"class":106},[96,65495,250],{"class":51279},[96,65497,51286],{"class":106},[96,65499,65500,65502,65504],{"class":98,"line":9881},[96,65501,55213],{"class":106},[96,65503,296],{"class":51279},[96,65505,51286],{"class":106},[96,65507,65508,65510,65512,65514,65516,65518,65520,65522,65524,65526,65528,65530],{"class":98,"line":9890},[96,65509,55281],{"class":106},[96,65511,53800],{"class":51279},[96,65513,53803],{"class":1946},[96,65515,152],{"class":106},[96,65517,53808],{"class":211},[96,65519,14904],{"class":1946},[96,65521,152],{"class":106},[96,65523,65426],{"class":211},[96,65525,53465],{"class":1946},[96,65527,152],{"class":106},[96,65529,65433],{"class":211},[96,65531,51286],{"class":106},[96,65533,65534,65536,65538],{"class":98,"line":9896},[96,65535,55386],{"class":106},[96,65537,296],{"class":51279},[96,65539,51286],{"class":106},[96,65541,65542,65544,65546,65549,65551],{"class":98,"line":9904},[96,65543,55213],{"class":106},[96,65545,296],{"class":51279},[96,65547,65548],{"class":106},">小米净水器\u003C\u002F",[96,65550,296],{"class":51279},[96,65552,51286],{"class":106},[96,65554,65555,65557,65559,65561,65563],{"class":98,"line":9909},[96,65556,55213],{"class":106},[96,65558,296],{"class":51279},[96,65560,65464],{"class":106},[96,65562,296],{"class":51279},[96,65564,51286],{"class":106},[96,65566,65567,65569,65571,65574,65576],{"class":98,"line":16588},[96,65568,55213],{"class":106},[96,65570,296],{"class":51279},[96,65572,65573],{"class":106},">￥4999\u003C\u002F",[96,65575,296],{"class":51279},[96,65577,51286],{"class":106},[96,65579,65580,65582,65584],{"class":98,"line":16594},[96,65581,51755],{"class":106},[96,65583,250],{"class":51279},[96,65585,51286],{"class":106},[96,65587,65588,65590,65592],{"class":98,"line":16617},[96,65589,51320],{"class":106},[96,65591,250],{"class":51279},[96,65593,51286],{"class":106},[96,65595,65596,65598,65600],{"class":98,"line":16623},[96,65597,55213],{"class":106},[96,65599,296],{"class":51279},[96,65601,51286],{"class":106},[96,65603,65604,65606,65608,65610,65612,65614,65616,65618,65620,65622,65624,65626],{"class":98,"line":16646},[96,65605,55281],{"class":106},[96,65607,53800],{"class":51279},[96,65609,53803],{"class":1946},[96,65611,152],{"class":106},[96,65613,53808],{"class":211},[96,65615,14904],{"class":1946},[96,65617,152],{"class":106},[96,65619,65426],{"class":211},[96,65621,53465],{"class":1946},[96,65623,152],{"class":106},[96,65625,65433],{"class":211},[96,65627,51286],{"class":106},[96,65629,65630,65632,65634],{"class":98,"line":16660},[96,65631,55386],{"class":106},[96,65633,296],{"class":51279},[96,65635,51286],{"class":106},[96,65637,65638,65640,65642,65645,65647],{"class":98,"line":16680},[96,65639,55213],{"class":106},[96,65641,296],{"class":51279},[96,65643,65644],{"class":106},">小米电视\u003C\u002F",[96,65646,296],{"class":51279},[96,65648,51286],{"class":106},[96,65650,65651,65653,65655,65657,65659],{"class":98,"line":16686},[96,65652,55213],{"class":106},[96,65654,296],{"class":51279},[96,65656,65464],{"class":106},[96,65658,296],{"class":51279},[96,65660,51286],{"class":106},[96,65662,65663,65665,65667,65670,65672],{"class":98,"line":16697},[96,65664,55213],{"class":106},[96,65666,296],{"class":51279},[96,65668,65669],{"class":106},">￥5999\u003C\u002F",[96,65671,296],{"class":51279},[96,65673,51286],{"class":106},[96,65675,65676,65678,65680],{"class":98,"line":16720},[96,65677,51755],{"class":106},[96,65679,250],{"class":51279},[96,65681,51286],{"class":106},[96,65683,65684,65686,65688],{"class":98,"line":16742},[96,65685,52396],{"class":106},[96,65687,244],{"class":51279},[96,65689,51286],{"class":106},[96,65691,65692,65694,65696],{"class":98,"line":16747},[96,65693,52123],{"class":106},[96,65695,51792],{"class":51279},[96,65697,51286],{"class":106},[96,65699,65700],{"class":98,"line":16753},[96,65701,65702],{"class":165},"    \u002F\u002F 1. 获取大复选框\n",[96,65704,65705,65707,65710,65712,65714,65716,65718,65721],{"class":98,"line":16767},[96,65706,11205],{"class":102},[96,65708,65709],{"class":155}," checkAll",[96,65711,13548],{"class":102},[96,65713,54375],{"class":106},[96,65715,54378],{"class":1946},[96,65717,107],{"class":106},[96,65719,65720],{"class":211},"'#checkAll'",[96,65722,113],{"class":106},[96,65724,65725],{"class":98,"line":16780},[96,65726,65727],{"class":165},"    \u002F\u002F 2. 获取所有的小复选框\n",[96,65729,65730,65732,65735,65737,65739,65741,65743,65746],{"class":98,"line":16785},[96,65731,11205],{"class":102},[96,65733,65734],{"class":155}," cks",[96,65736,13548],{"class":102},[96,65738,54375],{"class":106},[96,65740,55660],{"class":1946},[96,65742,107],{"class":106},[96,65744,65745],{"class":211},"'.ck'",[96,65747,113],{"class":106},[96,65749,65750],{"class":98,"line":16799},[96,65751,65752],{"class":165},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[96,65754,65755,65758,65760,65762,65764,65766,65768],{"class":98,"line":16804},[96,65756,65757],{"class":106},"    checkAll.",[96,65759,57792],{"class":1946},[96,65761,107],{"class":106},[96,65763,57797],{"class":211},[96,65765,12419],{"class":106},[96,65767,54428],{"class":102},[96,65769,54431],{"class":106},[96,65771,65772],{"class":98,"line":16810},[96,65773,65774],{"class":165},"      \u002F\u002F 得到当前大复选框的选中状态\n",[96,65776,65777,65780],{"class":98,"line":16815},[96,65778,65779],{"class":165},"      \u002F\u002F console.log(checkAll.checked)",[96,65781,65782],{"class":165},"  \u002F\u002F 得到 是 true 或者是 false\n",[96,65784,65785],{"class":98,"line":16829},[96,65786,65787],{"class":165},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[96,65789,65790,65792,65794,65796,65798,65800,65802,65804,65806,65809,65811,65813,65815],{"class":98,"line":16834},[96,65791,52263],{"class":102},[96,65793,1641],{"class":106},[96,65795,51826],{"class":102},[96,65797,9422],{"class":106},[96,65799,152],{"class":102},[96,65801,4076],{"class":155},[96,65803,9429],{"class":106},[96,65805,1017],{"class":102},[96,65807,65808],{"class":106}," cks.",[96,65810,51947],{"class":155},[96,65812,3197],{"class":106},[96,65814,2275],{"class":102},[96,65816,12426],{"class":106},[96,65818,65819,65822,65824,65827],{"class":98,"line":16839},[96,65820,65821],{"class":106},"        cks[i].checked ",[96,65823,152],{"class":102},[96,65825,65826],{"class":155}," this",[96,65828,65829],{"class":106},".checked\n",[96,65831,65832],{"class":98,"line":16853},[96,65833,52377],{"class":106},[96,65835,65836],{"class":98,"line":16865},[96,65837,33440],{"class":106},[96,65839,65840],{"class":98,"line":16870},[96,65841,65842],{"class":165},"    \u002F\u002F 5. 小复选框控制大复选框\n",[96,65844,65845],{"class":98,"line":16883},[96,65846,2383],{"emptyLinePlaceholder":23},[96,65848,65849,65851,65853,65855,65857,65859,65861,65863,65865,65867,65869,65871,65873],{"class":98,"line":16888},[96,65850,3184],{"class":102},[96,65852,1641],{"class":106},[96,65854,51826],{"class":102},[96,65856,9422],{"class":106},[96,65858,152],{"class":102},[96,65860,4076],{"class":155},[96,65862,9429],{"class":106},[96,65864,1017],{"class":102},[96,65866,65808],{"class":106},[96,65868,51947],{"class":155},[96,65870,3197],{"class":106},[96,65872,2275],{"class":102},[96,65874,12426],{"class":106},[96,65876,65877],{"class":98,"line":16893},[96,65878,65879],{"class":165},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[96,65881,65882,65885,65887,65889,65891,65893,65895],{"class":98,"line":16898},[96,65883,65884],{"class":106},"      cks[i].",[96,65886,57792],{"class":1946},[96,65888,107],{"class":106},[96,65890,57797],{"class":211},[96,65892,12419],{"class":106},[96,65894,54428],{"class":102},[96,65896,54431],{"class":106},[96,65898,65899],{"class":98,"line":16911},[96,65900,65901],{"class":165},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[96,65903,65904],{"class":98,"line":16916},[96,65905,65906],{"class":165},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[96,65908,65909],{"class":98,"line":32612},[96,65910,65911],{"class":165},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[96,65913,65914],{"class":98,"line":32618},[96,65915,65916],{"class":165},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[96,65918,65919,65922,65924,65926,65928,65930,65933,65935,65937,65939,65941],{"class":98,"line":32624},[96,65920,65921],{"class":106},"        checkAll.checked ",[96,65923,152],{"class":102},[96,65925,54375],{"class":106},[96,65927,55660],{"class":1946},[96,65929,107],{"class":106},[96,65931,65932],{"class":211},"'.ck:checked'",[96,65934,30805],{"class":106},[96,65936,51947],{"class":155},[96,65938,57885],{"class":102},[96,65940,65808],{"class":106},[96,65942,55810],{"class":155},[96,65944,65945],{"class":98,"line":32630},[96,65946,64794],{"class":106},[96,65948,65949],{"class":98,"line":32636},[96,65950,2170],{"class":106},[96,65952,65953,65955,65957],{"class":98,"line":32647},[96,65954,52396],{"class":106},[96,65956,51792],{"class":51279},[96,65958,51286],{"class":106},[96,65960,65961,65963,65965],{"class":98,"line":32653},[96,65962,51764],{"class":106},[96,65964,51779],{"class":51279},[96,65966,51286],{"class":106},[96,65968,65969],{"class":98,"line":32673},[96,65970,2383],{"emptyLinePlaceholder":23},[96,65972,65973,65975,65977],{"class":98,"line":32679},[96,65974,51764],{"class":106},[96,65976,50614],{"class":51279},[96,65978,51286],{"class":106},[14,65980,65981],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[14,65983,65984],{},"用好之间比较得到的布尔值！！！",[14,65986,65987,65988,65991,65992,1641,65995,691,65997,66000],{},"在 JS 里访问的时候，",[93,65989,65990],{},"checkbox.checked"," 是一个 ",[256,65993,65994],{},"布尔值",[93,65996,1345],{},[93,65998,65999],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[14,66002,66003,66004,66007,66008],{},"HTML 的 ",[93,66005,66006],{},"checked=\"checked\""," 只是 ",[256,66009,66010,66011,66014],{},"初始值；JS 的 ",[93,66012,66013],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[14,66016,66017],{},"：checked是一个伪类选择器",[14,66019,66020],{},[1445,66021],{"alt":18,"src":66022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[14,66024,66025,66028],{},[66026,66027],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[14,66030,66031],{},[1445,66032],{"alt":18,"src":66033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[38,66035,66037],{"id":66036},"_33-dom事件进阶","3.3 DOM事件进阶",[67,66039,66041],{"id":66040},"_331-事件流","3.3.1 事件流",[14,66043,66044],{},[1445,66045],{"alt":18,"src":66046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[21982,66048,66050],{"id":66049},"_3311-事件捕获","3.3.1.1 事件捕获",[14,66052,66053],{},[1445,66054],{"alt":18,"src":66055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[87,66057,66059],{"className":50612,"code":66058,"language":50614,"meta":18,"style":18},"\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",[93,66060,66061,66071,66085,66089,66097,66111,66131,66143,66151,66158,66170,66182,66192,66196,66200,66207,66219,66231,66241,66245,66253,66261,66265,66273,66288,66307,66315,66323,66343,66363,66379,66390,66398,66415,66426,66434,66451,66462,66470,66478,66486,66490],{"__ignoreMap":18},[96,66062,66063,66065,66067,66069],{"class":98,"line":99},[96,66064,51276],{"class":106},[96,66066,51280],{"class":51279},[96,66068,51283],{"class":1946},[96,66070,51286],{"class":106},[96,66072,66073,66075,66077,66079,66081,66083],{"class":98,"line":19},[96,66074,1017],{"class":106},[96,66076,50614],{"class":51279},[96,66078,51295],{"class":1946},[96,66080,152],{"class":106},[96,66082,51300],{"class":211},[96,66084,51286],{"class":106},[96,66086,66087],{"class":98,"line":1162},[96,66088,2383],{"emptyLinePlaceholder":23},[96,66090,66091,66093,66095],{"class":98,"line":1177},[96,66092,1017],{"class":106},[96,66094,51313],{"class":51279},[96,66096,51286],{"class":106},[96,66098,66099,66101,66103,66105,66107,66109],{"class":98,"line":1183},[96,66100,52123],{"class":106},[96,66102,51323],{"class":51279},[96,66104,51326],{"class":1946},[96,66106,152],{"class":106},[96,66108,51331],{"class":211},[96,66110,51286],{"class":106},[96,66112,66113,66115,66117,66119,66121,66123,66125,66127,66129],{"class":98,"line":1197},[96,66114,52123],{"class":106},[96,66116,51323],{"class":51279},[96,66118,14904],{"class":1946},[96,66120,152],{"class":106},[96,66122,51370],{"class":211},[96,66124,51350],{"class":1946},[96,66126,152],{"class":106},[96,66128,51377],{"class":211},[96,66130,51286],{"class":106},[96,66132,66133,66135,66137,66139,66141],{"class":98,"line":1203},[96,66134,52123],{"class":106},[96,66136,51386],{"class":51279},[96,66138,51389],{"class":106},[96,66140,51386],{"class":51279},[96,66142,51286],{"class":106},[96,66144,66145,66147,66149],{"class":98,"line":1294},[96,66146,52123],{"class":106},[96,66148,5110],{"class":51279},[96,66150,51286],{"class":106},[96,66152,66153,66156],{"class":98,"line":1300},[96,66154,66155],{"class":1946},"    .father",[96,66157,15556],{"class":106},[96,66159,66160,66162,66164,66166,66168],{"class":98,"line":1312},[96,66161,54750],{"class":155},[96,66163,51416],{"class":106},[96,66165,65053],{"class":155},[96,66167,51471],{"class":102},[96,66169,1273],{"class":106},[96,66171,66172,66174,66176,66178,66180],{"class":98,"line":1595},[96,66173,54764],{"class":155},[96,66175,51416],{"class":106},[96,66177,65053],{"class":155},[96,66179,51471],{"class":102},[96,66181,1273],{"class":106},[96,66183,66184,66186,66188,66190],{"class":98,"line":1600},[96,66185,54863],{"class":155},[96,66187,51416],{"class":106},[96,66189,51624],{"class":155},[96,66191,1273],{"class":106},[96,66193,66194],{"class":98,"line":1606},[96,66195,2170],{"class":106},[96,66197,66198],{"class":98,"line":1611},[96,66199,2383],{"emptyLinePlaceholder":23},[96,66201,66202,66205],{"class":98,"line":1625},[96,66203,66204],{"class":1946},"    .son",[96,66206,15556],{"class":106},[96,66208,66209,66211,66213,66215,66217],{"class":98,"line":1630},[96,66210,54750],{"class":155},[96,66212,51416],{"class":106},[96,66214,1705],{"class":155},[96,66216,51471],{"class":102},[96,66218,1273],{"class":106},[96,66220,66221,66223,66225,66227,66229],{"class":98,"line":1636},[96,66222,54764],{"class":155},[96,66224,51416],{"class":106},[96,66226,1705],{"class":155},[96,66228,51471],{"class":102},[96,66230,1273],{"class":106},[96,66232,66233,66235,66237,66239],{"class":98,"line":1657},[96,66234,54863],{"class":155},[96,66236,51416],{"class":106},[96,66238,54868],{"class":155},[96,66240,1273],{"class":106},[96,66242,66243],{"class":98,"line":1662},[96,66244,2170],{"class":106},[96,66246,66247,66249,66251],{"class":98,"line":1676},[96,66248,52396],{"class":106},[96,66250,5110],{"class":51279},[96,66252,51286],{"class":106},[96,66254,66255,66257,66259],{"class":98,"line":1681},[96,66256,51764],{"class":106},[96,66258,51313],{"class":51279},[96,66260,51286],{"class":106},[96,66262,66263],{"class":98,"line":1710},[96,66264,2383],{"emptyLinePlaceholder":23},[96,66266,66267,66269,66271],{"class":98,"line":1715},[96,66268,1017],{"class":106},[96,66270,51779],{"class":51279},[96,66272,51286],{"class":106},[96,66274,66275,66277,66279,66281,66283,66286],{"class":98,"line":1732},[96,66276,52123],{"class":106},[96,66278,51590],{"class":51279},[96,66280,53465],{"class":1946},[96,66282,152],{"class":106},[96,66284,66285],{"class":211},"\"father\"",[96,66287,51286],{"class":106},[96,66289,66290,66292,66294,66296,66298,66301,66303,66305],{"class":98,"line":1737},[96,66291,51320],{"class":106},[96,66293,51590],{"class":51279},[96,66295,53465],{"class":1946},[96,66297,152],{"class":106},[96,66299,66300],{"class":211},"\"son\"",[96,66302,55293],{"class":106},[96,66304,51590],{"class":51279},[96,66306,51286],{"class":106},[96,66308,66309,66311,66313],{"class":98,"line":1742},[96,66310,52396],{"class":106},[96,66312,51590],{"class":51279},[96,66314,51286],{"class":106},[96,66316,66317,66319,66321],{"class":98,"line":1747},[96,66318,52123],{"class":106},[96,66320,51792],{"class":51279},[96,66322,51286],{"class":106},[96,66324,66325,66327,66330,66332,66334,66336,66338,66341],{"class":98,"line":1761},[96,66326,11205],{"class":102},[96,66328,66329],{"class":155}," fa",[96,66331,13548],{"class":102},[96,66333,54375],{"class":106},[96,66335,54378],{"class":1946},[96,66337,107],{"class":106},[96,66339,66340],{"class":211},"'.father'",[96,66342,113],{"class":106},[96,66344,66345,66347,66350,66352,66354,66356,66358,66361],{"class":98,"line":1766},[96,66346,11205],{"class":102},[96,66348,66349],{"class":155}," son",[96,66351,13548],{"class":102},[96,66353,54375],{"class":106},[96,66355,54378],{"class":1946},[96,66357,107],{"class":106},[96,66359,66360],{"class":211},"'.son'",[96,66362,113],{"class":106},[96,66364,66365,66367,66369,66371,66373,66375,66377],{"class":98,"line":2560},[96,66366,52386],{"class":106},[96,66368,57792],{"class":1946},[96,66370,107],{"class":106},[96,66372,57797],{"class":211},[96,66374,12419],{"class":106},[96,66376,54428],{"class":102},[96,66378,54431],{"class":106},[96,66380,66381,66383,66385,66388],{"class":98,"line":2574},[96,66382,58904],{"class":1946},[96,66384,107],{"class":106},[96,66386,66387],{"class":211},"'woshiu1'",[96,66389,113],{"class":106},[96,66391,66392,66394,66396],{"class":98,"line":2582},[96,66393,54514],{"class":106},[96,66395,1345],{"class":155},[96,66397,113],{"class":106},[96,66399,66400,66403,66405,66407,66409,66411,66413],{"class":98,"line":2587},[96,66401,66402],{"class":106},"    fa.",[96,66404,57792],{"class":1946},[96,66406,107],{"class":106},[96,66408,57797],{"class":211},[96,66410,12419],{"class":106},[96,66412,54428],{"class":102},[96,66414,54431],{"class":106},[96,66416,66417,66419,66421,66424],{"class":98,"line":2593},[96,66418,58904],{"class":1946},[96,66420,107],{"class":106},[96,66422,66423],{"class":211},"'1'",[96,66425,113],{"class":106},[96,66427,66428,66430,66432],{"class":98,"line":2599},[96,66429,54514],{"class":106},[96,66431,1345],{"class":155},[96,66433,113],{"class":106},[96,66435,66436,66439,66441,66443,66445,66447,66449],{"class":98,"line":2604},[96,66437,66438],{"class":106},"    son.",[96,66440,57792],{"class":1946},[96,66442,107],{"class":106},[96,66444,57797],{"class":211},[96,66446,12419],{"class":106},[96,66448,54428],{"class":102},[96,66450,54431],{"class":106},[96,66452,66453,66455,66457,66460],{"class":98,"line":7932},[96,66454,58904],{"class":1946},[96,66456,107],{"class":106},[96,66458,66459],{"class":211},"'2'",[96,66461,113],{"class":106},[96,66463,66464,66466,66468],{"class":98,"line":7956},[96,66465,54514],{"class":106},[96,66467,1345],{"class":155},[96,66469,113],{"class":106},[96,66471,66472,66474,66476],{"class":98,"line":7961},[96,66473,52396],{"class":106},[96,66475,51792],{"class":51279},[96,66477,51286],{"class":106},[96,66479,66480,66482,66484],{"class":98,"line":7967},[96,66481,51764],{"class":106},[96,66483,51779],{"class":51279},[96,66485,51286],{"class":106},[96,66487,66488],{"class":98,"line":7994},[96,66489,2383],{"emptyLinePlaceholder":23},[96,66491,66492,66494,66496],{"class":98,"line":7999},[96,66493,51764],{"class":106},[96,66495,50614],{"class":51279},[96,66497,51286],{"class":106},[14,66499,66500],{},[1445,66501],{"alt":18,"src":66502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[14,66504,66505],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[21982,66507,66509],{"id":66508},"_3312-事件冒泡","3.3.1.2 事件冒泡",[14,66511,66512],{},[1445,66513],{"alt":18,"src":66514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[14,66516,66517],{},"反着来",[14,66519,66520],{},"注意是同名事件，比如都是‘click’",[21982,66522,66524],{"id":66523},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[14,66526,66527],{},[1445,66528],{"alt":18,"src":66529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[21982,66531,66533],{"id":66532},"_3314-解绑事件","3.3.1.4 解绑事件",[14,66535,66536],{},[1445,66537],{"alt":18,"src":66538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[14,66540,66541],{},[1445,66542],{"alt":18,"src":66543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[21982,66545,66547],{"id":66546},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[50,66549,66550],{},[53,66551,66552],{},"事件类型的区别",[14,66554,66555],{},[1445,66556],{"alt":18,"src":66557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[14,66559,66560],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[50,66562,66563],{"start":19},[53,66564,66565],{},"注册事件的区别",[14,66567,66568],{},[1445,66569],{"alt":18,"src":66570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[21982,66572,66574],{"id":66573},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[14,66576,66577],{},[1445,66578],{"alt":18,"src":66579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[14,66581,66582],{},[1445,66583],{"alt":18,"src":66584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[87,66586,66588],{"className":53046,"code":66587,"language":53048,"meta":18,"style":18},"\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",[93,66589,66590,66598,66615,66638,66646,66651,66656,66661,66665,66673,66681],{"__ignoreMap":18},[96,66591,66592,66594,66596],{"class":98,"line":99},[96,66593,1017],{"class":106},[96,66595,51779],{"class":51279},[96,66597,51286],{"class":106},[96,66599,66600,66602,66605,66608,66610,66613],{"class":98,"line":19},[96,66601,52123],{"class":106},[96,66603,66604],{"class":51279},"form",[96,66606,66607],{"class":1946}," action",[96,66609,152],{"class":106},[96,66611,66612],{"class":211},"\"http:\u002F\u002Fwww.itcast.cn\"",[96,66614,51286],{"class":106},[96,66616,66617,66619,66621,66623,66625,66628,66631,66633,66636],{"class":98,"line":1162},[96,66618,51320],{"class":106},[96,66620,53800],{"class":51279},[96,66622,53803],{"class":1946},[96,66624,152],{"class":106},[96,66626,66627],{"class":211},"\"submit\"",[96,66629,66630],{"class":1946}," value",[96,66632,152],{"class":106},[96,66634,66635],{"class":211},"\"免费注册\"",[96,66637,51286],{"class":106},[96,66639,66640,66642,66644],{"class":98,"line":1177},[96,66641,51320],{"class":106},[96,66643,51792],{"class":51279},[96,66645,51286],{"class":106},[96,66647,66648],{"class":98,"line":1183},[96,66649,66650],{"class":106},"      const form = document.querySelector('form')\n",[96,66652,66653],{"class":98,"line":1197},[96,66654,66655],{"class":106},"      form.addEventListener('submit', function (e) {\n",[96,66657,66658],{"class":98,"line":1203},[96,66659,66660],{"class":106},"        e.preventDefault()\n",[96,66662,66663],{"class":98,"line":1294},[96,66664,64794],{"class":106},[96,66666,66667,66669,66671],{"class":98,"line":1300},[96,66668,51755],{"class":106},[96,66670,51792],{"class":51279},[96,66672,51286],{"class":106},[96,66674,66675,66677,66679],{"class":98,"line":1312},[96,66676,52396],{"class":106},[96,66678,66604],{"class":51279},[96,66680,51286],{"class":106},[96,66682,66683,66685,66687],{"class":98,"line":1595},[96,66684,51764],{"class":106},[96,66686,51779],{"class":51279},[96,66688,51286],{"class":106},[14,66690,66691],{},"点击不在跳转！！！",[67,66693,66695],{"id":66694},"_332-事件委托","3.3.2 事件委托",[14,66697,66698],{},[1445,66699],{"alt":18,"src":66700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[87,66702,66704],{"className":50612,"code":66703,"language":50614,"meta":18,"style":18},"\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",[93,66705,66706,66716,66730,66734,66742,66756,66776,66788,66796,66800,66808,66816,66828,66840,66852,66864,66876,66889,66897,66905,66910,66929,66950,66955,66960,66965,66970,66979,66983,66993,66997,67002,67007,67021,67031,67035,67039,67047,67055,67059],{"__ignoreMap":18},[96,66707,66708,66710,66712,66714],{"class":98,"line":99},[96,66709,51276],{"class":106},[96,66711,51280],{"class":51279},[96,66713,51283],{"class":1946},[96,66715,51286],{"class":106},[96,66717,66718,66720,66722,66724,66726,66728],{"class":98,"line":19},[96,66719,1017],{"class":106},[96,66721,50614],{"class":51279},[96,66723,51295],{"class":1946},[96,66725,152],{"class":106},[96,66727,51300],{"class":211},[96,66729,51286],{"class":106},[96,66731,66732],{"class":98,"line":1162},[96,66733,2383],{"emptyLinePlaceholder":23},[96,66735,66736,66738,66740],{"class":98,"line":1177},[96,66737,1017],{"class":106},[96,66739,51313],{"class":51279},[96,66741,51286],{"class":106},[96,66743,66744,66746,66748,66750,66752,66754],{"class":98,"line":1183},[96,66745,52123],{"class":106},[96,66747,51323],{"class":51279},[96,66749,51326],{"class":1946},[96,66751,152],{"class":106},[96,66753,51331],{"class":211},[96,66755,51286],{"class":106},[96,66757,66758,66760,66762,66764,66766,66768,66770,66772,66774],{"class":98,"line":1197},[96,66759,52123],{"class":106},[96,66761,51323],{"class":51279},[96,66763,14904],{"class":1946},[96,66765,152],{"class":106},[96,66767,51370],{"class":211},[96,66769,51350],{"class":1946},[96,66771,152],{"class":106},[96,66773,51377],{"class":211},[96,66775,51286],{"class":106},[96,66777,66778,66780,66782,66784,66786],{"class":98,"line":1203},[96,66779,52123],{"class":106},[96,66781,51386],{"class":51279},[96,66783,51389],{"class":106},[96,66785,51386],{"class":51279},[96,66787,51286],{"class":106},[96,66789,66790,66792,66794],{"class":98,"line":1294},[96,66791,51764],{"class":106},[96,66793,51313],{"class":51279},[96,66795,51286],{"class":106},[96,66797,66798],{"class":98,"line":1300},[96,66799,2383],{"emptyLinePlaceholder":23},[96,66801,66802,66804,66806],{"class":98,"line":1312},[96,66803,1017],{"class":106},[96,66805,51779],{"class":51279},[96,66807,51286],{"class":106},[96,66809,66810,66812,66814],{"class":98,"line":1595},[96,66811,52123],{"class":106},[96,66813,1114],{"class":51279},[96,66815,51286],{"class":106},[96,66817,66818,66820,66822,66824,66826],{"class":98,"line":1600},[96,66819,51320],{"class":106},[96,66821,53],{"class":51279},[96,66823,53945],{"class":106},[96,66825,53],{"class":51279},[96,66827,51286],{"class":106},[96,66829,66830,66832,66834,66836,66838],{"class":98,"line":1606},[96,66831,51320],{"class":106},[96,66833,53],{"class":51279},[96,66835,53964],{"class":106},[96,66837,53],{"class":51279},[96,66839,51286],{"class":106},[96,66841,66842,66844,66846,66848,66850],{"class":98,"line":1611},[96,66843,51320],{"class":106},[96,66845,53],{"class":51279},[96,66847,53983],{"class":106},[96,66849,53],{"class":51279},[96,66851,51286],{"class":106},[96,66853,66854,66856,66858,66860,66862],{"class":98,"line":1625},[96,66855,51320],{"class":106},[96,66857,53],{"class":51279},[96,66859,54002],{"class":106},[96,66861,53],{"class":51279},[96,66863,51286],{"class":106},[96,66865,66866,66868,66870,66872,66874],{"class":98,"line":1630},[96,66867,51320],{"class":106},[96,66869,53],{"class":51279},[96,66871,54021],{"class":106},[96,66873,53],{"class":51279},[96,66875,51286],{"class":106},[96,66877,66878,66880,66882,66885,66887],{"class":98,"line":1636},[96,66879,51320],{"class":106},[96,66881,14],{"class":51279},[96,66883,66884],{"class":106},">我不需要变色\u003C\u002F",[96,66886,14],{"class":51279},[96,66888,51286],{"class":106},[96,66890,66891,66893,66895],{"class":98,"line":1657},[96,66892,52396],{"class":106},[96,66894,1114],{"class":51279},[96,66896,51286],{"class":106},[96,66898,66899,66901,66903],{"class":98,"line":1662},[96,66900,52123],{"class":106},[96,66902,51792],{"class":51279},[96,66904,51286],{"class":106},[96,66906,66907],{"class":98,"line":1676},[96,66908,66909],{"class":165},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[96,66911,66912,66914,66916,66918,66920,66922,66924,66927],{"class":98,"line":1681},[96,66913,11205],{"class":102},[96,66915,61271],{"class":155},[96,66917,13548],{"class":102},[96,66919,54375],{"class":106},[96,66921,54378],{"class":1946},[96,66923,107],{"class":106},[96,66925,66926],{"class":211},"'ul'",[96,66928,113],{"class":106},[96,66930,66931,66934,66936,66938,66940,66942,66944,66946,66948],{"class":98,"line":1710},[96,66932,66933],{"class":106},"    ul.",[96,66935,57792],{"class":1946},[96,66937,107],{"class":106},[96,66939,57797],{"class":211},[96,66941,12419],{"class":106},[96,66943,54428],{"class":102},[96,66945,1641],{"class":106},[96,66947,181],{"class":5200},[96,66949,12426],{"class":106},[96,66951,66952],{"class":98,"line":1715},[96,66953,66954],{"class":165},"      \u002F\u002F alert(1)\n",[96,66956,66957],{"class":98,"line":1732},[96,66958,66959],{"class":165},"      \u002F\u002F e.target就是我们点击的对象\n",[96,66961,66962],{"class":98,"line":1737},[96,66963,66964],{"class":165},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[96,66966,66967],{"class":98,"line":1742},[96,66968,66969],{"class":165},"      \u002F\u002F e.target.style.color = 'red'\n",[96,66971,66972,66974,66976],{"class":98,"line":1747},[96,66973,58223],{"class":106},[96,66975,58226],{"class":1946},[96,66977,66978],{"class":106},"(e)\n",[96,66980,66981],{"class":98,"line":1761},[96,66982,2383],{"emptyLinePlaceholder":23},[96,66984,66985,66987,66990],{"class":98,"line":1766},[96,66986,58223],{"class":106},[96,66988,66989],{"class":1946},"dir",[96,66991,66992],{"class":106},"(e.target)\n",[96,66994,66995],{"class":98,"line":2560},[96,66996,2383],{"emptyLinePlaceholder":23},[96,66998,66999],{"class":98,"line":2574},[96,67000,67001],{"class":165},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[96,67003,67004],{"class":98,"line":2582},[96,67005,67006],{"class":165},"      \u002F\u002F 通过tagName来进行判断\n",[96,67008,67009,67011,67014,67016,67019],{"class":98,"line":2587},[96,67010,54459],{"class":102},[96,67012,67013],{"class":106}," (e.target.tagName ",[96,67015,54465],{"class":102},[96,67017,67018],{"class":211}," 'LI'",[96,67020,12426],{"class":106},[96,67022,67023,67026,67028],{"class":98,"line":2593},[96,67024,67025],{"class":106},"        e.target.style.color ",[96,67027,152],{"class":102},[96,67029,67030],{"class":211}," 'red'\n",[96,67032,67033],{"class":98,"line":2599},[96,67034,52377],{"class":106},[96,67036,67037],{"class":98,"line":2604},[96,67038,33440],{"class":106},[96,67040,67041,67043,67045],{"class":98,"line":7932},[96,67042,52396],{"class":106},[96,67044,51792],{"class":51279},[96,67046,51286],{"class":106},[96,67048,67049,67051,67053],{"class":98,"line":7956},[96,67050,51764],{"class":106},[96,67052,51779],{"class":51279},[96,67054,51286],{"class":106},[96,67056,67057],{"class":98,"line":7961},[96,67058,2383],{"emptyLinePlaceholder":23},[96,67060,67061,67063,67065],{"class":98,"line":7967},[96,67062,51764],{"class":106},[96,67064,50614],{"class":51279},[96,67066,51286],{"class":106},[14,67068,67069],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[14,67071,67072],{},"if(e.target.ragName==='P') {}",[14,67074,67075],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[14,67077,67078],{},"通过事件委托的方式实现tab栏切换改造：",[14,67080,67081],{},"一定要记住自定义属性！！！！！！",[14,67083,67084],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[14,67086,67087],{},"id是自定义的属性名",[14,67089,67090],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[87,67092,67094],{"className":50612,"code":67093,"language":50614,"meta":18,"style":18},"\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",[93,67095,67096,67106,67120,67124,67132,67146,67166,67186,67198,67206,67212,67222,67232,67236,67240,67246,67258,67270,67282,67298,67302,67306,67312,67324,67336,67348,67358,67368,67372,67376,67384,67396,67406,67418,67422,67426,67434,67444,67454,67464,67468,67472,67482,67496,67508,67512,67516,67528,67538,67554,67564,67568,67572,67586,67596,67606,67610,67614,67620,67634,67638,67642,67650,67660,67664,67668,67677,67687,67691,67699,67707,67711,67719,67733,67747,67759,67767,67806,67838,67870,67902,67934,67942,67950,67964,67998,68032,68066,68100,68134,68142,68150,68158,68163,68168,68187,68192,68212,68220,68225,68238,68259,68272,68276,68281,68286,68299,68319,68347,68351,68355,68359,68367,68375,68379],{"__ignoreMap":18},[96,67097,67098,67100,67102,67104],{"class":98,"line":99},[96,67099,51276],{"class":106},[96,67101,51280],{"class":51279},[96,67103,51283],{"class":1946},[96,67105,51286],{"class":106},[96,67107,67108,67110,67112,67114,67116,67118],{"class":98,"line":19},[96,67109,1017],{"class":106},[96,67111,50614],{"class":51279},[96,67113,51295],{"class":1946},[96,67115,152],{"class":106},[96,67117,51300],{"class":211},[96,67119,51286],{"class":106},[96,67121,67122],{"class":98,"line":1162},[96,67123,2383],{"emptyLinePlaceholder":23},[96,67125,67126,67128,67130],{"class":98,"line":1177},[96,67127,1017],{"class":106},[96,67129,51313],{"class":51279},[96,67131,51286],{"class":106},[96,67133,67134,67136,67138,67140,67142,67144],{"class":98,"line":1183},[96,67135,52123],{"class":106},[96,67137,51323],{"class":51279},[96,67139,51326],{"class":1946},[96,67141,152],{"class":106},[96,67143,51331],{"class":211},[96,67145,59106],{"class":106},[96,67147,67148,67150,67152,67154,67156,67158,67160,67162,67164],{"class":98,"line":1197},[96,67149,52123],{"class":106},[96,67151,51323],{"class":51279},[96,67153,51342],{"class":1946},[96,67155,152],{"class":106},[96,67157,51347],{"class":211},[96,67159,51350],{"class":1946},[96,67161,152],{"class":106},[96,67163,51355],{"class":211},[96,67165,59106],{"class":106},[96,67167,67168,67170,67172,67174,67176,67178,67180,67182,67184],{"class":98,"line":1203},[96,67169,52123],{"class":106},[96,67171,51323],{"class":51279},[96,67173,14904],{"class":1946},[96,67175,152],{"class":106},[96,67177,51370],{"class":211},[96,67179,51350],{"class":1946},[96,67181,152],{"class":106},[96,67183,51377],{"class":211},[96,67185,59106],{"class":106},[96,67187,67188,67190,67192,67194,67196],{"class":98,"line":1294},[96,67189,52123],{"class":106},[96,67191,51386],{"class":51279},[96,67193,63604],{"class":106},[96,67195,51386],{"class":51279},[96,67197,51286],{"class":106},[96,67199,67200,67202,67204],{"class":98,"line":1300},[96,67201,52123],{"class":106},[96,67203,5110],{"class":51279},[96,67205,51286],{"class":106},[96,67207,67208,67210],{"class":98,"line":1312},[96,67209,6387],{"class":51279},[96,67211,15556],{"class":106},[96,67213,67214,67216,67218,67220],{"class":98,"line":1595},[96,67215,54685],{"class":155},[96,67217,51416],{"class":106},[96,67219,298],{"class":155},[96,67221,1273],{"class":106},[96,67223,67224,67226,67228,67230],{"class":98,"line":1600},[96,67225,54674],{"class":155},[96,67227,51416],{"class":106},[96,67229,298],{"class":155},[96,67231,1273],{"class":106},[96,67233,67234],{"class":98,"line":1606},[96,67235,2170],{"class":106},[96,67237,67238],{"class":98,"line":1611},[96,67239,2383],{"emptyLinePlaceholder":23},[96,67241,67242,67244],{"class":98,"line":1625},[96,67243,63655],{"class":1946},[96,67245,15556],{"class":106},[96,67247,67248,67250,67252,67254,67256],{"class":98,"line":1630},[96,67249,54750],{"class":155},[96,67251,51416],{"class":106},[96,67253,63666],{"class":155},[96,67255,51471],{"class":102},[96,67257,1273],{"class":106},[96,67259,67260,67262,67264,67266,67268],{"class":98,"line":1636},[96,67261,54764],{"class":155},[96,67263,51416],{"class":106},[96,67265,63679],{"class":155},[96,67267,51471],{"class":102},[96,67269,1273],{"class":106},[96,67271,67272,67274,67276,67278,67280],{"class":98,"line":1657},[96,67273,54685],{"class":155},[96,67275,51416],{"class":106},[96,67277,807],{"class":155},[96,67279,51471],{"class":102},[96,67281,1273],{"class":106},[96,67283,67284,67286,67288,67290,67292,67294,67296],{"class":98,"line":1662},[96,67285,61956],{"class":155},[96,67287,51416],{"class":106},[96,67289,324],{"class":155},[96,67291,51471],{"class":102},[96,67293,51500],{"class":155},[96,67295,62223],{"class":155},[96,67297,1273],{"class":106},[96,67299,67300],{"class":98,"line":1676},[96,67301,2170],{"class":106},[96,67303,67304],{"class":98,"line":1681},[96,67305,2383],{"emptyLinePlaceholder":23},[96,67307,67308,67310],{"class":98,"line":1710},[96,67309,63724],{"class":1946},[96,67311,15556],{"class":106},[96,67313,67314,67316,67318,67320,67322],{"class":98,"line":1715},[96,67315,54750],{"class":155},[96,67317,51416],{"class":106},[96,67319,418],{"class":155},[96,67321,435],{"class":102},[96,67323,1273],{"class":106},[96,67325,67326,67328,67330,67332,67334],{"class":98,"line":1732},[96,67327,54764],{"class":155},[96,67329,51416],{"class":106},[96,67331,1014],{"class":155},[96,67333,51471],{"class":102},[96,67335,1273],{"class":106},[96,67337,67338,67340,67342,67344,67346],{"class":98,"line":1737},[96,67339,57338],{"class":155},[96,67341,51416],{"class":106},[96,67343,1014],{"class":155},[96,67345,51471],{"class":102},[96,67347,1273],{"class":106},[96,67349,67350,67352,67354,67356],{"class":98,"line":1742},[96,67351,54988],{"class":155},[96,67353,51416],{"class":106},[96,67355,51456],{"class":155},[96,67357,1273],{"class":106},[96,67359,67360,67362,67364,67366],{"class":98,"line":1747},[96,67361,54999],{"class":155},[96,67363,51416],{"class":106},[96,67365,51647],{"class":155},[96,67367,1273],{"class":106},[96,67369,67370],{"class":98,"line":1761},[96,67371,2170],{"class":106},[96,67373,67374],{"class":98,"line":1766},[96,67375,2383],{"emptyLinePlaceholder":23},[96,67377,67378,67380,67382],{"class":98,"line":2560},[96,67379,63724],{"class":1946},[96,67381,63797],{"class":51279},[96,67383,15556],{"class":106},[96,67385,67386,67388,67390,67392,67394],{"class":98,"line":2574},[96,67387,54901],{"class":155},[96,67389,51416],{"class":106},[96,67391,907],{"class":155},[96,67393,51471],{"class":102},[96,67395,1273],{"class":106},[96,67397,67398,67400,67402,67404],{"class":98,"line":2582},[96,67399,62313],{"class":155},[96,67401,51416],{"class":106},[96,67403,63820],{"class":155},[96,67405,1273],{"class":106},[96,67407,67408,67410,67412,67414,67416],{"class":98,"line":2587},[96,67409,61979],{"class":155},[96,67411,51416],{"class":106},[96,67413,807],{"class":155},[96,67415,51471],{"class":102},[96,67417,1273],{"class":106},[96,67419,67420],{"class":98,"line":2593},[96,67421,2170],{"class":106},[96,67423,67424],{"class":98,"line":2599},[96,67425,2383],{"emptyLinePlaceholder":23},[96,67427,67428,67430,67432],{"class":98,"line":2604},[96,67429,63724],{"class":1946},[96,67431,61271],{"class":51279},[96,67433,15556],{"class":106},[96,67435,67436,67438,67440,67442],{"class":98,"line":7932},[96,67437,54711],{"class":155},[96,67439,51416],{"class":106},[96,67441,54716],{"class":155},[96,67443,1273],{"class":106},[96,67445,67446,67448,67450,67452],{"class":98,"line":7956},[96,67447,54988],{"class":155},[96,67449,51416],{"class":106},[96,67451,51456],{"class":155},[96,67453,1273],{"class":106},[96,67455,67456,67458,67460,67462],{"class":98,"line":7961},[96,67457,54999],{"class":155},[96,67459,51416],{"class":106},[96,67461,51559],{"class":155},[96,67463,1273],{"class":106},[96,67465,67466],{"class":98,"line":7967},[96,67467,2170],{"class":106},[96,67469,67470],{"class":98,"line":7994},[96,67471,2383],{"emptyLinePlaceholder":23},[96,67473,67474,67476,67478,67480],{"class":98,"line":7999},[96,67475,63724],{"class":1946},[96,67477,61271],{"class":51279},[96,67479,55054],{"class":51279},[96,67481,15556],{"class":106},[96,67483,67484,67486,67488,67490,67492,67494],{"class":98,"line":8005},[96,67485,54685],{"class":155},[96,67487,51416],{"class":106},[96,67489,298],{"class":155},[96,67491,8934],{"class":155},[96,67493,51471],{"class":102},[96,67495,1273],{"class":106},[96,67497,67498,67500,67502,67504,67506],{"class":98,"line":8017},[96,67499,54901],{"class":155},[96,67501,51416],{"class":106},[96,67503,656],{"class":155},[96,67505,51471],{"class":102},[96,67507,1273],{"class":106},[96,67509,67510],{"class":98,"line":8029},[96,67511,2170],{"class":106},[96,67513,67514],{"class":98,"line":8041},[96,67515,2383],{"emptyLinePlaceholder":23},[96,67517,67518,67520,67522,67524,67526],{"class":98,"line":9700},[96,67519,63724],{"class":1946},[96,67521,61271],{"class":51279},[96,67523,55054],{"class":51279},[96,67525,1381],{"class":51279},[96,67527,15556],{"class":106},[96,67529,67530,67532,67534,67536],{"class":98,"line":9725},[96,67531,63949],{"class":155},[96,67533,51416],{"class":106},[96,67535,54716],{"class":155},[96,67537,1273],{"class":106},[96,67539,67540,67542,67544,67546,67548,67550,67552],{"class":98,"line":9748},[96,67541,62211],{"class":155},[96,67543,51416],{"class":106},[96,67545,184],{"class":155},[96,67547,51471],{"class":102},[96,67549,51500],{"class":155},[96,67551,63970],{"class":155},[96,67553,1273],{"class":106},[96,67555,67556,67558,67560,67562],{"class":98,"line":9772},[96,67557,57395],{"class":155},[96,67559,51416],{"class":106},[96,67561,62348],{"class":155},[96,67563,1273],{"class":106},[96,67565,67566],{"class":98,"line":9777},[96,67567,2170],{"class":106},[96,67569,67570],{"class":98,"line":9782},[96,67571,2383],{"emptyLinePlaceholder":23},[96,67573,67574,67576,67578,67580,67582,67584],{"class":98,"line":9787},[96,67575,63724],{"class":1946},[96,67577,61271],{"class":51279},[96,67579,55054],{"class":51279},[96,67581,1381],{"class":51279},[96,67583,64003],{"class":1946},[96,67585,15556],{"class":106},[96,67587,67588,67590,67592,67594],{"class":98,"line":9796},[96,67589,61770],{"class":155},[96,67591,51416],{"class":106},[96,67593,64014],{"class":155},[96,67595,1273],{"class":106},[96,67597,67598,67600,67602,67604],{"class":98,"line":9801},[96,67599,57395],{"class":155},[96,67601,51416],{"class":106},[96,67603,64014],{"class":155},[96,67605,1273],{"class":106},[96,67607,67608],{"class":98,"line":9807},[96,67609,2170],{"class":106},[96,67611,67612],{"class":98,"line":9828},[96,67613,2383],{"emptyLinePlaceholder":23},[96,67615,67616,67618],{"class":98,"line":9834},[96,67617,64039],{"class":1946},[96,67619,15556],{"class":106},[96,67621,67622,67624,67626,67628,67630,67632],{"class":98,"line":9848},[96,67623,54674],{"class":155},[96,67625,51416],{"class":106},[96,67627,298],{"class":155},[96,67629,64052],{"class":155},[96,67631,51471],{"class":102},[96,67633,1273],{"class":106},[96,67635,67636],{"class":98,"line":9854},[96,67637,2170],{"class":106},[96,67639,67640],{"class":98,"line":9881},[96,67641,2383],{"emptyLinePlaceholder":23},[96,67643,67644,67646,67648],{"class":98,"line":9890},[96,67645,64039],{"class":1946},[96,67647,62153],{"class":1946},[96,67649,15556],{"class":106},[96,67651,67652,67654,67656,67658],{"class":98,"line":9896},[96,67653,54988],{"class":155},[96,67655,51416],{"class":106},[96,67657,54716],{"class":155},[96,67659,1273],{"class":106},[96,67661,67662],{"class":98,"line":9904},[96,67663,2170],{"class":106},[96,67665,67666],{"class":98,"line":9909},[96,67667,2383],{"emptyLinePlaceholder":23},[96,67669,67670,67672,67675],{"class":98,"line":16588},[96,67671,64039],{"class":1946},[96,67673,67674],{"class":1946}," .active",[96,67676,15556],{"class":106},[96,67678,67679,67681,67683,67685],{"class":98,"line":16594},[96,67680,54988],{"class":155},[96,67682,51416],{"class":106},[96,67684,60848],{"class":155},[96,67686,1273],{"class":106},[96,67688,67689],{"class":98,"line":16617},[96,67690,2170],{"class":106},[96,67692,67693,67695,67697],{"class":98,"line":16623},[96,67694,52396],{"class":106},[96,67696,5110],{"class":51279},[96,67698,51286],{"class":106},[96,67700,67701,67703,67705],{"class":98,"line":16646},[96,67702,51764],{"class":106},[96,67704,51313],{"class":51279},[96,67706,51286],{"class":106},[96,67708,67709],{"class":98,"line":16660},[96,67710,2383],{"emptyLinePlaceholder":23},[96,67712,67713,67715,67717],{"class":98,"line":16680},[96,67714,1017],{"class":106},[96,67716,51779],{"class":51279},[96,67718,51286],{"class":106},[96,67720,67721,67723,67725,67727,67729,67731],{"class":98,"line":16686},[96,67722,52123],{"class":106},[96,67724,51590],{"class":51279},[96,67726,53465],{"class":1946},[96,67728,152],{"class":106},[96,67730,64154],{"class":211},[96,67732,51286],{"class":106},[96,67734,67735,67737,67739,67741,67743,67745],{"class":98,"line":16697},[96,67736,51320],{"class":106},[96,67738,51590],{"class":51279},[96,67740,53465],{"class":1946},[96,67742,152],{"class":106},[96,67744,64169],{"class":211},[96,67746,51286],{"class":106},[96,67748,67749,67751,67753,67755,67757],{"class":98,"line":16720},[96,67750,55213],{"class":106},[96,67752,67],{"class":51279},[96,67754,64180],{"class":106},[96,67756,67],{"class":51279},[96,67758,51286],{"class":106},[96,67760,67761,67763,67765],{"class":98,"line":16742},[96,67762,55213],{"class":106},[96,67764,1114],{"class":51279},[96,67766,51286],{"class":106},[96,67768,67769,67771,67773,67775,67777,67779,67781,67783,67785,67787,67789,67791,67793,67796,67798,67800,67802,67804],{"class":98,"line":16747},[96,67770,55281],{"class":106},[96,67772,53],{"class":51279},[96,67774,61031],{"class":106},[96,67776,345],{"class":51279},[96,67778,53465],{"class":1946},[96,67780,152],{"class":106},[96,67782,59685],{"class":211},[96,67784,61036],{"class":1946},[96,67786,152],{"class":106},[96,67788,64215],{"class":211},[96,67790,53930],{"class":1946},[96,67792,152],{"class":106},[96,67794,67795],{"class":211},"\"0\"",[96,67797,64218],{"class":106},[96,67799,345],{"class":51279},[96,67801,55293],{"class":106},[96,67803,53],{"class":51279},[96,67805,51286],{"class":106},[96,67807,67808,67810,67812,67814,67816,67818,67820,67822,67824,67826,67828,67830,67832,67834,67836],{"class":98,"line":16753},[96,67809,55281],{"class":106},[96,67811,53],{"class":51279},[96,67813,61031],{"class":106},[96,67815,345],{"class":51279},[96,67817,61036],{"class":1946},[96,67819,152],{"class":106},[96,67821,64215],{"class":211},[96,67823,53930],{"class":1946},[96,67825,152],{"class":106},[96,67827,3661],{"class":211},[96,67829,64245],{"class":106},[96,67831,345],{"class":51279},[96,67833,55293],{"class":106},[96,67835,53],{"class":51279},[96,67837,51286],{"class":106},[96,67839,67840,67842,67844,67846,67848,67850,67852,67854,67856,67858,67860,67862,67864,67866,67868],{"class":98,"line":16767},[96,67841,55281],{"class":106},[96,67843,53],{"class":51279},[96,67845,61031],{"class":106},[96,67847,345],{"class":51279},[96,67849,61036],{"class":1946},[96,67851,152],{"class":106},[96,67853,64215],{"class":211},[96,67855,53930],{"class":1946},[96,67857,152],{"class":106},[96,67859,3684],{"class":211},[96,67861,64272],{"class":106},[96,67863,345],{"class":51279},[96,67865,55293],{"class":106},[96,67867,53],{"class":51279},[96,67869,51286],{"class":106},[96,67871,67872,67874,67876,67878,67880,67882,67884,67886,67888,67890,67892,67894,67896,67898,67900],{"class":98,"line":16780},[96,67873,55281],{"class":106},[96,67875,53],{"class":51279},[96,67877,61031],{"class":106},[96,67879,345],{"class":51279},[96,67881,61036],{"class":1946},[96,67883,152],{"class":106},[96,67885,64215],{"class":211},[96,67887,53930],{"class":1946},[96,67889,152],{"class":106},[96,67891,3697],{"class":211},[96,67893,64299],{"class":106},[96,67895,345],{"class":51279},[96,67897,55293],{"class":106},[96,67899,53],{"class":51279},[96,67901,51286],{"class":106},[96,67903,67904,67906,67908,67910,67912,67914,67916,67918,67920,67922,67924,67926,67928,67930,67932],{"class":98,"line":16785},[96,67905,55281],{"class":106},[96,67907,53],{"class":51279},[96,67909,61031],{"class":106},[96,67911,345],{"class":51279},[96,67913,61036],{"class":1946},[96,67915,152],{"class":106},[96,67917,64215],{"class":211},[96,67919,53930],{"class":1946},[96,67921,152],{"class":106},[96,67923,3710],{"class":211},[96,67925,64326],{"class":106},[96,67927,345],{"class":51279},[96,67929,55293],{"class":106},[96,67931,53],{"class":51279},[96,67933,51286],{"class":106},[96,67935,67936,67938,67940],{"class":98,"line":16799},[96,67937,55386],{"class":106},[96,67939,1114],{"class":51279},[96,67941,51286],{"class":106},[96,67943,67944,67946,67948],{"class":98,"line":16804},[96,67945,51755],{"class":106},[96,67947,51590],{"class":51279},[96,67949,51286],{"class":106},[96,67951,67952,67954,67956,67958,67960,67962],{"class":98,"line":16810},[96,67953,51320],{"class":106},[96,67955,51590],{"class":51279},[96,67957,53465],{"class":1946},[96,67959,152],{"class":106},[96,67961,64363],{"class":211},[96,67963,51286],{"class":106},[96,67965,67966,67968,67970,67972,67974,67976,67978,67980,67982,67984,67986,67988,67990,67992,67994,67996],{"class":98,"line":16815},[96,67967,55213],{"class":106},[96,67969,51590],{"class":51279},[96,67971,53465],{"class":1946},[96,67973,152],{"class":106},[96,67975,64378],{"class":211},[96,67977,61031],{"class":106},[96,67979,1445],{"class":51279},[96,67981,55218],{"class":1946},[96,67983,152],{"class":106},[96,67985,64389],{"class":211},[96,67987,55226],{"class":1946},[96,67989,152],{"class":106},[96,67991,7636],{"class":211},[96,67993,64398],{"class":106},[96,67995,51590],{"class":51279},[96,67997,51286],{"class":106},[96,67999,68000,68002,68004,68006,68008,68010,68012,68014,68016,68018,68020,68022,68024,68026,68028,68030],{"class":98,"line":16829},[96,68001,55213],{"class":106},[96,68003,51590],{"class":51279},[96,68005,53465],{"class":1946},[96,68007,152],{"class":106},[96,68009,62602],{"class":211},[96,68011,61031],{"class":106},[96,68013,1445],{"class":51279},[96,68015,55218],{"class":1946},[96,68017,152],{"class":106},[96,68019,64425],{"class":211},[96,68021,55226],{"class":1946},[96,68023,152],{"class":106},[96,68025,7636],{"class":211},[96,68027,64398],{"class":106},[96,68029,51590],{"class":51279},[96,68031,51286],{"class":106},[96,68033,68034,68036,68038,68040,68042,68044,68046,68048,68050,68052,68054,68056,68058,68060,68062,68064],{"class":98,"line":16834},[96,68035,55213],{"class":106},[96,68037,51590],{"class":51279},[96,68039,53465],{"class":1946},[96,68041,152],{"class":106},[96,68043,62602],{"class":211},[96,68045,61031],{"class":106},[96,68047,1445],{"class":51279},[96,68049,55218],{"class":1946},[96,68051,152],{"class":106},[96,68053,64460],{"class":211},[96,68055,55226],{"class":1946},[96,68057,152],{"class":106},[96,68059,7636],{"class":211},[96,68061,64398],{"class":106},[96,68063,51590],{"class":51279},[96,68065,51286],{"class":106},[96,68067,68068,68070,68072,68074,68076,68078,68080,68082,68084,68086,68088,68090,68092,68094,68096,68098],{"class":98,"line":16839},[96,68069,55213],{"class":106},[96,68071,51590],{"class":51279},[96,68073,53465],{"class":1946},[96,68075,152],{"class":106},[96,68077,62602],{"class":211},[96,68079,61031],{"class":106},[96,68081,1445],{"class":51279},[96,68083,55218],{"class":1946},[96,68085,152],{"class":106},[96,68087,64495],{"class":211},[96,68089,55226],{"class":1946},[96,68091,152],{"class":106},[96,68093,7636],{"class":211},[96,68095,64398],{"class":106},[96,68097,51590],{"class":51279},[96,68099,51286],{"class":106},[96,68101,68102,68104,68106,68108,68110,68112,68114,68116,68118,68120,68122,68124,68126,68128,68130,68132],{"class":98,"line":16853},[96,68103,55213],{"class":106},[96,68105,51590],{"class":51279},[96,68107,53465],{"class":1946},[96,68109,152],{"class":106},[96,68111,62602],{"class":211},[96,68113,61031],{"class":106},[96,68115,1445],{"class":51279},[96,68117,55218],{"class":1946},[96,68119,152],{"class":106},[96,68121,64530],{"class":211},[96,68123,55226],{"class":1946},[96,68125,152],{"class":106},[96,68127,7636],{"class":211},[96,68129,64398],{"class":106},[96,68131,51590],{"class":51279},[96,68133,51286],{"class":106},[96,68135,68136,68138,68140],{"class":98,"line":16865},[96,68137,51755],{"class":106},[96,68139,51590],{"class":51279},[96,68141,51286],{"class":106},[96,68143,68144,68146,68148],{"class":98,"line":16870},[96,68145,52396],{"class":106},[96,68147,51590],{"class":51279},[96,68149,51286],{"class":106},[96,68151,68152,68154,68156],{"class":98,"line":16883},[96,68153,52123],{"class":106},[96,68155,51792],{"class":51279},[96,68157,51286],{"class":106},[96,68159,68160],{"class":98,"line":16888},[96,68161,68162],{"class":165},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[96,68164,68165],{"class":98,"line":16893},[96,68166,68167],{"class":165},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[96,68169,68170,68172,68174,68176,68178,68180,68182,68185],{"class":98,"line":16898},[96,68171,11205],{"class":102},[96,68173,61271],{"class":155},[96,68175,13548],{"class":102},[96,68177,54375],{"class":106},[96,68179,54378],{"class":1946},[96,68181,107],{"class":106},[96,68183,68184],{"class":211},"'.tab-nav ul'",[96,68186,113],{"class":106},[96,68188,68189],{"class":98,"line":16911},[96,68190,68191],{"class":165},"    \u002F\u002F 2.添加事件\n",[96,68193,68194,68196,68198,68200,68202,68204,68206,68208,68210],{"class":98,"line":16916},[96,68195,66933],{"class":106},[96,68197,57792],{"class":1946},[96,68199,107],{"class":106},[96,68201,57797],{"class":211},[96,68203,12419],{"class":106},[96,68205,54428],{"class":102},[96,68207,1641],{"class":106},[96,68209,181],{"class":5200},[96,68211,12426],{"class":106},[96,68213,68214,68216,68218],{"class":98,"line":32612},[96,68215,58223],{"class":106},[96,68217,66989],{"class":1946},[96,68219,66992],{"class":106},[96,68221,68222],{"class":98,"line":32618},[96,68223,68224],{"class":165},"      \u002F\u002Fe.targer是我们点击的对象\n",[96,68226,68227,68229,68231,68233,68236],{"class":98,"line":32624},[96,68228,54459],{"class":102},[96,68230,67013],{"class":106},[96,68232,54465],{"class":102},[96,68234,68235],{"class":211}," 'A'",[96,68237,12426],{"class":106},[96,68239,68240,68242,68244,68246,68249,68251,68253,68255,68257],{"class":98,"line":32630},[96,68241,51904],{"class":106},[96,68243,54378],{"class":1946},[96,68245,107],{"class":106},[96,68247,68248],{"class":211},"'.active'",[96,68250,56982],{"class":106},[96,68252,56985],{"class":1946},[96,68254,107],{"class":106},[96,68256,64693],{"class":211},[96,68258,113],{"class":106},[96,68260,68261,68264,68266,68268,68270],{"class":98,"line":32636},[96,68262,68263],{"class":106},"        e.target.classList.",[96,68265,5318],{"class":1946},[96,68267,107],{"class":106},[96,68269,64693],{"class":211},[96,68271,113],{"class":106},[96,68273,68274],{"class":98,"line":32647},[96,68275,2383],{"emptyLinePlaceholder":23},[96,68277,68278],{"class":98,"line":32653},[96,68279,68280],{"class":165},"        \u002F\u002F 下面大盒子模块\n",[96,68282,68283],{"class":98,"line":32673},[96,68284,68285],{"class":165},"        \u002F\u002F console.log(e.target.dataset.id)\n",[96,68287,68288,68290,68292,68294,68296],{"class":98,"line":32679},[96,68289,61249],{"class":102},[96,68291,3015],{"class":155},[96,68293,13548],{"class":102},[96,68295,45545],{"class":102},[96,68297,68298],{"class":106},"e.target.dataset.id\n",[96,68300,68301,68303,68305,68307,68309,68311,68313,68315,68317],{"class":98,"line":32690},[96,68302,51904],{"class":106},[96,68304,54378],{"class":1946},[96,68306,107],{"class":106},[96,68308,64741],{"class":211},[96,68310,56982],{"class":106},[96,68312,56985],{"class":1946},[96,68314,107],{"class":106},[96,68316,64693],{"class":211},[96,68318,113],{"class":106},[96,68320,68321,68323,68325,68327,68329,68331,68333,68335,68337,68339,68341,68343,68345],{"class":98,"line":32696},[96,68322,51904],{"class":106},[96,68324,54378],{"class":1946},[96,68326,107],{"class":106},[96,68328,64767],{"class":211},[96,68330,548],{"class":106},[96,68332,45545],{"class":102},[96,68334,25097],{"class":155},[96,68336,57011],{"class":211},[96,68338,56982],{"class":106},[96,68340,5318],{"class":1946},[96,68342,107],{"class":106},[96,68344,64693],{"class":211},[96,68346,113],{"class":106},[96,68348,68349],{"class":98,"line":32702},[96,68350,2383],{"emptyLinePlaceholder":23},[96,68352,68353],{"class":98,"line":32708},[96,68354,52377],{"class":106},[96,68356,68357],{"class":98,"line":32714},[96,68358,33440],{"class":106},[96,68360,68361,68363,68365],{"class":98,"line":32720},[96,68362,52396],{"class":106},[96,68364,51792],{"class":51279},[96,68366,51286],{"class":106},[96,68368,68369,68371,68373],{"class":98,"line":32726},[96,68370,51764],{"class":106},[96,68372,51779],{"class":51279},[96,68374,51286],{"class":106},[96,68376,68377],{"class":98,"line":32732},[96,68378,2383],{"emptyLinePlaceholder":23},[96,68380,68381,68383,68385],{"class":98,"line":32752},[96,68382,51764],{"class":106},[96,68384,50614],{"class":51279},[96,68386,51286],{"class":106},[67,68388,68390],{"id":68389},"_333-页面加载事件","3.3.3 页面加载事件",[50,68392,68393],{},[53,68394,68395],{},"load",[14,68397,68398],{},[1445,68399],{"alt":18,"src":68400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[14,68402,68403],{},"window代表整个窗口，比document还要大",[14,68405,68406],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[14,68408,68409],{},"img.addEventListener('load', function () {",[14,68411,68412],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[14,68414,52443],{},[50,68416,68417],{"start":19},[53,68418,68419],{},"DOMContentLoaded",[14,68421,68422],{},[1445,68423],{"alt":18,"src":68424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[14,68426,68427],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[67,68429,68431],{"id":68430},"_334-元素滚动事件","3.3.4 元素滚动事件",[14,68433,68434],{},[1445,68435],{"alt":18,"src":68436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[14,68438,68439],{},[1445,68440],{"alt":18,"src":68441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[14,68443,68444],{},[1445,68445],{"alt":18,"src":68446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[14,68448,68449],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[14,68451,68452],{},"获得的是数字型数据，不带单位",[14,68454,68455],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[14,68457,68458],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[14,68460,68461],{},"它是通过document.documentElement来获取",[14,68463,68464],{},[1445,68465],{"alt":18,"src":68466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[14,68468,68469],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[67,68471,68473],{"id":68472},"_335-页面缩放事件","3.3.5 页面缩放事件",[14,68475,68476],{},[1445,68477],{"alt":18,"src":68478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[14,68480,68481],{},[1445,68482],{"alt":18,"src":68483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[67,68485,68487],{"id":68486},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[14,68489,68490],{},[1445,68491],{"alt":18,"src":68492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[14,68494,68495],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[14,68497,68498],{},[1445,68499],{"alt":18,"src":68500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[14,68502,68503],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[14,68505,68506],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[14,68508,68509],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[14,68511,68512],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[14,68514,68515],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[14,68517,68518],{},[1445,68519],{"alt":18,"src":68520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[14,68522,68523],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[14,68525,68526],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[14,68528,68529],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[14,68531,68532],{},"e.pageX-box.getBoundingClientRect()",[67,68534,68536],{"id":68535},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[14,68538,68539],{},[1445,68540],{"alt":18,"src":68541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[14,68543,68544],{},"这个是相对于视口来说的，它是个方法，不是属性值",[67,68546,68548],{"id":68547},"_338-总结","3.3.8 总结",[14,68550,68551],{},[1445,68552],{"alt":18,"src":68553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[14,68555,68556],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[14,68558,68559],{},"修改盒子的宽高只能通过width和height来实现",[67,68561,68563],{"id":68562},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[87,68565,68567],{"className":50612,"code":68566,"language":50614,"meta":18,"style":18},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[93,68568,68569,68574,68579,68584,68589],{"__ignoreMap":18},[96,68570,68571],{"class":98,"line":99},[96,68572,68573],{"class":106},"\u002F* 页面滑动 *\u002F\n",[96,68575,68576],{"class":98,"line":19},[96,68577,68578],{"class":106},"html {\n",[96,68580,68581],{"class":98,"line":1162},[96,68582,68583],{"class":106},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[96,68585,68586],{"class":98,"line":1177},[96,68587,68588],{"class":106},"  scroll-behavior: smooth;\n",[96,68590,68591],{"class":98,"line":1183},[96,68592,1548],{"class":106},[14,68594,68595],{},"默认是auto",[67,68597,68599],{"id":68598},"_3310-日期对象","3.3.10 日期对象",[21982,68601,68603],{"id":68602},"_33101-实例化","3.3.10.1 实例化",[14,68605,68606],{},[1445,68607],{"alt":18,"src":68608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[21982,68610,68612],{"id":68611},"_33102-时期对象方法","3.3.10.2 时期对象方法",[14,68614,68615],{},[1445,68616],{"alt":18,"src":68617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[14,68619,68620],{},"月份+1",[14,68622,68623],{},"老外认为第一天为0，星期天",[14,68625,68626],{},"方法使用的时候必须要跟括号",[14,68628,68629],{},"快速获得日期",[14,68631,68632],{},"\u002F\u002F 得到年月日",[14,68634,68635],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[14,68637,68638],{},"\u002F\u002F 得到当地日期",[14,68640,68641],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[14,68643,68644],{},"\u002F\u002F 得到当地时间",[14,68646,68647],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[14,68649,68650],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[14,68652,68653],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51792,68655,68656],{},"\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,68658,68659],{},"学会去封装函数！",[21982,68661,68663],{"id":68662},"_33103-时间戳","3.3.10.3 时间戳",[14,68665,68666],{},[1445,68667],{"alt":18,"src":68668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[14,68670,68671],{},[1445,68672],{"alt":18,"src":68673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[14,68675,68676],{},"三种方法记住一个就可以",[67,68678,68680],{"id":68679},"_3311-节点操作","3.3.11 节点操作",[21982,68682,68684],{"id":68683},"_33111-dom节点","3.3.11.1 DOM节点",[14,68686,68687],{},[1445,68688],{"alt":18,"src":68689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[14,68691,68692],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[21982,68694,68696],{"id":68695},"_33112-查找节点","3.3.11.2 查找节点",[14,68698,68699],{},"前边的document.querySelector()是获取的元素",[14,68701,68702],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[14,68704,68705],{},[1445,68706],{"alt":18,"src":68707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[50,68709,68710],{},[53,68711,68712],{},"父节点",[14,68714,68715],{},[1445,68716],{"alt":18,"src":68717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[50,68719,68720],{"start":19},[53,68721,68722],{},"子节点",[14,68724,68725],{},[1445,68726],{"alt":18,"src":68727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[14,68729,68730],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[14,68732,68733],{},"children获得的是伪数组，是亲儿子",[50,68735,68736],{"start":1162},[53,68737,68738],{},"兄弟节点",[14,68740,68741],{},[1445,68742],{"alt":18,"src":68743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[21982,68745,68747],{"id":68746},"_33113-增加节点","3.3.11.3 增加节点",[14,68749,68750],{},[1445,68751],{"alt":18,"src":68752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[14,68754,68755],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[14,68757,68758],{},[1445,68759],{"alt":18,"src":68760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[14,68762,68763],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[14,68765,68766],{},"下面是写法的部分展示，就按照下边的格式来写",[14,68768,68769],{},"例：",[51792,68771,68772],{},"\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,68774,68775],{},[1445,68776],{"alt":18,"src":68777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[14,68779,68780],{},"false只克隆标签，里边的内容不会克隆过来",[87,68782,68784],{"className":50612,"code":68783,"language":50614,"meta":18,"style":18},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[93,68785,68786],{"__ignoreMap":18},[96,68787,68788],{"class":98,"line":99},[96,68789,68783],{"class":106},[21982,68791,68793],{"id":68792},"_33114-删除节点","3.3.11.4 删除节点",[14,68795,68796],{},[1445,68797],{"alt":18,"src":68798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[14,68800,68801],{},"父亲删儿子",[14,68803,68804],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[67,68806,68808],{"id":68807},"_3312-m端事件","3.3.12 M端事件",[14,68810,68811],{},"M端就是移动端",[14,68813,68814],{},[1445,68815],{"alt":18,"src":68816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[67,68818,68820],{"id":68819},"_3313-插件","3.3.13 插件",[14,68822,68823],{},"要熟悉官网！！！",[14,68825,68826],{},[345,68827,68828],{"href":68828,"rel":68829},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[23850],[14,68831,68832],{},[345,68833,68834],{"href":68834,"rel":68835},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[23850],[67,68837,68839],{"id":68838},"_3314-学生信息表","3.3.14 学生信息表",[50,68841,68842,68845,68848,68851,68854,68857,68860,68863],{},[53,68843,68844],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[53,68846,68847],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[53,68849,68850],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[53,68852,68853],{},"用好表单元素自带的属性，value,name等",[53,68855,68856],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[53,68858,68859],{},"不要忘记事件对象",[53,68861,68862],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[53,68864,68865],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[14,68867,68868],{},"结构：",[87,68870,68872],{"className":50612,"code":68871,"language":50614,"meta":18,"style":18},"\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",[93,68873,68874,68884,68898,68902,68910,68924,68944,68965,68978,69002,69010,69014,69022,69035,69056,69084,69112,69117,69139,69159,69178,69186,69214,69236,69256,69276,69296,69316,69336,69344,69364,69372,69376,69389,69397,69405,69413,69426,69439,69452,69465,69478,69491,69504,69512,69520,69528,69533,69538,69543,69548,69553,69558,69563,69568,69573,69578,69583,69588,69593,69601,69609,69617,69621,69641,69660,69680,69700,69720,69740,69744,69749,69769,69774,69784,69789,69794,69814,69836,69841,69851,69855,69859,69864,69869,69898,69912,69927,69931,69935,69939,69944,69955,69968,69973,69978,69983,69988,69993,69997,70002,70007,70016,70021,70026,70038,70043,70050,70054,70059,70069,70074,70084,70089,70117,70138,70148,70168,70186,70203,70220,70237,70254,70258,70268,70273,70278,70283,70294,70298,70302,70306,70311,70316,70337,70349,70354,70359,70364,70378,70383,70390,70394,70398,70406,70410,70418,70422],{"__ignoreMap":18},[96,68875,68876,68878,68880,68882],{"class":98,"line":99},[96,68877,51276],{"class":106},[96,68879,51280],{"class":51279},[96,68881,51283],{"class":1946},[96,68883,51286],{"class":106},[96,68885,68886,68888,68890,68892,68894,68896],{"class":98,"line":19},[96,68887,1017],{"class":106},[96,68889,50614],{"class":51279},[96,68891,51295],{"class":1946},[96,68893,152],{"class":106},[96,68895,51300],{"class":211},[96,68897,51286],{"class":106},[96,68899,68900],{"class":98,"line":1162},[96,68901,2383],{"emptyLinePlaceholder":23},[96,68903,68904,68906,68908],{"class":98,"line":1177},[96,68905,1017],{"class":106},[96,68907,51313],{"class":51279},[96,68909,51286],{"class":106},[96,68911,68912,68914,68916,68918,68920,68922],{"class":98,"line":1183},[96,68913,52123],{"class":106},[96,68915,51323],{"class":51279},[96,68917,51326],{"class":1946},[96,68919,152],{"class":106},[96,68921,51331],{"class":211},[96,68923,59106],{"class":106},[96,68925,68926,68928,68930,68932,68934,68936,68938,68940,68942],{"class":98,"line":1197},[96,68927,52123],{"class":106},[96,68929,51323],{"class":51279},[96,68931,14904],{"class":1946},[96,68933,152],{"class":106},[96,68935,51370],{"class":211},[96,68937,51350],{"class":1946},[96,68939,152],{"class":106},[96,68941,51377],{"class":211},[96,68943,59106],{"class":106},[96,68945,68946,68948,68950,68952,68954,68956,68958,68960,68963],{"class":98,"line":1203},[96,68947,52123],{"class":106},[96,68949,51323],{"class":51279},[96,68951,51342],{"class":1946},[96,68953,152],{"class":106},[96,68955,51347],{"class":211},[96,68957,51350],{"class":1946},[96,68959,152],{"class":106},[96,68961,68962],{"class":211},"\"ie=edge\"",[96,68964,59106],{"class":106},[96,68966,68967,68969,68971,68974,68976],{"class":98,"line":1294},[96,68968,52123],{"class":106},[96,68970,51386],{"class":51279},[96,68972,68973],{"class":106},">学生信息管理\u003C\u002F",[96,68975,51386],{"class":51279},[96,68977,51286],{"class":106},[96,68979,68980,68982,68985,68988,68990,68993,68995,68997,69000],{"class":98,"line":1300},[96,68981,52123],{"class":106},[96,68983,68984],{"class":51279},"link",[96,68986,68987],{"class":1946}," rel",[96,68989,152],{"class":106},[96,68991,68992],{"class":211},"\"stylesheet\"",[96,68994,61036],{"class":1946},[96,68996,152],{"class":106},[96,68998,68999],{"class":211},"\"css\u002Findex.css\"",[96,69001,59106],{"class":106},[96,69003,69004,69006,69008],{"class":98,"line":1312},[96,69005,51764],{"class":106},[96,69007,51313],{"class":51279},[96,69009,51286],{"class":106},[96,69011,69012],{"class":98,"line":1595},[96,69013,2383],{"emptyLinePlaceholder":23},[96,69015,69016,69018,69020],{"class":98,"line":1600},[96,69017,1017],{"class":106},[96,69019,51779],{"class":51279},[96,69021,51286],{"class":106},[96,69023,69024,69026,69028,69031,69033],{"class":98,"line":1606},[96,69025,52123],{"class":106},[96,69027,10],{"class":51279},[96,69029,69030],{"class":106},">新增学员\u003C\u002F",[96,69032,10],{"class":51279},[96,69034,51286],{"class":106},[96,69036,69037,69039,69041,69043,69045,69047,69050,69052,69054],{"class":98,"line":1611},[96,69038,52123],{"class":106},[96,69040,66604],{"class":51279},[96,69042,53465],{"class":1946},[96,69044,152],{"class":106},[96,69046,62643],{"class":211},[96,69048,69049],{"class":1946}," autocomplete",[96,69051,152],{"class":106},[96,69053,31755],{"class":211},[96,69055,51286],{"class":106},[96,69057,69058,69061,69063,69065,69067,69069,69071,69073,69076,69078,69080,69082],{"class":98,"line":1625},[96,69059,69060],{"class":106},"    姓名：\u003C",[96,69062,53800],{"class":51279},[96,69064,53803],{"class":1946},[96,69066,152],{"class":106},[96,69068,62678],{"class":211},[96,69070,53465],{"class":1946},[96,69072,152],{"class":106},[96,69074,69075],{"class":211},"\"uname\"",[96,69077,14904],{"class":1946},[96,69079,152],{"class":106},[96,69081,69075],{"class":211},[96,69083,59106],{"class":106},[96,69085,69086,69089,69091,69093,69095,69097,69099,69101,69104,69106,69108,69110],{"class":98,"line":1630},[96,69087,69088],{"class":106},"    年龄：\u003C",[96,69090,53800],{"class":51279},[96,69092,53803],{"class":1946},[96,69094,152],{"class":106},[96,69096,62678],{"class":211},[96,69098,53465],{"class":1946},[96,69100,152],{"class":106},[96,69102,69103],{"class":211},"\"age\"",[96,69105,14904],{"class":1946},[96,69107,152],{"class":106},[96,69109,69103],{"class":211},[96,69111,59106],{"class":106},[96,69113,69114],{"class":98,"line":1636},[96,69115,69116],{"class":106},"    性别:\n",[96,69118,69119,69121,69124,69126,69128,69131,69133,69135,69137],{"class":98,"line":1657},[96,69120,51320],{"class":106},[96,69122,69123],{"class":51279},"select",[96,69125,14904],{"class":1946},[96,69127,152],{"class":106},[96,69129,69130],{"class":211},"\"gender\"",[96,69132,53465],{"class":1946},[96,69134,152],{"class":106},[96,69136,69130],{"class":211},[96,69138,51286],{"class":106},[96,69140,69141,69143,69146,69148,69150,69152,69155,69157],{"class":98,"line":1662},[96,69142,55213],{"class":106},[96,69144,69145],{"class":51279},"option",[96,69147,66630],{"class":1946},[96,69149,152],{"class":106},[96,69151,9945],{"class":211},[96,69153,69154],{"class":106},">男\u003C\u002F",[96,69156,69145],{"class":51279},[96,69158,51286],{"class":106},[96,69160,69161,69163,69165,69167,69169,69171,69174,69176],{"class":98,"line":1676},[96,69162,55213],{"class":106},[96,69164,69145],{"class":51279},[96,69166,66630],{"class":1946},[96,69168,152],{"class":106},[96,69170,10014],{"class":211},[96,69172,69173],{"class":106},">女\u003C\u002F",[96,69175,69145],{"class":51279},[96,69177,51286],{"class":106},[96,69179,69180,69182,69184],{"class":98,"line":1681},[96,69181,51755],{"class":106},[96,69183,69123],{"class":51279},[96,69185,51286],{"class":106},[96,69187,69188,69191,69193,69195,69197,69199,69201,69203,69206,69208,69210,69212],{"class":98,"line":1710},[96,69189,69190],{"class":106},"    薪资：\u003C",[96,69192,53800],{"class":51279},[96,69194,53803],{"class":1946},[96,69196,152],{"class":106},[96,69198,62678],{"class":211},[96,69200,53465],{"class":1946},[96,69202,152],{"class":106},[96,69204,69205],{"class":211},"\"salary\"",[96,69207,14904],{"class":1946},[96,69209,152],{"class":106},[96,69211,69205],{"class":211},[96,69213,59106],{"class":106},[96,69215,69216,69219,69221,69223,69225,69228,69230,69232,69234],{"class":98,"line":1715},[96,69217,69218],{"class":106},"    就业城市：\u003C",[96,69220,69123],{"class":51279},[96,69222,14904],{"class":1946},[96,69224,152],{"class":106},[96,69226,69227],{"class":211},"\"city\"",[96,69229,53465],{"class":1946},[96,69231,152],{"class":106},[96,69233,69227],{"class":211},[96,69235,51286],{"class":106},[96,69237,69238,69240,69242,69244,69246,69249,69252,69254],{"class":98,"line":1732},[96,69239,55213],{"class":106},[96,69241,69145],{"class":51279},[96,69243,66630],{"class":1946},[96,69245,152],{"class":106},[96,69247,69248],{"class":211},"\"北京\"",[96,69250,69251],{"class":106},">北京\u003C\u002F",[96,69253,69145],{"class":51279},[96,69255,51286],{"class":106},[96,69257,69258,69260,69262,69264,69266,69269,69272,69274],{"class":98,"line":1737},[96,69259,55213],{"class":106},[96,69261,69145],{"class":51279},[96,69263,66630],{"class":1946},[96,69265,152],{"class":106},[96,69267,69268],{"class":211},"\"上海\"",[96,69270,69271],{"class":106},">上海\u003C\u002F",[96,69273,69145],{"class":51279},[96,69275,51286],{"class":106},[96,69277,69278,69280,69282,69284,69286,69289,69292,69294],{"class":98,"line":1742},[96,69279,55213],{"class":106},[96,69281,69145],{"class":51279},[96,69283,66630],{"class":1946},[96,69285,152],{"class":106},[96,69287,69288],{"class":211},"\"广州\"",[96,69290,69291],{"class":106},">广州\u003C\u002F",[96,69293,69145],{"class":51279},[96,69295,51286],{"class":106},[96,69297,69298,69300,69302,69304,69306,69309,69312,69314],{"class":98,"line":1747},[96,69299,55213],{"class":106},[96,69301,69145],{"class":51279},[96,69303,66630],{"class":1946},[96,69305,152],{"class":106},[96,69307,69308],{"class":211},"\"深圳\"",[96,69310,69311],{"class":106},">深圳\u003C\u002F",[96,69313,69145],{"class":51279},[96,69315,51286],{"class":106},[96,69317,69318,69320,69322,69324,69326,69329,69332,69334],{"class":98,"line":1761},[96,69319,55213],{"class":106},[96,69321,69145],{"class":51279},[96,69323,66630],{"class":1946},[96,69325,152],{"class":106},[96,69327,69328],{"class":211},"\"曹县\"",[96,69330,69331],{"class":106},">曹县\u003C\u002F",[96,69333,69145],{"class":51279},[96,69335,51286],{"class":106},[96,69337,69338,69340,69342],{"class":98,"line":1766},[96,69339,51755],{"class":106},[96,69341,69123],{"class":51279},[96,69343,51286],{"class":106},[96,69345,69346,69348,69350,69352,69354,69357,69360,69362],{"class":98,"line":2560},[96,69347,51320],{"class":106},[96,69349,53866],{"class":51279},[96,69351,53465],{"class":1946},[96,69353,152],{"class":106},[96,69355,69356],{"class":211},"\"add\"",[96,69358,69359],{"class":106},">录入\u003C\u002F",[96,69361,53866],{"class":51279},[96,69363,51286],{"class":106},[96,69365,69366,69368,69370],{"class":98,"line":2574},[96,69367,52396],{"class":106},[96,69369,66604],{"class":51279},[96,69371,51286],{"class":106},[96,69373,69374],{"class":98,"line":2582},[96,69375,2383],{"emptyLinePlaceholder":23},[96,69377,69378,69380,69382,69385,69387],{"class":98,"line":2587},[96,69379,52123],{"class":106},[96,69381,10],{"class":51279},[96,69383,69384],{"class":106},">就业榜\u003C\u002F",[96,69386,10],{"class":51279},[96,69388,51286],{"class":106},[96,69390,69391,69393,69395],{"class":98,"line":2593},[96,69392,52123],{"class":106},[96,69394,244],{"class":51279},[96,69396,51286],{"class":106},[96,69398,69399,69401,69403],{"class":98,"line":2599},[96,69400,51320],{"class":106},[96,69402,247],{"class":51279},[96,69404,51286],{"class":106},[96,69406,69407,69409,69411],{"class":98,"line":2604},[96,69408,55213],{"class":106},[96,69410,250],{"class":51279},[96,69412,51286],{"class":106},[96,69414,69415,69417,69419,69422,69424],{"class":98,"line":7932},[96,69416,55281],{"class":106},[96,69418,253],{"class":51279},[96,69420,69421],{"class":106},">序号\u003C\u002F",[96,69423,253],{"class":51279},[96,69425,51286],{"class":106},[96,69427,69428,69430,69432,69435,69437],{"class":98,"line":7956},[96,69429,55281],{"class":106},[96,69431,253],{"class":51279},[96,69433,69434],{"class":106},">姓名\u003C\u002F",[96,69436,253],{"class":51279},[96,69438,51286],{"class":106},[96,69440,69441,69443,69445,69448,69450],{"class":98,"line":7961},[96,69442,55281],{"class":106},[96,69444,253],{"class":51279},[96,69446,69447],{"class":106},">年龄\u003C\u002F",[96,69449,253],{"class":51279},[96,69451,51286],{"class":106},[96,69453,69454,69456,69458,69461,69463],{"class":98,"line":7967},[96,69455,55281],{"class":106},[96,69457,253],{"class":51279},[96,69459,69460],{"class":106},">性别\u003C\u002F",[96,69462,253],{"class":51279},[96,69464,51286],{"class":106},[96,69466,69467,69469,69471,69474,69476],{"class":98,"line":7994},[96,69468,55281],{"class":106},[96,69470,253],{"class":51279},[96,69472,69473],{"class":106},">薪资\u003C\u002F",[96,69475,253],{"class":51279},[96,69477,51286],{"class":106},[96,69479,69480,69482,69484,69487,69489],{"class":98,"line":7999},[96,69481,55281],{"class":106},[96,69483,253],{"class":51279},[96,69485,69486],{"class":106},">就业城市\u003C\u002F",[96,69488,253],{"class":51279},[96,69490,51286],{"class":106},[96,69492,69493,69495,69497,69500,69502],{"class":98,"line":8005},[96,69494,55281],{"class":106},[96,69496,253],{"class":51279},[96,69498,69499],{"class":106},">操作\u003C\u002F",[96,69501,253],{"class":51279},[96,69503,51286],{"class":106},[96,69505,69506,69508,69510],{"class":98,"line":8017},[96,69507,55386],{"class":106},[96,69509,250],{"class":51279},[96,69511,51286],{"class":106},[96,69513,69514,69516,69518],{"class":98,"line":8029},[96,69515,51755],{"class":106},[96,69517,247],{"class":51279},[96,69519,51286],{"class":106},[96,69521,69522,69524,69526],{"class":98,"line":8041},[96,69523,51320],{"class":106},[96,69525,291],{"class":51279},[96,69527,51286],{"class":106},[96,69529,69530],{"class":98,"line":9700},[96,69531,69532],{"class":165},"      \u003C!-- \n",[96,69534,69535],{"class":98,"line":9725},[96,69536,69537],{"class":165},"        \u003Ctr>\n",[96,69539,69540],{"class":98,"line":9748},[96,69541,69542],{"class":165},"          \u003Ctd>1001\u003C\u002Ftd>\n",[96,69544,69545],{"class":98,"line":9772},[96,69546,69547],{"class":165},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[96,69549,69550],{"class":98,"line":9777},[96,69551,69552],{"class":165},"          \u003Ctd>19\u003C\u002Ftd>\n",[96,69554,69555],{"class":98,"line":9782},[96,69556,69557],{"class":165},"          \u003Ctd>男\u003C\u002Ftd>\n",[96,69559,69560],{"class":98,"line":9787},[96,69561,69562],{"class":165},"          \u003Ctd>15000\u003C\u002Ftd>\n",[96,69564,69565],{"class":98,"line":9796},[96,69566,69567],{"class":165},"          \u003Ctd>上海\u003C\u002Ftd>\n",[96,69569,69570],{"class":98,"line":9801},[96,69571,69572],{"class":165},"          \u003Ctd>\n",[96,69574,69575],{"class":98,"line":9807},[96,69576,69577],{"class":165},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[96,69579,69580],{"class":98,"line":9828},[96,69581,69582],{"class":165},"          \u003C\u002Ftd>\n",[96,69584,69585],{"class":98,"line":9834},[96,69586,69587],{"class":165},"        \u003C\u002Ftr> \n",[96,69589,69590],{"class":98,"line":9848},[96,69591,69592],{"class":165},"        -->\n",[96,69594,69595,69597,69599],{"class":98,"line":9854},[96,69596,51755],{"class":106},[96,69598,291],{"class":51279},[96,69600,51286],{"class":106},[96,69602,69603,69605,69607],{"class":98,"line":9881},[96,69604,52396],{"class":106},[96,69606,244],{"class":51279},[96,69608,51286],{"class":106},[96,69610,69611,69613,69615],{"class":98,"line":9890},[96,69612,52123],{"class":106},[96,69614,51792],{"class":51279},[96,69616,51286],{"class":106},[96,69618,69619],{"class":98,"line":9896},[96,69620,59937],{"class":165},[96,69622,69623,69625,69628,69630,69632,69634,69636,69639],{"class":98,"line":9904},[96,69624,11205],{"class":102},[96,69626,69627],{"class":155}," uname",[96,69629,13548],{"class":102},[96,69631,54375],{"class":106},[96,69633,54378],{"class":1946},[96,69635,107],{"class":106},[96,69637,69638],{"class":211},"'.uname'",[96,69640,113],{"class":106},[96,69642,69643,69645,69647,69649,69651,69653,69655,69658],{"class":98,"line":9909},[96,69644,11205],{"class":102},[96,69646,15673],{"class":155},[96,69648,13548],{"class":102},[96,69650,54375],{"class":106},[96,69652,54378],{"class":1946},[96,69654,107],{"class":106},[96,69656,69657],{"class":211},"'.age'",[96,69659,113],{"class":106},[96,69661,69662,69664,69667,69669,69671,69673,69675,69678],{"class":98,"line":16588},[96,69663,11205],{"class":102},[96,69665,69666],{"class":155}," gender",[96,69668,13548],{"class":102},[96,69670,54375],{"class":106},[96,69672,54378],{"class":1946},[96,69674,107],{"class":106},[96,69676,69677],{"class":211},"'.gender'",[96,69679,113],{"class":106},[96,69681,69682,69684,69687,69689,69691,69693,69695,69698],{"class":98,"line":16594},[96,69683,11205],{"class":102},[96,69685,69686],{"class":155}," salary",[96,69688,13548],{"class":102},[96,69690,54375],{"class":106},[96,69692,54378],{"class":1946},[96,69694,107],{"class":106},[96,69696,69697],{"class":211},"'.salary'",[96,69699,113],{"class":106},[96,69701,69702,69704,69707,69709,69711,69713,69715,69718],{"class":98,"line":16617},[96,69703,11205],{"class":102},[96,69705,69706],{"class":155}," city",[96,69708,13548],{"class":102},[96,69710,54375],{"class":106},[96,69712,54378],{"class":1946},[96,69714,107],{"class":106},[96,69716,69717],{"class":211},"'.city'",[96,69719,113],{"class":106},[96,69721,69722,69724,69727,69729,69731,69733,69735,69738],{"class":98,"line":16623},[96,69723,11205],{"class":102},[96,69725,69726],{"class":155}," tbody",[96,69728,13548],{"class":102},[96,69730,54375],{"class":106},[96,69732,54378],{"class":1946},[96,69734,107],{"class":106},[96,69736,69737],{"class":211},"'tbody'",[96,69739,113],{"class":106},[96,69741,69742],{"class":98,"line":16646},[96,69743,2383],{"emptyLinePlaceholder":23},[96,69745,69746],{"class":98,"line":16660},[96,69747,69748],{"class":165},"    \u002F\u002F 获取所有带有name属性的元素\n",[96,69750,69751,69753,69756,69758,69760,69762,69764,69767],{"class":98,"line":16680},[96,69752,11205],{"class":102},[96,69754,69755],{"class":155}," items",[96,69757,13548],{"class":102},[96,69759,54375],{"class":106},[96,69761,55660],{"class":1946},[96,69763,107],{"class":106},[96,69765,69766],{"class":211},"'[name]'",[96,69768,113],{"class":106},[96,69770,69771],{"class":98,"line":16686},[96,69772,69773],{"class":165},"    \u002F\u002F 声明一个空的数组\n",[96,69775,69776,69778,69780,69782],{"class":98,"line":16697},[96,69777,11205],{"class":102},[96,69779,57674],{"class":155},[96,69781,13548],{"class":102},[96,69783,51817],{"class":106},[96,69785,69786],{"class":98,"line":16720},[96,69787,69788],{"class":165},"    \u002F\u002F 1.录入模块\n",[96,69790,69791],{"class":98,"line":16742},[96,69792,69793],{"class":165},"    \u002F\u002F 1.1这是一个表单提交事件\n",[96,69795,69796,69798,69801,69803,69805,69807,69809,69812],{"class":98,"line":16747},[96,69797,11205],{"class":102},[96,69799,69800],{"class":155}," info",[96,69802,13548],{"class":102},[96,69804,54375],{"class":106},[96,69806,54378],{"class":1946},[96,69808,107],{"class":106},[96,69810,69811],{"class":211},"'.info'",[96,69813,113],{"class":106},[96,69815,69816,69819,69821,69823,69826,69828,69830,69832,69834],{"class":98,"line":16753},[96,69817,69818],{"class":106},"    info.",[96,69820,57792],{"class":1946},[96,69822,107],{"class":106},[96,69824,69825],{"class":211},"'submit'",[96,69827,12419],{"class":106},[96,69829,54428],{"class":102},[96,69831,1641],{"class":106},[96,69833,181],{"class":5200},[96,69835,12426],{"class":106},[96,69837,69838],{"class":98,"line":16767},[96,69839,69840],{"class":165},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[96,69842,69843,69846,69849],{"class":98,"line":16780},[96,69844,69845],{"class":106},"      e.",[96,69847,69848],{"class":1946},"preventDefault",[96,69850,1959],{"class":106},[96,69852,69853],{"class":98,"line":16785},[96,69854,59991],{"class":165},[96,69856,69857],{"class":98,"line":16799},[96,69858,2383],{"emptyLinePlaceholder":23},[96,69860,69861],{"class":98,"line":16804},[96,69862,69863],{"class":165},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[96,69865,69866],{"class":98,"line":16810},[96,69867,69868],{"class":165},"      \u002F\u002F 先遍历循环\n",[96,69870,69871,69873,69875,69877,69879,69881,69883,69885,69887,69890,69892,69894,69896],{"class":98,"line":16815},[96,69872,52263],{"class":102},[96,69874,1641],{"class":106},[96,69876,51826],{"class":102},[96,69878,9422],{"class":106},[96,69880,152],{"class":102},[96,69882,4076],{"class":155},[96,69884,9429],{"class":106},[96,69886,1017],{"class":102},[96,69888,69889],{"class":106}," items.",[96,69891,51947],{"class":155},[96,69893,3197],{"class":106},[96,69895,2275],{"class":102},[96,69897,12426],{"class":106},[96,69899,69900,69902,69905,69907,69910],{"class":98,"line":16829},[96,69901,2480],{"class":102},[96,69903,69904],{"class":106}," (items[i].value ",[96,69906,54465],{"class":102},[96,69908,69909],{"class":211}," ''",[96,69911,12426],{"class":106},[96,69913,69914,69917,69920,69922,69925],{"class":98,"line":16834},[96,69915,69916],{"class":102},"          return",[96,69918,69919],{"class":1946}," alert",[96,69921,107],{"class":106},[96,69923,69924],{"class":211},"'输入内容不能为空'",[96,69926,113],{"class":106},[96,69928,69929],{"class":98,"line":16839},[96,69930,2512],{"class":106},[96,69932,69933],{"class":98,"line":16853},[96,69934,52377],{"class":106},[96,69936,69937],{"class":98,"line":16865},[96,69938,2383],{"emptyLinePlaceholder":23},[96,69940,69941],{"class":98,"line":16870},[96,69942,69943],{"class":165},"      \u002F\u002F 创建新的对象\n",[96,69945,69946,69948,69951,69953],{"class":98,"line":16883},[96,69947,58207],{"class":102},[96,69949,69950],{"class":155}," obj",[96,69952,13548],{"class":102},[96,69954,15556],{"class":106},[96,69956,69957,69960,69962,69964,69966],{"class":98,"line":16888},[96,69958,69959],{"class":106},"        stuID: arr.",[96,69961,51947],{"class":155},[96,69963,45545],{"class":102},[96,69965,25097],{"class":155},[96,69967,31445],{"class":106},[96,69969,69970],{"class":98,"line":16893},[96,69971,69972],{"class":106},"        uname: uname.value,\n",[96,69974,69975],{"class":98,"line":16898},[96,69976,69977],{"class":106},"        age: age.value,\n",[96,69979,69980],{"class":98,"line":16911},[96,69981,69982],{"class":106},"        gender: gender.value,\n",[96,69984,69985],{"class":98,"line":16916},[96,69986,69987],{"class":106},"        salary: salary.value,\n",[96,69989,69990],{"class":98,"line":32612},[96,69991,69992],{"class":106},"        city: city.value\n",[96,69994,69995],{"class":98,"line":32618},[96,69996,52377],{"class":106},[96,69998,69999],{"class":98,"line":32624},[96,70000,70001],{"class":165},"      \u002F\u002F console.log(obj);\n",[96,70003,70004],{"class":98,"line":32630},[96,70005,70006],{"class":165},"      \u002F\u002F 追加到数组里面\n",[96,70008,70009,70011,70013],{"class":98,"line":32636},[96,70010,57986],{"class":106},[96,70012,51863],{"class":1946},[96,70014,70015],{"class":106},"(obj)\n",[96,70017,70018],{"class":98,"line":32647},[96,70019,70020],{"class":165},"      \u002F\u002F console.log(arr);\n",[96,70022,70023],{"class":98,"line":32653},[96,70024,70025],{"class":165},"      \u002F\u002F 清空表单  reset重置表单\n",[96,70027,70028,70031,70033,70036],{"class":98,"line":32673},[96,70029,70030],{"class":155},"      this",[96,70032,665],{"class":106},[96,70034,70035],{"class":1946},"reset",[96,70037,1959],{"class":106},[96,70039,70040],{"class":98,"line":32679},[96,70041,70042],{"class":165},"      \u002F\u002F 调用渲染函数\n",[96,70044,70045,70048],{"class":98,"line":32690},[96,70046,70047],{"class":1946},"      render",[96,70049,1959],{"class":106},[96,70051,70052],{"class":98,"line":32696},[96,70053,33440],{"class":106},[96,70055,70056],{"class":98,"line":32702},[96,70057,70058],{"class":165},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[96,70060,70061,70064,70067],{"class":98,"line":32708},[96,70062,70063],{"class":102},"    function",[96,70065,70066],{"class":1946}," render",[96,70068,10837],{"class":106},[96,70070,70071],{"class":98,"line":32714},[96,70072,70073],{"class":165},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[96,70075,70076,70079,70081],{"class":98,"line":32720},[96,70077,70078],{"class":106},"      tbody.innerHTML ",[96,70080,152],{"class":102},[96,70082,70083],{"class":211}," ''\n",[96,70085,70086],{"class":98,"line":32726},[96,70087,70088],{"class":165},"      \u002F\u002F 遍历数组\n",[96,70090,70091,70093,70095,70097,70099,70101,70103,70105,70107,70109,70111,70113,70115],{"class":98,"line":32732},[96,70092,52263],{"class":102},[96,70094,1641],{"class":106},[96,70096,51826],{"class":102},[96,70098,9422],{"class":106},[96,70100,152],{"class":102},[96,70102,4076],{"class":155},[96,70104,9429],{"class":106},[96,70106,1017],{"class":102},[96,70108,51944],{"class":106},[96,70110,51947],{"class":155},[96,70112,3197],{"class":106},[96,70114,2275],{"class":102},[96,70116,12426],{"class":106},[96,70118,70119,70121,70124,70126,70128,70131,70133,70136],{"class":98,"line":32752},[96,70120,61249],{"class":102},[96,70122,70123],{"class":155}," tr",[96,70125,13548],{"class":102},[96,70127,54375],{"class":106},[96,70129,70130],{"class":1946},"createElement",[96,70132,107],{"class":106},[96,70134,70135],{"class":211},"'tr'",[96,70137,113],{"class":106},[96,70139,70140,70143,70145],{"class":98,"line":32758},[96,70141,70142],{"class":106},"        tr.innerHTML ",[96,70144,152],{"class":102},[96,70146,70147],{"class":211}," `\n",[96,70149,70150,70153,70155,70157,70159,70162,70165],{"class":98,"line":32774},[96,70151,70152],{"class":211},"        \u003Ctd>${",[96,70154,3863],{"class":106},[96,70156,997],{"class":211},[96,70158,548],{"class":106},[96,70160,70161],{"class":211},"].",[96,70163,70164],{"class":106},"stuID",[96,70166,70167],{"class":211},"}\u003C\u002Ftd>\n",[96,70169,70170,70173,70175,70177,70179,70181,70184],{"class":98,"line":32780},[96,70171,70172],{"class":211},"          \u003Ctd>${",[96,70174,3863],{"class":106},[96,70176,997],{"class":211},[96,70178,548],{"class":106},[96,70180,70161],{"class":211},[96,70182,70183],{"class":106},"uname",[96,70185,70167],{"class":211},[96,70187,70188,70190,70192,70194,70196,70198,70201],{"class":98,"line":32794},[96,70189,70172],{"class":211},[96,70191,3863],{"class":106},[96,70193,997],{"class":211},[96,70195,548],{"class":106},[96,70197,70161],{"class":211},[96,70199,70200],{"class":106},"age",[96,70202,70167],{"class":211},[96,70204,70205,70207,70209,70211,70213,70215,70218],{"class":98,"line":32800},[96,70206,70172],{"class":211},[96,70208,3863],{"class":106},[96,70210,997],{"class":211},[96,70212,548],{"class":106},[96,70214,70161],{"class":211},[96,70216,70217],{"class":106},"gender",[96,70219,70167],{"class":211},[96,70221,70222,70224,70226,70228,70230,70232,70235],{"class":98,"line":32815},[96,70223,70172],{"class":211},[96,70225,3863],{"class":106},[96,70227,997],{"class":211},[96,70229,548],{"class":106},[96,70231,70161],{"class":211},[96,70233,70234],{"class":106},"salary",[96,70236,70167],{"class":211},[96,70238,70239,70241,70243,70245,70247,70249,70252],{"class":98,"line":32821},[96,70240,70172],{"class":211},[96,70242,3863],{"class":106},[96,70244,997],{"class":211},[96,70246,548],{"class":106},[96,70248,70161],{"class":211},[96,70250,70251],{"class":106},"city",[96,70253,70167],{"class":211},[96,70255,70256],{"class":98,"line":32830},[96,70257,69572],{"class":211},[96,70259,70260,70263,70265],{"class":98,"line":32836},[96,70261,70262],{"class":211},"            \u003Ca href=\"javascript:\" data-id=${",[96,70264,548],{"class":106},[96,70266,70267],{"class":211},"}>删除\u003C\u002Fa>\n",[96,70269,70270],{"class":98,"line":32845},[96,70271,70272],{"class":211},"          \u003C\u002Ftd> \n",[96,70274,70275],{"class":98,"line":32851},[96,70276,70277],{"class":211},"          `\n",[96,70279,70280],{"class":98,"line":32857},[96,70281,70282],{"class":165},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[96,70284,70285,70288,70291],{"class":98,"line":32866},[96,70286,70287],{"class":106},"        tbody.",[96,70289,70290],{"class":1946},"appendChild",[96,70292,70293],{"class":106},"(tr)\n",[96,70295,70296],{"class":98,"line":32872},[96,70297,52377],{"class":106},[96,70299,70300],{"class":98,"line":32883},[96,70301,2170],{"class":106},[96,70303,70304],{"class":98,"line":32889},[96,70305,2383],{"emptyLinePlaceholder":23},[96,70307,70308],{"class":98,"line":32908},[96,70309,70310],{"class":165},"    \u002F\u002F 3.删除委托\n",[96,70312,70313],{"class":98,"line":32914},[96,70314,70315],{"class":165},"    \u002F\u002F 3.1 事件委托 tbody\n",[96,70317,70318,70321,70323,70325,70327,70329,70331,70333,70335],{"class":98,"line":32925},[96,70319,70320],{"class":106},"    tbody.",[96,70322,57792],{"class":1946},[96,70324,107],{"class":106},[96,70326,57797],{"class":211},[96,70328,12419],{"class":106},[96,70330,54428],{"class":102},[96,70332,1641],{"class":106},[96,70334,181],{"class":5200},[96,70336,12426],{"class":106},[96,70338,70339,70341,70343,70345,70347],{"class":98,"line":32931},[96,70340,54459],{"class":102},[96,70342,67013],{"class":106},[96,70344,54465],{"class":102},[96,70346,68235],{"class":211},[96,70348,12426],{"class":106},[96,70350,70351],{"class":98,"line":32951},[96,70352,70353],{"class":165},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[96,70355,70356],{"class":98,"line":32967},[96,70357,70358],{"class":165},"        \u002F\u002F console.log(e.target.dataset.id);\n",[96,70360,70361],{"class":98,"line":32973},[96,70362,70363],{"class":165},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[96,70365,70366,70369,70371,70374,70376],{"class":98,"line":32987},[96,70367,70368],{"class":106},"        arr.",[96,70370,57989],{"class":1946},[96,70372,70373],{"class":106},"(e.target.dataset.id, ",[96,70375,324],{"class":155},[96,70377,113],{"class":106},[96,70379,70380],{"class":98,"line":32993},[96,70381,70382],{"class":165},"        \u002F\u002F 重新渲染一次\n",[96,70384,70385,70388],{"class":98,"line":32999},[96,70386,70387],{"class":1946},"        render",[96,70389,1959],{"class":106},[96,70391,70392],{"class":98,"line":33010},[96,70393,52377],{"class":106},[96,70395,70396],{"class":98,"line":33016},[96,70397,33440],{"class":106},[96,70399,70400,70402,70404],{"class":98,"line":33022},[96,70401,52396],{"class":106},[96,70403,51792],{"class":51279},[96,70405,51286],{"class":106},[96,70407,70408],{"class":98,"line":33032},[96,70409,2383],{"emptyLinePlaceholder":23},[96,70411,70412,70414,70416],{"class":98,"line":33038},[96,70413,51764],{"class":106},[96,70415,51779],{"class":51279},[96,70417,51286],{"class":106},[96,70419,70420],{"class":98,"line":33049},[96,70421,2383],{"emptyLinePlaceholder":23},[96,70423,70424,70426,70428],{"class":98,"line":33055},[96,70425,51764],{"class":106},[96,70427,50614],{"class":51279},[96,70429,51286],{"class":106},[14,70431,70432],{},"样式：",[87,70434,70438],{"className":70435,"code":70436,"language":70437,"meta":18,"style":18},"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",[93,70439,70440,70445,70455,70464,70468,70472,70477,70487,70492,70496,70501,70511,70516,70525,70529,70533,70538,70543,70553,70563,70568,70572,70577,70586,70596,70601,70611,70621,70625,70630,70638,70642,70647,70652,70657,70665,70674,70678,70683,70692,70696,70701,70710,70714,70719,70728,70737,70745,70749,70754,70763,70773,70782,70792,70798,70807,70817,70827,70831,70836,70845,70853,70863,70871,70880,70889,70899,70907,70911,70916,70925],{"__ignoreMap":18},[96,70441,70442],{"class":98,"line":99},[96,70443,70444],{"class":106},"* {\n",[96,70446,70447,70450,70452],{"class":98,"line":19},[96,70448,70449],{"class":51279},"  margin",[96,70451,51416],{"class":106},[96,70453,70454],{"class":211},"0;\n",[96,70456,70457,70460,70462],{"class":98,"line":1162},[96,70458,70459],{"class":211},"  padding",[96,70461,51416],{"class":106},[96,70463,70454],{"class":211},[96,70465,70466],{"class":98,"line":1177},[96,70467,1548],{"class":106},[96,70469,70470],{"class":98,"line":1183},[96,70471,2383],{"emptyLinePlaceholder":23},[96,70473,70474],{"class":98,"line":1197},[96,70475,70476],{"class":211},"a {\n",[96,70478,70479,70482,70484],{"class":98,"line":1203},[96,70480,70481],{"class":51279},"  text-decoration",[96,70483,51416],{"class":106},[96,70485,70486],{"class":211},"none;\n",[96,70488,70489],{"class":98,"line":1294},[96,70490,70491],{"class":211},"  color:#721c24;\n",[96,70493,70494],{"class":98,"line":1300},[96,70495,1548],{"class":106},[96,70497,70498],{"class":98,"line":1312},[96,70499,70500],{"class":211},"h1 {\n",[96,70502,70503,70506,70508],{"class":98,"line":1595},[96,70504,70505],{"class":51279},"  text-align",[96,70507,51416],{"class":106},[96,70509,70510],{"class":211},"center;\n",[96,70512,70513],{"class":98,"line":1600},[96,70514,70515],{"class":211},"  color:#333;\n",[96,70517,70518,70520,70522],{"class":98,"line":1606},[96,70519,70449],{"class":51279},[96,70521,51416],{"class":106},[96,70523,70524],{"class":211},"20px 0;\n",[96,70526,70527],{"class":98,"line":1611},[96,70528,2657],{"class":106},[96,70530,70531],{"class":98,"line":1625},[96,70532,1548],{"class":106},[96,70534,70535],{"class":98,"line":1630},[96,70536,70537],{"class":211},"table {\n",[96,70539,70540],{"class":98,"line":1636},[96,70541,70542],{"class":211},"  margin:0 auto;\n",[96,70544,70545,70548,70550],{"class":98,"line":1657},[96,70546,70547],{"class":51279},"  width",[96,70549,51416],{"class":106},[96,70551,70552],{"class":211},"800px;\n",[96,70554,70555,70558,70560],{"class":98,"line":1662},[96,70556,70557],{"class":51279},"  border-collapse",[96,70559,51416],{"class":106},[96,70561,70562],{"class":211},"collapse;\n",[96,70564,70565],{"class":98,"line":1676},[96,70566,70567],{"class":211},"  color:#004085;\n",[96,70569,70570],{"class":98,"line":1681},[96,70571,1548],{"class":106},[96,70573,70574],{"class":98,"line":1710},[96,70575,70576],{"class":211},"th {\n",[96,70578,70579,70581,70583],{"class":98,"line":1715},[96,70580,70459],{"class":51279},[96,70582,51416],{"class":106},[96,70584,70585],{"class":211},"10px;\n",[96,70587,70588,70591,70593],{"class":98,"line":1732},[96,70589,70590],{"class":51279},"  background",[96,70592,51416],{"class":106},[96,70594,70595],{"class":165},"#cfe5ff;\n",[96,70597,70598],{"class":98,"line":1737},[96,70599,70600],{"class":106},"  \n",[96,70602,70603,70606,70608],{"class":98,"line":1742},[96,70604,70605],{"class":51279},"  font-size",[96,70607,51416],{"class":106},[96,70609,70610],{"class":211},"20px;\n",[96,70612,70613,70616,70618],{"class":98,"line":1747},[96,70614,70615],{"class":51279},"  font-weight",[96,70617,51416],{"class":106},[96,70619,70620],{"class":211},"400;\n",[96,70622,70623],{"class":98,"line":1761},[96,70624,1548],{"class":106},[96,70626,70627],{"class":98,"line":1766},[96,70628,70629],{"class":211},"td,th {\n",[96,70631,70632,70635],{"class":98,"line":2560},[96,70633,70634],{"class":211},"  border:1px solid",[96,70636,70637],{"class":165}," #b8daff;\n",[96,70639,70640],{"class":98,"line":2574},[96,70641,1548],{"class":106},[96,70643,70644],{"class":98,"line":2582},[96,70645,70646],{"class":211},"td {\n",[96,70648,70649],{"class":98,"line":2587},[96,70650,70651],{"class":211},"  padding:10px;\n",[96,70653,70654],{"class":98,"line":2593},[96,70655,70656],{"class":211},"  color:#666;\n",[96,70658,70659,70661,70663],{"class":98,"line":2599},[96,70660,70505],{"class":51279},[96,70662,51416],{"class":106},[96,70664,70510],{"class":211},[96,70666,70667,70669,70671],{"class":98,"line":2604},[96,70668,70605],{"class":51279},[96,70670,51416],{"class":106},[96,70672,70673],{"class":211},"16px;\n",[96,70675,70676],{"class":98,"line":7932},[96,70677,1548],{"class":106},[96,70679,70680],{"class":98,"line":7956},[96,70681,70682],{"class":211},"tbody tr {\n",[96,70684,70685,70687,70689],{"class":98,"line":7961},[96,70686,70590],{"class":51279},[96,70688,51416],{"class":106},[96,70690,70691],{"class":165},"#fff;\n",[96,70693,70694],{"class":98,"line":7967},[96,70695,1548],{"class":106},[96,70697,70698],{"class":98,"line":7994},[96,70699,70700],{"class":211},"tbody tr:hover {\n",[96,70702,70703,70705,70707],{"class":98,"line":7999},[96,70704,70590],{"class":51279},[96,70706,51416],{"class":106},[96,70708,70709],{"class":165},"#e1ecf8;\n",[96,70711,70712],{"class":98,"line":8005},[96,70713,1548],{"class":106},[96,70715,70716],{"class":98,"line":8017},[96,70717,70718],{"class":211},".info {\n",[96,70720,70721,70723,70725],{"class":98,"line":8029},[96,70722,70547],{"class":51279},[96,70724,51416],{"class":106},[96,70726,70727],{"class":211},"900px;\n",[96,70729,70730,70732,70734],{"class":98,"line":8041},[96,70731,70449],{"class":51279},[96,70733,51416],{"class":106},[96,70735,70736],{"class":211},"50px auto;\n",[96,70738,70739,70741,70743],{"class":98,"line":9700},[96,70740,70505],{"class":51279},[96,70742,51416],{"class":106},[96,70744,70510],{"class":211},[96,70746,70747],{"class":98,"line":9725},[96,70748,1548],{"class":106},[96,70750,70751],{"class":98,"line":9748},[96,70752,70753],{"class":211},".info  input, .info select {\n",[96,70755,70756,70758,70760],{"class":98,"line":9772},[96,70757,70547],{"class":51279},[96,70759,51416],{"class":106},[96,70761,70762],{"class":211},"80px;\n",[96,70764,70765,70768,70770],{"class":98,"line":9777},[96,70766,70767],{"class":51279},"  height",[96,70769,51416],{"class":106},[96,70771,70772],{"class":211},"27px;\n",[96,70774,70775,70778,70780],{"class":98,"line":9782},[96,70776,70777],{"class":51279},"  outline",[96,70779,51416],{"class":106},[96,70781,70486],{"class":211},[96,70783,70784,70787,70789],{"class":98,"line":9787},[96,70785,70786],{"class":51279},"  border-radius",[96,70788,51416],{"class":106},[96,70790,70791],{"class":211},"5px;\n",[96,70793,70794,70796],{"class":98,"line":9796},[96,70795,70634],{"class":211},[96,70797,70637],{"class":165},[96,70799,70800,70803,70805],{"class":98,"line":9801},[96,70801,70802],{"class":51279},"  padding-left",[96,70804,51416],{"class":106},[96,70806,70791],{"class":211},[96,70808,70809,70812,70814],{"class":98,"line":9807},[96,70810,70811],{"class":51279},"  box-sizing",[96,70813,51416],{"class":106},[96,70815,70816],{"class":211},"border-box;\n",[96,70818,70819,70822,70824],{"class":98,"line":9828},[96,70820,70821],{"class":51279},"  margin-right",[96,70823,51416],{"class":106},[96,70825,70826],{"class":211},"15px;\n",[96,70828,70829],{"class":98,"line":9834},[96,70830,1548],{"class":106},[96,70832,70833],{"class":98,"line":9848},[96,70834,70835],{"class":211},".info button {\n",[96,70837,70838,70840,70842],{"class":98,"line":9854},[96,70839,70547],{"class":51279},[96,70841,51416],{"class":106},[96,70843,70844],{"class":211},"60px;\n",[96,70846,70847,70849,70851],{"class":98,"line":9881},[96,70848,70767],{"class":51279},[96,70850,51416],{"class":106},[96,70852,70772],{"class":211},[96,70854,70855,70858,70860],{"class":98,"line":9890},[96,70856,70857],{"class":51279},"  background-color",[96,70859,51416],{"class":106},[96,70861,70862],{"class":165},"#004085;\n",[96,70864,70865,70867,70869],{"class":98,"line":9896},[96,70866,70777],{"class":51279},[96,70868,51416],{"class":106},[96,70870,70486],{"class":211},[96,70872,70873,70876,70878],{"class":98,"line":9904},[96,70874,70875],{"class":51279},"  border",[96,70877,51416],{"class":106},[96,70879,70454],{"class":211},[96,70881,70882,70885,70887],{"class":98,"line":9909},[96,70883,70884],{"class":51279},"  color",[96,70886,51416],{"class":106},[96,70888,70691],{"class":165},[96,70890,70891,70894,70896],{"class":98,"line":16588},[96,70892,70893],{"class":51279},"  cursor",[96,70895,51416],{"class":106},[96,70897,70898],{"class":211},"pointer;\n",[96,70900,70901,70903,70905],{"class":98,"line":16594},[96,70902,70786],{"class":51279},[96,70904,51416],{"class":106},[96,70906,70791],{"class":211},[96,70908,70909],{"class":98,"line":16617},[96,70910,1548],{"class":106},[96,70912,70913],{"class":98,"line":16623},[96,70914,70915],{"class":211},".info .age {\n",[96,70917,70918,70920,70922],{"class":98,"line":16646},[96,70919,70547],{"class":51279},[96,70921,51416],{"class":106},[96,70923,70924],{"class":211},"50px;\n",[96,70926,70927],{"class":98,"line":16660},[96,70928,1548],{"class":106},[14,70930,70931],{},"思路：",[14,70933,70934],{},[1445,70935],{"alt":18,"src":70936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[14,70938,70939],{},[1445,70940],{"alt":18,"src":70941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[14,70943,70944],{},[1445,70945],{"alt":18,"src":70946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[67,70948,70950],{"id":70949},"_3315-重绘回流","3.3.15 重绘回流",[14,70952,70953],{},[1445,70954],{"alt":18,"src":70955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[14,70957,70958],{},[1445,70959],{"alt":18,"src":70960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[14,70962,70963],{},[1445,70964],{"alt":18,"src":70965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[38,70967,70969],{"id":70968},"_34-bom","3.4 BOM",[14,70971,70972],{},[1445,70973],{"alt":18,"src":70974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[14,70976,70977],{},"平时写的document省略了window而已，实际上是window.document",[14,70979,70980],{},"函数也是这样，调用的时候实际为window.fn()",[14,70982,70983],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[14,70985,70986],{},"window大部分情况下可以省略",[67,70988,70990],{"id":70989},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[14,70992,70993],{},"只执行一次",[14,70995,70996],{},[1445,70997],{"alt":18,"src":70998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[14,71000,71001],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[14,71003,71004],{},[1445,71005],{"alt":18,"src":71006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[67,71008,71010],{"id":71009},"_342-js执行机制","3.4.2 JS执行机制",[14,71012,71013],{},[1445,71014],{"alt":18,"src":71015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[14,71017,71018],{},"两个的结果都是1111 3333 2222",[14,71020,71021],{},[1445,71022],{"alt":18,"src":71023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[14,71025,71026],{},[1445,71027],{"alt":18,"src":71028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[14,71030,71031],{},[1445,71032],{"alt":18,"src":71033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[14,71035,71036],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[14,71038,71039],{},"工作流程：",[14,71041,71042],{},[1445,71043],{"alt":18,"src":71044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[14,71046,71047],{},[1445,71048],{"alt":18,"src":71049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[14,71051,71052],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[14,71054,71055],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[67,71057,71059],{"id":71058},"_343-location对象","3.4.3 location对象",[14,71061,71062],{},"location对象属于window这个全局对象下的，可以 省略window",[14,71064,71065],{},[1445,71066],{"alt":18,"src":71067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[14,71069,71070],{},"href可以跳转页面",[50,71072,71073],{},[53,71074,71075],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[14,71077,71078],{},"search得到提交信息之后网站后边的地址",[14,71080,71081],{},[1445,71082],{"alt":18,"src":71083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[14,71085,71086],{},[1445,71087],{"alt":18,"src":71088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[50,71090,71091],{"start":19},[53,71092,71093],{},"hash:这个获取单页面应用#后边的地址",[14,71095,71096],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[14,71098,71099],{},[1445,71100],{"alt":18,"src":71101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[87,71103,71105],{"className":53046,"code":71104,"language":53048,"meta":18,"style":18},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[93,71106,71107,71127,71147],{"__ignoreMap":18},[96,71108,71109,71111,71113,71115,71117,71120,71123,71125],{"class":98,"line":99},[96,71110,52123],{"class":106},[96,71112,345],{"class":51279},[96,71114,61036],{"class":1946},[96,71116,152],{"class":106},[96,71118,71119],{"class":211},"\"#\u002Fmy\"",[96,71121,71122],{"class":106},">我的\u003C\u002F",[96,71124,345],{"class":51279},[96,71126,51286],{"class":106},[96,71128,71129,71131,71133,71135,71137,71140,71143,71145],{"class":98,"line":19},[96,71130,52123],{"class":106},[96,71132,345],{"class":51279},[96,71134,61036],{"class":1946},[96,71136,152],{"class":106},[96,71138,71139],{"class":211},"\"#\u002Ffriend\"",[96,71141,71142],{"class":106},">关注\u003C\u002F",[96,71144,345],{"class":51279},[96,71146,51286],{"class":106},[96,71148,71149,71151,71153,71155,71157,71160,71163,71165],{"class":98,"line":1162},[96,71150,52123],{"class":106},[96,71152,345],{"class":51279},[96,71154,61036],{"class":1946},[96,71156,152],{"class":106},[96,71158,71159],{"class":211},"\"#\u002Fdownload\"",[96,71161,71162],{"class":106},">下载\u003C\u002F",[96,71164,345],{"class":51279},[96,71166,51286],{"class":106},[14,71168,71169],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[50,71171,71172],{"start":1162},[53,71173,71174,71175,71177,71178,71180],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53695,71176],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53695,71179],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[67,71182,71184],{"id":71183},"_345-navigator对象","3.4.5 navigator对象",[14,71186,71187],{},[1445,71188],{"alt":18,"src":71189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[87,71191,71195],{"className":71192,"code":71193,"language":71194,"meta":18,"style":18},"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",[93,71196,71197,71202,71213,71225,71230,71281,71322,71327,71340,71352,71357],{"__ignoreMap":18},[96,71198,71199],{"class":98,"line":99},[96,71200,71201],{"class":165},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[96,71203,71204,71206,71208,71210],{"class":98,"line":19},[96,71205,333],{"class":102},[96,71207,107],{"class":106},[96,71209,54428],{"class":102},[96,71211,71212],{"class":106}," () { \n",[96,71214,71215,71217,71220,71222],{"class":98,"line":1162},[96,71216,6776],{"class":102},[96,71218,71219],{"class":155}," userAgent",[96,71221,13548],{"class":102},[96,71223,71224],{"class":106}," navigator.userAgent \n",[96,71226,71227],{"class":98,"line":1177},[96,71228,71229],{"class":165},"\u002F\u002F 验证是否为Android或iPhone \n",[96,71231,71232,71234,71237,71239,71242,71245,71247,71249,71252,71254,71257,71261,71263,71265,71267,71270,71272,71274,71276,71278],{"class":98,"line":1183},[96,71233,6776],{"class":102},[96,71235,71236],{"class":155}," android",[96,71238,13548],{"class":102},[96,71240,71241],{"class":106}," userAgent.",[96,71243,71244],{"class":1946},"match",[96,71246,107],{"class":106},[96,71248,691],{"class":211},[96,71250,71251],{"class":47956},"(Android);",[96,71253,1093],{"class":102},[96,71255,71256],{"class":155},"[\\s",[96,71258,71260],{"class":71259},"snhLl","\\\u002F",[96,71262,1047],{"class":155},[96,71264,588],{"class":102},[96,71266,107],{"class":47956},[96,71268,71269],{"class":155},"[\\d.]",[96,71271,588],{"class":102},[96,71273,536],{"class":47956},[96,71275,1093],{"class":102},[96,71277,691],{"class":211},[96,71279,71280],{"class":106},") \n",[96,71282,71283,71285,71288,71290,71292,71294,71296,71298,71301,71304,71307,71309,71311,71314,71316,71318,71320],{"class":98,"line":1197},[96,71284,6776],{"class":102},[96,71286,71287],{"class":155}," iphone",[96,71289,13548],{"class":102},[96,71291,71241],{"class":106},[96,71293,71244],{"class":1946},[96,71295,107],{"class":106},[96,71297,691],{"class":211},[96,71299,71300],{"class":47956},"(iPhone",[96,71302,71303],{"class":155},"\\s",[96,71305,71306],{"class":47956},"OS)",[96,71308,71303],{"class":155},[96,71310,107],{"class":47956},[96,71312,71313],{"class":155},"[\\d_]",[96,71315,588],{"class":102},[96,71317,536],{"class":47956},[96,71319,691],{"class":211},[96,71321,71280],{"class":106},[96,71323,71324],{"class":98,"line":1203},[96,71325,71326],{"class":165},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[96,71328,71329,71331,71334,71337],{"class":98,"line":1294},[96,71330,1514],{"class":102},[96,71332,71333],{"class":106}," (android ",[96,71335,71336],{"class":102},"||",[96,71338,71339],{"class":106}," iphone) { \n",[96,71341,71342,71345,71347,71350],{"class":98,"line":1300},[96,71343,71344],{"class":106},"location.href ",[96,71346,152],{"class":102},[96,71348,71349],{"class":211}," 'http:\u002F\u002Fm.itcast.cn'",[96,71351,2657],{"class":106},[96,71353,71354],{"class":98,"line":1312},[96,71355,71356],{"class":106},"} \n",[96,71358,71359],{"class":98,"line":1595},[96,71360,71361],{"class":106},"})()\n",[67,71363,71365],{"id":71364},"_346-histroy对象","3.4.6 histroy对象",[14,71367,71368],{},[1445,71369],{"alt":18,"src":71370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[14,71372,71373],{},"浏览器地址的前进与后退!!!",[14,71375,71376],{},"history.back() 等效于 history.go(-1)",[14,71378,71379],{},"history.forward() 等效于 history.go(1)",[38,71381,71383],{"id":71382},"_35-本地存储","3.5 本地存储",[50,71385,71386,71389,71392],{},[53,71387,71388],{},"数据存储在用户浏览器中",[53,71390,71391],{},"设置、读取方便、甚至页面刷新不丢失数据",[53,71393,71394],{},"容量较大，sessionStorage和localStorage约 5M 左右",[67,71396,71398],{"id":71397},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[14,71400,71401],{},"只能存储字符串",[14,71403,71404],{},[1445,71405],{"alt":18,"src":71406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[14,71408,71409],{},[1445,71410],{"alt":18,"src":71411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[14,71413,71414],{},"键值对要加引号,不然就会当变量来看了",[14,71416,71417],{},"localStorage.setItem('uname', 'pink')",[14,71419,71420],{},"刷新之后信息不再丢失",[14,71422,71423],{},"操作key,value会跟着变",[14,71425,71426],{},"删除只删除键就可以,即名字",[14,71428,71417],{},[14,71430,71431],{},"改:",[14,71433,71434],{},"localStorage.setItem('uname','red')",[14,71436,71437],{},"有这个键就是改,没有这个键就是改",[14,71439,71440],{},[1445,71441],{"alt":18,"src":71442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[14,71444,71445],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[14,71447,71448],{},[1445,71449],{"alt":18,"src":71450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[14,71452,71453],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[67,71455,71457],{"id":71456},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[14,71459,71460],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[14,71462,71463],{},"特性:",[50,71465,71466,71469,71472,71475],{},[53,71467,71468],{},"生命周期为关闭浏览器窗口",[53,71470,71471],{},"在同一个窗口(页面)下数据可以共享",[53,71473,71474],{},"以键值对的形式存储使用",[53,71476,71477],{},"用法跟localStorage 基本相同",[67,71479,71481],{"id":71480},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[14,71483,71484],{},"本地只能存储字符串,无法直接存储复杂数据类型",[87,71486,71488],{"className":53046,"code":71487,"language":53048,"meta":18,"style":18},"\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",[93,71489,71490,71498,71503,71508,71513,71518,71522,71527,71532],{"__ignoreMap":18},[96,71491,71492,71494,71496],{"class":98,"line":99},[96,71493,1017],{"class":106},[96,71495,51792],{"class":51279},[96,71497,51286],{"class":106},[96,71499,71500],{"class":98,"line":19},[96,71501,71502],{"class":106},"    const obj = {\n",[96,71504,71505],{"class":98,"line":1162},[96,71506,71507],{"class":106},"      uname: 'pink老师',\n",[96,71509,71510],{"class":98,"line":1177},[96,71511,71512],{"class":106},"      age: 18,\n",[96,71514,71515],{"class":98,"line":1183},[96,71516,71517],{"class":106},"      gender: '女'\n",[96,71519,71520],{"class":98,"line":1197},[96,71521,2170],{"class":106},[96,71523,71524],{"class":98,"line":1203},[96,71525,71526],{"class":106},"    \u002F\u002F 存储复杂数据类型\n",[96,71528,71529],{"class":98,"line":1294},[96,71530,71531],{"class":106},"    localStorage.setItem('obj', obj)\n",[96,71533,71534,71536,71538],{"class":98,"line":1300},[96,71535,52396],{"class":106},[96,71537,51792],{"class":51279},[96,71539,51286],{"class":106},[14,71541,71542],{},[1445,71543],{"alt":18,"src":71544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[14,71546,71547],{},"如果获取一下数据:",[14,71549,71550],{},"log(localStorage.getItem('obj'))",[14,71552,71553],{},[1445,71554],{"alt":18,"src":71555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[14,71557,71558],{},"发现直接存对象是使用不了的!!!",[21982,71560,71562],{"id":71561},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[14,71564,71565],{},[1445,71566],{"alt":18,"src":71567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[87,71569,71571],{"className":50612,"code":71570,"language":50614,"meta":18,"style":18},"\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",[93,71572,71573,71581,71591,71601,71610,71618,71622,71626,71652,71671,71679,71683,71688,71693],{"__ignoreMap":18},[96,71574,71575,71577,71579],{"class":98,"line":99},[96,71576,1017],{"class":106},[96,71578,51792],{"class":51279},[96,71580,51286],{"class":106},[96,71582,71583,71585,71587,71589],{"class":98,"line":19},[96,71584,11205],{"class":102},[96,71586,69950],{"class":155},[96,71588,13548],{"class":102},[96,71590,15556],{"class":106},[96,71592,71593,71596,71599],{"class":98,"line":1162},[96,71594,71595],{"class":106},"      uname: ",[96,71597,71598],{"class":211},"'pink老师'",[96,71600,31445],{"class":106},[96,71602,71603,71606,71608],{"class":98,"line":1177},[96,71604,71605],{"class":106},"      age: ",[96,71607,757],{"class":155},[96,71609,31445],{"class":106},[96,71611,71612,71615],{"class":98,"line":1183},[96,71613,71614],{"class":106},"      gender: ",[96,71616,71617],{"class":211},"'女'\n",[96,71619,71620],{"class":98,"line":1197},[96,71621,2170],{"class":106},[96,71623,71624],{"class":98,"line":1203},[96,71625,71526],{"class":165},[96,71627,71628,71631,71634,71636,71639,71641,71644,71646,71649],{"class":98,"line":1294},[96,71629,71630],{"class":106},"  localStorage.",[96,71632,71633],{"class":1946},"setItem",[96,71635,107],{"class":106},[96,71637,71638],{"class":211},"'obj'",[96,71640,12419],{"class":106},[96,71642,71643],{"class":155},"JSON",[96,71645,665],{"class":106},[96,71647,71648],{"class":1946},"stringify",[96,71650,71651],{"class":106},"(obj))\n",[96,71653,71654,71657,71659,71662,71665,71667,71669],{"class":98,"line":1300},[96,71655,71656],{"class":106},"  console.",[96,71658,58226],{"class":1946},[96,71660,71661],{"class":106},"(localStorage.",[96,71663,71664],{"class":1946},"getItem",[96,71666,107],{"class":106},[96,71668,71638],{"class":211},[96,71670,30476],{"class":106},[96,71672,71673,71675,71677],{"class":98,"line":1312},[96,71674,52396],{"class":106},[96,71676,51792],{"class":51279},[96,71678,51286],{"class":106},[96,71680,71681],{"class":98,"line":1595},[96,71682,70600],{"class":106},[96,71684,71685],{"class":98,"line":1600},[96,71686,71687],{"class":106},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[96,71689,71690],{"class":98,"line":1606},[96,71691,71692],{"class":106},"  类型是字符串的\n",[96,71694,71695],{"class":98,"line":1611},[96,71696,71697],{"class":106},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[21982,71699,71701],{"id":71700},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[14,71703,71704],{},[1445,71705],{"alt":18,"src":71706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[14,71708,71709],{},[1445,71710],{"alt":18,"src":71711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[87,71713,71715],{"className":53046,"code":71714,"language":53048,"meta":18,"style":18},"  \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",[93,71716,71717,71725,71729,71733,71737,71741,71745,71750,71755,71760,71765,71770,71775,71780,71785],{"__ignoreMap":18},[96,71718,71719,71721,71723],{"class":98,"line":99},[96,71720,52123],{"class":106},[96,71722,51792],{"class":51279},[96,71724,51286],{"class":106},[96,71726,71727],{"class":98,"line":19},[96,71728,71502],{"class":106},[96,71730,71731],{"class":98,"line":1162},[96,71732,71507],{"class":106},[96,71734,71735],{"class":98,"line":1177},[96,71736,71512],{"class":106},[96,71738,71739],{"class":98,"line":1183},[96,71740,71517],{"class":106},[96,71742,71743],{"class":98,"line":1197},[96,71744,2170],{"class":106},[96,71746,71747],{"class":98,"line":1203},[96,71748,71749],{"class":106},"    \u002F\u002F 1.存储复杂数据类型\n",[96,71751,71752],{"class":98,"line":1294},[96,71753,71754],{"class":106},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[96,71756,71757],{"class":98,"line":1300},[96,71758,71759],{"class":106},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[96,71761,71762],{"class":98,"line":1312},[96,71763,71764],{"class":106},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[96,71766,71767],{"class":98,"line":1595},[96,71768,71769],{"class":106},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[96,71771,71772],{"class":98,"line":1600},[96,71773,71774],{"class":106},"    \u002F\u002F 取\n",[96,71776,71777],{"class":98,"line":1606},[96,71778,71779],{"class":106},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[96,71781,71782],{"class":98,"line":1611},[96,71783,71784],{"class":106},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[96,71786,71787,71789,71791],{"class":98,"line":1625},[96,71788,52396],{"class":106},[96,71790,51792],{"class":51279},[96,71792,51286],{"class":106},[14,71794,71795],{},[1445,71796],{"alt":18,"src":71797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[67,71799,71801],{"id":71800},"_356-数组map方法","3.5.6 数组map方法",[14,71803,71804],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[14,71806,71807],{},[1445,71808],{"alt":18,"src":71809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[14,71811,71812],{},[1445,71813],{"alt":18,"src":71814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[14,71816,71817,71820],{},[256,71818,71819],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[14,71822,71823],{},"map有返回值，但是forEach没有返回值",[14,71825,71826],{},"map是个方法。用的时候要加 ()",[14,71828,71829],{},"map返回的是一个数组",[67,71831,71833],{"id":71832},"_357-数组中join方法","3.5.7 数组中join方法",[14,71835,71836],{},[1445,71837],{"alt":18,"src":71838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[14,71840,71841],{},"类似于python中拼接字符串一样！",[50,71843,71844,71847,71850],{},[53,71845,71846],{},"小括号为空则逗号分开",[53,71848,71849],{},"小括号为空字符串 ''，则元素之间没有分隔符",[53,71851,71852],{},"小括号用啥符号就用进行分割",[67,71854,71856],{"id":71855},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[50,71858,71859,71862,71865,71868,71871],{},[53,71860,71861],{},"记住本地时间获取快速方式：new Date().toDateString()",[53,71863,71864],{},"尽量减少DOM操作，用好map+join的渲染方式",[53,71866,71867],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[53,71869,71870],{},"return可以实现函数的结束",[53,71872,71873],{},"禁止跳转是 preventDefault() 不要忘记",[87,71875,71877],{"className":50612,"code":71876,"language":50614,"meta":18,"style":18},"\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",[93,71878,71879,71889,71903,71907,71915,71929,71949,71961,71969,71975,71985,71995,71999,72003,72009,72019,72031,72035,72039,72046,72058,72072,72082,72086,72090,72097,72104,72111,72123,72135,72145,72157,72161,72165,72172,72179,72191,72203,72213,72225,72255,72259,72263,72270,72282,72294,72318,72328,72338,72342,72346,72354,72365,72377,72389,72401,72418,72430,72442,72446,72450,72457,72469,72481,72493,72504,72522,72535,72547,72571,72582,72586,72590,72598,72608,72612,72616,72622,72634,72645,72655,72659,72663,72669,72691,72695,72699,72705,72711,72723,72733,72745,72775,72788,72805,72809,72813,72824,72846,72856,72860,72864,72877,72887,72899,72911,72923,72935,72945,72955,72965,72976,72989,72993,73001,73009,73013,73021,73034,73054,73087,73120,73153,73179,73197,73215,73223,73249,73267,73285,73303,73321,73339,73347,73355,73373,73381,73410,73418,73426,73434,73447,73459,73471,73483,73495,73507,73520,73532,73540,73548,73556,73561,73566,73570,73574,73578,73582,73586,73590,73595,73600,73605,73610,73618,73626,73634,73639,73644,73649,73654,73659,73664,73669,73674,73679,73684,73689,73694,73699,73704,73708,73713,73718,73728,73737,73741,73746,73755,73771,73813,73853,73892,73957,73965,73969,73974,73992,74000,74005,74010,74040,74046,74051,74064,74076,74088,74100,74112,74124,74136,74140,74150,74154,74159,74164,74168,74177,74181,74186,74191,74210,74215,74235,74239,74244,74248,74253,74271,74289,74307,74326,74345,74364,74369,74375,74396,74402,74411,74417,74423,74429,74456,74469,74474,74484,74490,74496,74502,74508,74513,74519,74525,74531,74537,74570,74575,74580,74585,74590,74596,74602,74608,74619,74624,74630,74637,74651,74657,74681,74686,74691,74697,74703,74724,74730,74743,74749,74755,74761,74767,74772,74778,74784,74790,74808,74822,74828,74836,74842,74864,74869,74874,74879,74884,74889,74898,74907,74912],{"__ignoreMap":18},[96,71880,71881,71883,71885,71887],{"class":98,"line":99},[96,71882,51276],{"class":106},[96,71884,51280],{"class":51279},[96,71886,51283],{"class":1946},[96,71888,51286],{"class":106},[96,71890,71891,71893,71895,71897,71899,71901],{"class":98,"line":19},[96,71892,1017],{"class":106},[96,71894,50614],{"class":51279},[96,71896,51295],{"class":1946},[96,71898,152],{"class":106},[96,71900,51300],{"class":211},[96,71902,51286],{"class":106},[96,71904,71905],{"class":98,"line":1162},[96,71906,2383],{"emptyLinePlaceholder":23},[96,71908,71909,71911,71913],{"class":98,"line":1177},[96,71910,1017],{"class":106},[96,71912,51313],{"class":51279},[96,71914,51286],{"class":106},[96,71916,71917,71919,71921,71923,71925,71927],{"class":98,"line":1183},[96,71918,52123],{"class":106},[96,71920,51323],{"class":51279},[96,71922,51326],{"class":1946},[96,71924,152],{"class":106},[96,71926,51331],{"class":211},[96,71928,51286],{"class":106},[96,71930,71931,71933,71935,71937,71939,71941,71943,71945,71947],{"class":98,"line":1197},[96,71932,52123],{"class":106},[96,71934,51323],{"class":51279},[96,71936,14904],{"class":1946},[96,71938,152],{"class":106},[96,71940,51370],{"class":211},[96,71942,51350],{"class":1946},[96,71944,152],{"class":106},[96,71946,51377],{"class":211},[96,71948,51286],{"class":106},[96,71950,71951,71953,71955,71957,71959],{"class":98,"line":1203},[96,71952,52123],{"class":106},[96,71954,51386],{"class":51279},[96,71956,51389],{"class":106},[96,71958,51386],{"class":51279},[96,71960,51286],{"class":106},[96,71962,71963,71965,71967],{"class":98,"line":1294},[96,71964,52123],{"class":106},[96,71966,5110],{"class":51279},[96,71968,51286],{"class":106},[96,71970,71971,71973],{"class":98,"line":1300},[96,71972,6387],{"class":51279},[96,71974,15556],{"class":106},[96,71976,71977,71979,71981,71983],{"class":98,"line":1312},[96,71978,54674],{"class":155},[96,71980,51416],{"class":106},[96,71982,298],{"class":155},[96,71984,1273],{"class":106},[96,71986,71987,71989,71991,71993],{"class":98,"line":1595},[96,71988,54685],{"class":155},[96,71990,51416],{"class":106},[96,71992,298],{"class":155},[96,71994,1273],{"class":106},[96,71996,71997],{"class":98,"line":1600},[96,71998,2170],{"class":106},[96,72000,72001],{"class":98,"line":1606},[96,72002,2383],{"emptyLinePlaceholder":23},[96,72004,72005,72007],{"class":98,"line":1611},[96,72006,57258],{"class":51279},[96,72008,15556],{"class":106},[96,72010,72011,72013,72015,72017],{"class":98,"line":1625},[96,72012,57265],{"class":155},[96,72014,51416],{"class":106},[96,72016,51571],{"class":155},[96,72018,1273],{"class":106},[96,72020,72021,72023,72025,72027,72029],{"class":98,"line":1630},[96,72022,62056],{"class":155},[96,72024,51416],{"class":106},[96,72026,807],{"class":155},[96,72028,51471],{"class":102},[96,72030,1273],{"class":106},[96,72032,72033],{"class":98,"line":1636},[96,72034,2170],{"class":106},[96,72036,72037],{"class":98,"line":1657},[96,72038,2383],{"emptyLinePlaceholder":23},[96,72040,72041,72044],{"class":98,"line":1662},[96,72042,72043],{"class":1946},"    .info",[96,72045,15556],{"class":106},[96,72047,72048,72050,72052,72054,72056],{"class":98,"line":1676},[96,72049,54750],{"class":155},[96,72051,51416],{"class":106},[96,72053,51468],{"class":155},[96,72055,51471],{"class":102},[96,72057,1273],{"class":106},[96,72059,72060,72062,72064,72066,72068,72070],{"class":98,"line":1681},[96,72061,54685],{"class":155},[96,72063,51416],{"class":106},[96,72065,553],{"class":155},[96,72067,51471],{"class":102},[96,72069,51535],{"class":155},[96,72071,1273],{"class":106},[96,72073,72074,72076,72078,72080],{"class":98,"line":1710},[96,72075,57265],{"class":155},[96,72077,51416],{"class":106},[96,72079,51571],{"class":155},[96,72081,1273],{"class":106},[96,72083,72084],{"class":98,"line":1715},[96,72085,2170],{"class":106},[96,72087,72088],{"class":98,"line":1732},[96,72089,2383],{"emptyLinePlaceholder":23},[96,72091,72092,72095],{"class":98,"line":1737},[96,72093,72094],{"class":1946},"    .uname",[96,72096,31445],{"class":106},[96,72098,72099,72102],{"class":98,"line":1742},[96,72100,72101],{"class":1946},"    .age",[96,72103,31445],{"class":106},[96,72105,72106,72109],{"class":98,"line":1747},[96,72107,72108],{"class":1946},"    .salary",[96,72110,15556],{"class":106},[96,72112,72113,72115,72117,72119,72121],{"class":98,"line":1761},[96,72114,54750],{"class":155},[96,72116,51416],{"class":106},[96,72118,418],{"class":155},[96,72120,51471],{"class":102},[96,72122,1273],{"class":106},[96,72124,72125,72127,72129,72131,72133],{"class":98,"line":1766},[96,72126,54764],{"class":155},[96,72128,51416],{"class":106},[96,72130,807],{"class":155},[96,72132,51471],{"class":102},[96,72134,1273],{"class":106},[96,72136,72137,72139,72141,72143],{"class":98,"line":2560},[96,72138,61759],{"class":155},[96,72140,51416],{"class":106},[96,72142,54716],{"class":155},[96,72144,1273],{"class":106},[96,72146,72147,72149,72151,72153,72155],{"class":98,"line":2574},[96,72148,61729],{"class":155},[96,72150,51416],{"class":106},[96,72152,682],{"class":155},[96,72154,51471],{"class":102},[96,72156,1273],{"class":106},[96,72158,72159],{"class":98,"line":2582},[96,72160,2170],{"class":106},[96,72162,72163],{"class":98,"line":2587},[96,72164,2383],{"emptyLinePlaceholder":23},[96,72166,72167,72170],{"class":98,"line":2593},[96,72168,72169],{"class":1946},"    .gender",[96,72171,31445],{"class":106},[96,72173,72174,72177],{"class":98,"line":2599},[96,72175,72176],{"class":1946},"    .city",[96,72178,15556],{"class":106},[96,72180,72181,72183,72185,72187,72189],{"class":98,"line":2604},[96,72182,54750],{"class":155},[96,72184,51416],{"class":106},[96,72186,418],{"class":155},[96,72188,51471],{"class":102},[96,72190,1273],{"class":106},[96,72192,72193,72195,72197,72199,72201],{"class":98,"line":7932},[96,72194,54764],{"class":155},[96,72196,51416],{"class":106},[96,72198,932],{"class":155},[96,72200,51471],{"class":102},[96,72202,1273],{"class":106},[96,72204,72205,72207,72209,72211],{"class":98,"line":7956},[96,72206,61759],{"class":155},[96,72208,51416],{"class":106},[96,72210,54716],{"class":155},[96,72212,1273],{"class":106},[96,72214,72215,72217,72219,72221,72223],{"class":98,"line":7961},[96,72216,61729],{"class":155},[96,72218,51416],{"class":106},[96,72220,682],{"class":155},[96,72222,51471],{"class":102},[96,72224,1273],{"class":106},[96,72226,72227,72229,72231,72233,72235,72237,72240,72242,72244,72246,72249,72251,72253],{"class":98,"line":7967},[96,72228,61956],{"class":155},[96,72230,51416],{"class":106},[96,72232,324],{"class":155},[96,72234,51471],{"class":102},[96,72236,51500],{"class":155},[96,72238,72239],{"class":155}," rgb",[96,72241,107],{"class":106},[96,72243,1705],{"class":155},[96,72245,12419],{"class":106},[96,72247,72248],{"class":155},"197",[96,72250,12419],{"class":106},[96,72252,72248],{"class":155},[96,72254,2702],{"class":106},[96,72256,72257],{"class":98,"line":7994},[96,72258,2170],{"class":106},[96,72260,72261],{"class":98,"line":7999},[96,72262,2383],{"emptyLinePlaceholder":23},[96,72264,72265,72268],{"class":98,"line":8005},[96,72266,72267],{"class":51279},"    button",[96,72269,15556],{"class":106},[96,72271,72272,72274,72276,72278,72280],{"class":98,"line":8017},[96,72273,54764],{"class":155},[96,72275,51416],{"class":106},[96,72277,932],{"class":155},[96,72279,51471],{"class":102},[96,72281,1273],{"class":106},[96,72283,72284,72286,72288,72290,72292],{"class":98,"line":8029},[96,72285,54750],{"class":155},[96,72287,51416],{"class":106},[96,72289,591],{"class":155},[96,72291,51471],{"class":102},[96,72293,1273],{"class":106},[96,72295,72296,72298,72300,72303,72305,72307,72309,72312,72314,72316],{"class":98,"line":8041},[96,72297,54863],{"class":155},[96,72299,51416],{"class":106},[96,72301,72302],{"class":155},"rgb",[96,72304,107],{"class":106},[96,72306,1076],{"class":155},[96,72308,12419],{"class":106},[96,72310,72311],{"class":155},"187",[96,72313,12419],{"class":106},[96,72315,406],{"class":155},[96,72317,2702],{"class":106},[96,72319,72320,72322,72324,72326],{"class":98,"line":9700},[96,72321,57395],{"class":155},[96,72323,51416],{"class":106},[96,72325,60821],{"class":155},[96,72327,1273],{"class":106},[96,72329,72330,72332,72334,72336],{"class":98,"line":9725},[96,72331,61956],{"class":155},[96,72333,51416],{"class":106},[96,72335,298],{"class":155},[96,72337,1273],{"class":106},[96,72339,72340],{"class":98,"line":9748},[96,72341,2170],{"class":106},[96,72343,72344],{"class":98,"line":9772},[96,72345,2383],{"emptyLinePlaceholder":23},[96,72347,72348,72350,72352],{"class":98,"line":9777},[96,72349,72267],{"class":51279},[96,72351,51667],{"class":51279},[96,72353,15556],{"class":106},[96,72355,72356,72358,72360,72363],{"class":98,"line":9782},[96,72357,54988],{"class":155},[96,72359,51416],{"class":106},[96,72361,72362],{"class":155},"inline-block",[96,72364,1273],{"class":106},[96,72366,72367,72369,72371,72373,72375],{"class":98,"line":9787},[96,72368,54750],{"class":155},[96,72370,51416],{"class":106},[96,72372,553],{"class":155},[96,72374,51471],{"class":102},[96,72376,1273],{"class":106},[96,72378,72379,72381,72383,72385,72387],{"class":98,"line":9796},[96,72380,54764],{"class":155},[96,72382,51416],{"class":106},[96,72384,553],{"class":155},[96,72386,51471],{"class":102},[96,72388,1273],{"class":106},[96,72390,72391,72393,72395,72397,72399],{"class":98,"line":9801},[96,72392,57338],{"class":155},[96,72394,51416],{"class":106},[96,72396,579],{"class":155},[96,72398,51471],{"class":102},[96,72400,1273],{"class":106},[96,72402,72403,72405,72407,72409,72411,72413,72416],{"class":98,"line":9807},[96,72404,61956],{"class":155},[96,72406,51416],{"class":106},[96,72408,324],{"class":155},[96,72410,51471],{"class":102},[96,72412,51500],{"class":155},[96,72414,72415],{"class":155}," #fff",[96,72417,1273],{"class":106},[96,72419,72420,72422,72424,72426,72428],{"class":98,"line":9828},[96,72421,55113],{"class":155},[96,72423,51416],{"class":106},[96,72425,426],{"class":155},[96,72427,51471],{"class":102},[96,72429,1273],{"class":106},[96,72431,72432,72434,72436,72438,72440],{"class":98,"line":9834},[96,72433,61729],{"class":155},[96,72435,51416],{"class":106},[96,72437,324],{"class":155},[96,72439,51471],{"class":102},[96,72441,1273],{"class":106},[96,72443,72444],{"class":98,"line":9848},[96,72445,2170],{"class":106},[96,72447,72448],{"class":98,"line":9854},[96,72449,2383],{"emptyLinePlaceholder":23},[96,72451,72452,72455],{"class":98,"line":9881},[96,72453,72454],{"class":1946},"    .total",[96,72456,15556],{"class":106},[96,72458,72459,72461,72463,72465,72467],{"class":98,"line":9890},[96,72460,54750],{"class":155},[96,72462,51416],{"class":106},[96,72464,61608],{"class":155},[96,72466,51471],{"class":102},[96,72468,1273],{"class":106},[96,72470,72471,72473,72475,72477,72479],{"class":98,"line":9896},[96,72472,54764],{"class":155},[96,72474,51416],{"class":106},[96,72476,508],{"class":155},[96,72478,51471],{"class":102},[96,72480,1273],{"class":106},[96,72482,72483,72485,72487,72489,72491],{"class":98,"line":9904},[96,72484,57338],{"class":155},[96,72486,51416],{"class":106},[96,72488,508],{"class":155},[96,72490,51471],{"class":102},[96,72492,1273],{"class":106},[96,72494,72495,72497,72499,72502],{"class":98,"line":9909},[96,72496,57265],{"class":155},[96,72498,51416],{"class":106},[96,72500,72501],{"class":155},"right",[96,72503,1273],{"class":106},[96,72505,72506,72508,72510,72512,72514,72516,72518,72520],{"class":98,"line":16588},[96,72507,54685],{"class":155},[96,72509,51416],{"class":106},[96,72511,508],{"class":155},[96,72513,51471],{"class":102},[96,72515,51535],{"class":155},[96,72517,2021],{"class":155},[96,72519,51471],{"class":102},[96,72521,1273],{"class":106},[96,72523,72524,72527,72529,72531,72533],{"class":98,"line":16594},[96,72525,72526],{"class":155},"      padding-right",[96,72528,51416],{"class":106},[96,72530,553],{"class":155},[96,72532,51471],{"class":102},[96,72534,1273],{"class":106},[96,72536,72537,72539,72541,72543,72545],{"class":98,"line":16617},[96,72538,54901],{"class":155},[96,72540,51416],{"class":106},[96,72542,630],{"class":155},[96,72544,51471],{"class":102},[96,72546,1273],{"class":106},[96,72548,72549,72551,72553,72555,72557,72560,72562,72565,72567,72569],{"class":98,"line":16623},[96,72550,54863],{"class":155},[96,72552,51416],{"class":106},[96,72554,72302],{"class":155},[96,72556,107],{"class":106},[96,72558,72559],{"class":155},"237",[96,72561,12419],{"class":106},[96,72563,72564],{"class":155},"235",[96,72566,12419],{"class":106},[96,72568,72564],{"class":155},[96,72570,2702],{"class":106},[96,72572,72573,72576,72578,72580],{"class":98,"line":16646},[96,72574,72575],{"class":155},"      box-sizing",[96,72577,51416],{"class":106},[96,72579,60484],{"class":155},[96,72581,1273],{"class":106},[96,72583,72584],{"class":98,"line":16660},[96,72585,2170],{"class":106},[96,72587,72588],{"class":98,"line":16680},[96,72589,2383],{"emptyLinePlaceholder":23},[96,72591,72592,72594,72596],{"class":98,"line":16686},[96,72593,72454],{"class":1946},[96,72595,51667],{"class":51279},[96,72597,15556],{"class":106},[96,72599,72600,72602,72604,72606],{"class":98,"line":16697},[96,72601,57395],{"class":155},[96,72603,51416],{"class":106},[96,72605,57400],{"class":155},[96,72607,1273],{"class":106},[96,72609,72610],{"class":98,"line":16720},[96,72611,2170],{"class":106},[96,72613,72614],{"class":98,"line":16742},[96,72615,2383],{"emptyLinePlaceholder":23},[96,72617,72618,72620],{"class":98,"line":16747},[96,72619,65002],{"class":51279},[96,72621,15556],{"class":106},[96,72623,72624,72626,72628,72630,72632],{"class":98,"line":16753},[96,72625,54750],{"class":155},[96,72627,51416],{"class":106},[96,72629,61608],{"class":155},[96,72631,51471],{"class":102},[96,72633,1273],{"class":106},[96,72635,72636,72638,72640,72643],{"class":98,"line":16767},[96,72637,54685],{"class":155},[96,72639,51416],{"class":106},[96,72641,72642],{"class":155},"auto",[96,72644,1273],{"class":106},[96,72646,72647,72649,72651,72653],{"class":98,"line":16780},[96,72648,65009],{"class":155},[96,72650,51416],{"class":106},[96,72652,65014],{"class":155},[96,72654,1273],{"class":106},[96,72656,72657],{"class":98,"line":16785},[96,72658,2170],{"class":106},[96,72660,72661],{"class":98,"line":16799},[96,72662,2383],{"emptyLinePlaceholder":23},[96,72664,72665,72667],{"class":98,"line":16804},[96,72666,65094],{"class":51279},[96,72668,15556],{"class":106},[96,72670,72671,72673,72675,72677,72679,72681,72683,72685,72687,72689],{"class":98,"line":16810},[96,72672,54863],{"class":155},[96,72674,51416],{"class":106},[96,72676,72302],{"class":155},[96,72678,107],{"class":106},[96,72680,72559],{"class":155},[96,72682,12419],{"class":106},[96,72684,72564],{"class":155},[96,72686,12419],{"class":106},[96,72688,72564],{"class":155},[96,72690,2702],{"class":106},[96,72692,72693],{"class":98,"line":16815},[96,72694,2170],{"class":106},[96,72696,72697],{"class":98,"line":16829},[96,72698,2383],{"emptyLinePlaceholder":23},[96,72700,72701,72703],{"class":98,"line":16834},[96,72702,65094],{"class":51279},[96,72704,31445],{"class":106},[96,72706,72707,72709],{"class":98,"line":16839},[96,72708,65160],{"class":51279},[96,72710,15556],{"class":106},[96,72712,72713,72715,72717,72719,72721],{"class":98,"line":16853},[96,72714,54764],{"class":155},[96,72716,51416],{"class":106},[96,72718,380],{"class":155},[96,72720,51471],{"class":102},[96,72722,1273],{"class":106},[96,72724,72725,72727,72729,72731],{"class":98,"line":16865},[96,72726,57265],{"class":155},[96,72728,51416],{"class":106},[96,72730,23721],{"class":155},[96,72732,1273],{"class":106},[96,72734,72735,72737,72739,72741,72743],{"class":98,"line":16870},[96,72736,54901],{"class":155},[96,72738,51416],{"class":106},[96,72740,656],{"class":155},[96,72742,51471],{"class":102},[96,72744,1273],{"class":106},[96,72746,72747,72749,72751,72753,72755,72757,72759,72761,72764,72766,72769,72771,72773],{"class":98,"line":16883},[96,72748,61956],{"class":155},[96,72750,51416],{"class":106},[96,72752,324],{"class":155},[96,72754,51471],{"class":102},[96,72756,51500],{"class":155},[96,72758,72239],{"class":155},[96,72760,107],{"class":106},[96,72762,72763],{"class":155},"228",[96,72765,12419],{"class":106},[96,72767,72768],{"class":155},"225",[96,72770,12419],{"class":106},[96,72772,72768],{"class":155},[96,72774,2702],{"class":106},[96,72776,72777,72780,72782,72784,72786],{"class":98,"line":16888},[96,72778,72779],{"class":155},"      padding-left",[96,72781,51416],{"class":106},[96,72783,426],{"class":155},[96,72785,51471],{"class":102},[96,72787,1273],{"class":106},[96,72789,72790,72792,72794,72796,72799,72801,72803],{"class":98,"line":16893},[96,72791,61839],{"class":155},[96,72793,51416],{"class":106},[96,72795,28100],{"class":155},[96,72797,72798],{"class":155}," linear",[96,72800,61846],{"class":155},[96,72802,802],{"class":102},[96,72804,1273],{"class":106},[96,72806,72807],{"class":98,"line":16898},[96,72808,2170],{"class":106},[96,72810,72811],{"class":98,"line":16911},[96,72812,2383],{"emptyLinePlaceholder":23},[96,72814,72815,72818,72820,72822],{"class":98,"line":16916},[96,72816,72817],{"class":51279},"    tbody",[96,72819,70123],{"class":51279},[96,72821,60919],{"class":1946},[96,72823,15556],{"class":106},[96,72825,72826,72828,72830,72832,72834,72836,72838,72840,72842,72844],{"class":98,"line":32612},[96,72827,54863],{"class":155},[96,72829,51416],{"class":106},[96,72831,72302],{"class":155},[96,72833,107],{"class":106},[96,72835,72559],{"class":155},[96,72837,12419],{"class":106},[96,72839,72564],{"class":155},[96,72841,12419],{"class":106},[96,72843,72564],{"class":155},[96,72845,2702],{"class":106},[96,72847,72848,72850,72852,72854],{"class":98,"line":32618},[96,72849,62004],{"class":155},[96,72851,51416],{"class":106},[96,72853,62009],{"class":155},[96,72855,1273],{"class":106},[96,72857,72858],{"class":98,"line":32624},[96,72859,2170],{"class":106},[96,72861,72862],{"class":98,"line":32630},[96,72863,2383],{"emptyLinePlaceholder":23},[96,72865,72866,72868,72870,72873,72875],{"class":98,"line":32636},[96,72867,72817],{"class":51279},[96,72869,70123],{"class":51279},[96,72871,72872],{"class":51279}," td",[96,72874,1381],{"class":51279},[96,72876,15556],{"class":106},[96,72878,72879,72881,72883,72885],{"class":98,"line":32647},[96,72880,54988],{"class":155},[96,72882,51416],{"class":106},[96,72884,60848],{"class":155},[96,72886,1273],{"class":106},[96,72888,72889,72891,72893,72895,72897],{"class":98,"line":32653},[96,72890,54750],{"class":155},[96,72892,51416],{"class":106},[96,72894,1014],{"class":155},[96,72896,51471],{"class":102},[96,72898,1273],{"class":106},[96,72900,72901,72903,72905,72907,72909],{"class":98,"line":32673},[96,72902,54764],{"class":155},[96,72904,51416],{"class":106},[96,72906,932],{"class":155},[96,72908,51471],{"class":102},[96,72910,1273],{"class":106},[96,72912,72913,72915,72917,72919,72921],{"class":98,"line":32679},[96,72914,57338],{"class":155},[96,72916,51416],{"class":106},[96,72918,932],{"class":155},[96,72920,51471],{"class":102},[96,72922,1273],{"class":106},[96,72924,72925,72927,72929,72931,72933],{"class":98,"line":32690},[96,72926,62056],{"class":155},[96,72928,51416],{"class":106},[96,72930,184],{"class":155},[96,72932,51471],{"class":102},[96,72934,1273],{"class":106},[96,72936,72937,72939,72941,72943],{"class":98,"line":32696},[96,72938,57395],{"class":155},[96,72940,51416],{"class":106},[96,72942,60821],{"class":155},[96,72944,1273],{"class":106},[96,72946,72947,72949,72951,72953],{"class":98,"line":32702},[96,72948,57265],{"class":155},[96,72950,51416],{"class":106},[96,72952,51571],{"class":155},[96,72954,1273],{"class":106},[96,72956,72957,72959,72961,72963],{"class":98,"line":32708},[96,72958,63949],{"class":155},[96,72960,51416],{"class":106},[96,72962,54716],{"class":155},[96,72964,1273],{"class":106},[96,72966,72967,72969,72971,72974],{"class":98,"line":32714},[96,72968,54863],{"class":155},[96,72970,51416],{"class":106},[96,72972,72973],{"class":155},"orange",[96,72975,1273],{"class":106},[96,72977,72978,72980,72982,72985,72987],{"class":98,"line":32720},[96,72979,55113],{"class":155},[96,72981,51416],{"class":106},[96,72983,72984],{"class":155},"12.5",[96,72986,51471],{"class":102},[96,72988,1273],{"class":106},[96,72990,72991],{"class":98,"line":32726},[96,72992,2170],{"class":106},[96,72994,72995,72997,72999],{"class":98,"line":32732},[96,72996,52396],{"class":106},[96,72998,5110],{"class":51279},[96,73000,51286],{"class":106},[96,73002,73003,73005,73007],{"class":98,"line":32752},[96,73004,51764],{"class":106},[96,73006,51313],{"class":51279},[96,73008,51286],{"class":106},[96,73010,73011],{"class":98,"line":32758},[96,73012,2383],{"emptyLinePlaceholder":23},[96,73014,73015,73017,73019],{"class":98,"line":32774},[96,73016,1017],{"class":106},[96,73018,51779],{"class":51279},[96,73020,51286],{"class":106},[96,73022,73023,73025,73027,73030,73032],{"class":98,"line":32780},[96,73024,52123],{"class":106},[96,73026,38],{"class":51279},[96,73028,73029],{"class":106},">学生就业统计表\u003C\u002F",[96,73031,38],{"class":51279},[96,73033,51286],{"class":106},[96,73035,73036,73038,73040,73042,73044,73046,73048,73050,73052],{"class":98,"line":32794},[96,73037,52123],{"class":106},[96,73039,66604],{"class":51279},[96,73041,53465],{"class":1946},[96,73043,152],{"class":106},[96,73045,62643],{"class":211},[96,73047,69049],{"class":1946},[96,73049,152],{"class":106},[96,73051,31755],{"class":211},[96,73053,51286],{"class":106},[96,73055,73056,73058,73060,73062,73064,73066,73068,73070,73072,73074,73076,73079,73081,73083,73085],{"class":98,"line":32800},[96,73057,51320],{"class":106},[96,73059,53800],{"class":51279},[96,73061,53803],{"class":1946},[96,73063,152],{"class":106},[96,73065,62678],{"class":211},[96,73067,14904],{"class":1946},[96,73069,152],{"class":106},[96,73071,69075],{"class":211},[96,73073,60999],{"class":1946},[96,73075,152],{"class":106},[96,73077,73078],{"class":211},"\"姓名\"",[96,73080,53465],{"class":1946},[96,73082,152],{"class":106},[96,73084,69075],{"class":211},[96,73086,51286],{"class":106},[96,73088,73089,73091,73093,73095,73097,73099,73101,73103,73105,73107,73109,73112,73114,73116,73118],{"class":98,"line":32815},[96,73090,51320],{"class":106},[96,73092,53800],{"class":51279},[96,73094,53803],{"class":1946},[96,73096,152],{"class":106},[96,73098,62678],{"class":211},[96,73100,14904],{"class":1946},[96,73102,152],{"class":106},[96,73104,69103],{"class":211},[96,73106,60999],{"class":1946},[96,73108,152],{"class":106},[96,73110,73111],{"class":211},"\"年龄\"",[96,73113,53465],{"class":1946},[96,73115,152],{"class":106},[96,73117,69103],{"class":211},[96,73119,51286],{"class":106},[96,73121,73122,73124,73126,73128,73130,73132,73134,73136,73138,73140,73142,73145,73147,73149,73151],{"class":98,"line":32821},[96,73123,51320],{"class":106},[96,73125,53800],{"class":51279},[96,73127,53803],{"class":1946},[96,73129,152],{"class":106},[96,73131,62678],{"class":211},[96,73133,14904],{"class":1946},[96,73135,152],{"class":106},[96,73137,69205],{"class":211},[96,73139,60999],{"class":1946},[96,73141,152],{"class":106},[96,73143,73144],{"class":211},"\"薪资\"",[96,73146,53465],{"class":1946},[96,73148,152],{"class":106},[96,73150,69205],{"class":211},[96,73152,51286],{"class":106},[96,73154,73155,73157,73159,73161,73163,73165,73167,73169,73171,73173,73175,73177],{"class":98,"line":32830},[96,73156,51320],{"class":106},[96,73158,69123],{"class":51279},[96,73160,14904],{"class":1946},[96,73162,152],{"class":106},[96,73164,69130],{"class":211},[96,73166,14943],{"class":1946},[96,73168,152],{"class":106},[96,73170,7636],{"class":211},[96,73172,53465],{"class":1946},[96,73174,152],{"class":106},[96,73176,69130],{"class":211},[96,73178,51286],{"class":106},[96,73180,73181,73183,73185,73187,73189,73191,73193,73195],{"class":98,"line":32836},[96,73182,55213],{"class":106},[96,73184,69145],{"class":51279},[96,73186,66630],{"class":1946},[96,73188,152],{"class":106},[96,73190,9945],{"class":211},[96,73192,69154],{"class":106},[96,73194,69145],{"class":51279},[96,73196,51286],{"class":106},[96,73198,73199,73201,73203,73205,73207,73209,73211,73213],{"class":98,"line":32845},[96,73200,55213],{"class":106},[96,73202,69145],{"class":51279},[96,73204,66630],{"class":1946},[96,73206,152],{"class":106},[96,73208,10014],{"class":211},[96,73210,69173],{"class":106},[96,73212,69145],{"class":51279},[96,73214,51286],{"class":106},[96,73216,73217,73219,73221],{"class":98,"line":32851},[96,73218,51755],{"class":106},[96,73220,69123],{"class":51279},[96,73222,51286],{"class":106},[96,73224,73225,73227,73229,73231,73233,73235,73237,73239,73241,73243,73245,73247],{"class":98,"line":32857},[96,73226,51320],{"class":106},[96,73228,69123],{"class":51279},[96,73230,14904],{"class":1946},[96,73232,152],{"class":106},[96,73234,69227],{"class":211},[96,73236,14943],{"class":1946},[96,73238,152],{"class":106},[96,73240,7636],{"class":211},[96,73242,53465],{"class":1946},[96,73244,152],{"class":106},[96,73246,69227],{"class":211},[96,73248,51286],{"class":106},[96,73250,73251,73253,73255,73257,73259,73261,73263,73265],{"class":98,"line":32866},[96,73252,55213],{"class":106},[96,73254,69145],{"class":51279},[96,73256,66630],{"class":1946},[96,73258,152],{"class":106},[96,73260,69248],{"class":211},[96,73262,69251],{"class":106},[96,73264,69145],{"class":51279},[96,73266,51286],{"class":106},[96,73268,73269,73271,73273,73275,73277,73279,73281,73283],{"class":98,"line":32872},[96,73270,55213],{"class":106},[96,73272,69145],{"class":51279},[96,73274,66630],{"class":1946},[96,73276,152],{"class":106},[96,73278,69268],{"class":211},[96,73280,69271],{"class":106},[96,73282,69145],{"class":51279},[96,73284,51286],{"class":106},[96,73286,73287,73289,73291,73293,73295,73297,73299,73301],{"class":98,"line":32883},[96,73288,55213],{"class":106},[96,73290,69145],{"class":51279},[96,73292,66630],{"class":1946},[96,73294,152],{"class":106},[96,73296,69288],{"class":211},[96,73298,69291],{"class":106},[96,73300,69145],{"class":51279},[96,73302,51286],{"class":106},[96,73304,73305,73307,73309,73311,73313,73315,73317,73319],{"class":98,"line":32889},[96,73306,55213],{"class":106},[96,73308,69145],{"class":51279},[96,73310,66630],{"class":1946},[96,73312,152],{"class":106},[96,73314,69308],{"class":211},[96,73316,69311],{"class":106},[96,73318,69145],{"class":51279},[96,73320,51286],{"class":106},[96,73322,73323,73325,73327,73329,73331,73333,73335,73337],{"class":98,"line":32908},[96,73324,55213],{"class":106},[96,73326,69145],{"class":51279},[96,73328,66630],{"class":1946},[96,73330,152],{"class":106},[96,73332,69328],{"class":211},[96,73334,69331],{"class":106},[96,73336,69145],{"class":51279},[96,73338,51286],{"class":106},[96,73340,73341,73343,73345],{"class":98,"line":32914},[96,73342,51755],{"class":106},[96,73344,69123],{"class":51279},[96,73346,51286],{"class":106},[96,73348,73349,73351,73353],{"class":98,"line":32925},[96,73350,51320],{"class":106},[96,73352,53866],{"class":51279},[96,73354,51286],{"class":106},[96,73356,73357,73359,73361,73364,73366,73369,73371],{"class":98,"line":32931},[96,73358,55213],{"class":106},[96,73360,96],{"class":51279},[96,73362,73363],{"class":106},">+\u003C\u002F",[96,73365,96],{"class":51279},[96,73367,73368],{"class":106},">添加\u003C\u002F",[96,73370,53866],{"class":51279},[96,73372,51286],{"class":106},[96,73374,73375,73377,73379],{"class":98,"line":32951},[96,73376,52396],{"class":106},[96,73378,66604],{"class":51279},[96,73380,51286],{"class":106},[96,73382,73383,73385,73387,73389,73391,73393,73396,73398,73401,73403,73406,73408],{"class":98,"line":32967},[96,73384,52123],{"class":106},[96,73386,51590],{"class":51279},[96,73388,53465],{"class":1946},[96,73390,152],{"class":106},[96,73392,62559],{"class":211},[96,73394,73395],{"class":106},">共有数据 \u003C",[96,73397,96],{"class":51279},[96,73399,73400],{"class":106},">0\u003C\u002F",[96,73402,96],{"class":51279},[96,73404,73405],{"class":106},"> 条\u003C\u002F",[96,73407,51590],{"class":51279},[96,73409,51286],{"class":106},[96,73411,73412,73414,73416],{"class":98,"line":32973},[96,73413,52123],{"class":106},[96,73415,244],{"class":51279},[96,73417,51286],{"class":106},[96,73419,73420,73422,73424],{"class":98,"line":32987},[96,73421,51320],{"class":106},[96,73423,247],{"class":51279},[96,73425,51286],{"class":106},[96,73427,73428,73430,73432],{"class":98,"line":32993},[96,73429,55213],{"class":106},[96,73431,250],{"class":51279},[96,73433,51286],{"class":106},[96,73435,73436,73438,73440,73443,73445],{"class":98,"line":32999},[96,73437,55281],{"class":106},[96,73439,253],{"class":51279},[96,73441,73442],{"class":106},">ID\u003C\u002F",[96,73444,253],{"class":51279},[96,73446,51286],{"class":106},[96,73448,73449,73451,73453,73455,73457],{"class":98,"line":33010},[96,73450,55281],{"class":106},[96,73452,253],{"class":51279},[96,73454,69434],{"class":106},[96,73456,253],{"class":51279},[96,73458,51286],{"class":106},[96,73460,73461,73463,73465,73467,73469],{"class":98,"line":33016},[96,73462,55281],{"class":106},[96,73464,253],{"class":51279},[96,73466,69447],{"class":106},[96,73468,253],{"class":51279},[96,73470,51286],{"class":106},[96,73472,73473,73475,73477,73479,73481],{"class":98,"line":33022},[96,73474,55281],{"class":106},[96,73476,253],{"class":51279},[96,73478,69460],{"class":106},[96,73480,253],{"class":51279},[96,73482,51286],{"class":106},[96,73484,73485,73487,73489,73491,73493],{"class":98,"line":33032},[96,73486,55281],{"class":106},[96,73488,253],{"class":51279},[96,73490,69473],{"class":106},[96,73492,253],{"class":51279},[96,73494,51286],{"class":106},[96,73496,73497,73499,73501,73503,73505],{"class":98,"line":33038},[96,73498,55281],{"class":106},[96,73500,253],{"class":51279},[96,73502,69486],{"class":106},[96,73504,253],{"class":51279},[96,73506,51286],{"class":106},[96,73508,73509,73511,73513,73516,73518],{"class":98,"line":33049},[96,73510,55281],{"class":106},[96,73512,253],{"class":51279},[96,73514,73515],{"class":106},">录入时间\u003C\u002F",[96,73517,253],{"class":51279},[96,73519,51286],{"class":106},[96,73521,73522,73524,73526,73528,73530],{"class":98,"line":33055},[96,73523,55281],{"class":106},[96,73525,253],{"class":51279},[96,73527,69499],{"class":106},[96,73529,253],{"class":51279},[96,73531,51286],{"class":106},[96,73533,73534,73536,73538],{"class":98,"line":33065},[96,73535,55386],{"class":106},[96,73537,250],{"class":51279},[96,73539,51286],{"class":106},[96,73541,73542,73544,73546],{"class":98,"line":33070},[96,73543,51755],{"class":106},[96,73545,247],{"class":51279},[96,73547,51286],{"class":106},[96,73549,73550,73552,73554],{"class":98,"line":33076},[96,73551,51320],{"class":106},[96,73553,291],{"class":51279},[96,73555,51286],{"class":106},[96,73557,73558],{"class":98,"line":33125},[96,73559,73560],{"class":165},"      \u003C!-- \u003Ctr>\n",[96,73562,73563],{"class":98,"line":33172},[96,73564,73565],{"class":165},"        \u003Ctd>1\u003C\u002Ftd>\n",[96,73567,73568],{"class":98,"line":33177},[96,73569,73565],{"class":165},[96,73571,73572],{"class":98,"line":33183},[96,73573,73565],{"class":165},[96,73575,73576],{"class":98,"line":33202},[96,73577,73565],{"class":165},[96,73579,73580],{"class":98,"line":33208},[96,73581,73565],{"class":165},[96,73583,73584],{"class":98,"line":33228},[96,73585,73565],{"class":165},[96,73587,73588],{"class":98,"line":33234},[96,73589,73565],{"class":165},[96,73591,73592],{"class":98,"line":33240},[96,73593,73594],{"class":165},"        \u003Ctd>\n",[96,73596,73597],{"class":98,"line":33250},[96,73598,73599],{"class":165},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[96,73601,73602],{"class":98,"line":33255},[96,73603,73604],{"class":165},"        \u003C\u002Ftd>\n",[96,73606,73607],{"class":98,"line":33261},[96,73608,73609],{"class":165},"      \u003C\u002Ftr> -->\n",[96,73611,73612,73614,73616],{"class":98,"line":33277},[96,73613,51755],{"class":106},[96,73615,291],{"class":51279},[96,73617,51286],{"class":106},[96,73619,73620,73622,73624],{"class":98,"line":33322},[96,73621,52396],{"class":106},[96,73623,244],{"class":51279},[96,73625,51286],{"class":106},[96,73627,73628,73630,73632],{"class":98,"line":33328},[96,73629,52123],{"class":106},[96,73631,51792],{"class":51279},[96,73633,51286],{"class":106},[96,73635,73636],{"class":98,"line":33334},[96,73637,73638],{"class":165},"    \u002F\u002F const initData = [{\n",[96,73640,73641],{"class":98,"line":33340},[96,73642,73643],{"class":165},"    \u002F\u002F   unameId: 1,\n",[96,73645,73646],{"class":98,"line":33351},[96,73647,73648],{"class":165},"    \u002F\u002F   uname: '华晨宇',\n",[96,73650,73651],{"class":98,"line":33357},[96,73652,73653],{"class":165},"    \u002F\u002F   age: 22,\n",[96,73655,73656],{"class":98,"line":33363},[96,73657,73658],{"class":165},"    \u002F\u002F   salary: 12000,\n",[96,73660,73661],{"class":98,"line":33369},[96,73662,73663],{"class":165},"    \u002F\u002F   gender: '男',\n",[96,73665,73666],{"class":98,"line":33387},[96,73667,73668],{"class":165},"    \u002F\u002F   city: '北京',\n",[96,73670,73671],{"class":98,"line":33401},[96,73672,73673],{"class":165},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[96,73675,73676],{"class":98,"line":33410},[96,73677,73678],{"class":165},"    \u002F\u002F }]\n",[96,73680,73681],{"class":98,"line":33419},[96,73682,73683],{"class":165},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[96,73685,73686],{"class":98,"line":33428},[96,73687,73688],{"class":165},"    \u002F\u002F 1.渲染业务\n",[96,73690,73691],{"class":98,"line":33437},[96,73692,73693],{"class":165},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[96,73695,73696],{"class":98,"line":33443},[96,73697,73698],{"class":165},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[96,73700,73701],{"class":98,"line":33449},[96,73702,73703],{"class":165},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[96,73705,73706],{"class":98,"line":33457},[96,73707,2383],{"emptyLinePlaceholder":23},[96,73709,73710],{"class":98,"line":33462},[96,73711,73712],{"class":165},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[96,73714,73715],{"class":98,"line":33468},[96,73716,73717],{"class":165},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[96,73719,73720,73722,73724,73726],{"class":98,"line":33479},[96,73721,11205],{"class":102},[96,73723,57674],{"class":155},[96,73725,13548],{"class":102},[96,73727,51817],{"class":106},[96,73729,73730,73733,73735],{"class":98,"line":33485},[96,73731,73732],{"class":106},"    console.",[96,73734,58226],{"class":1946},[96,73736,52391],{"class":106},[96,73738,73739],{"class":98,"line":33505},[96,73740,2383],{"emptyLinePlaceholder":23},[96,73742,73743],{"class":98,"line":33511},[96,73744,73745],{"class":165},"    \u002F\u002F 时间函数\n",[96,73747,73748,73750,73753],{"class":98,"line":33517},[96,73749,70063],{"class":102},[96,73751,73752],{"class":1946}," getTime",[96,73754,10837],{"class":106},[96,73756,73757,73759,73762,73764,73766,73769],{"class":98,"line":33523},[96,73758,58207],{"class":102},[96,73760,73761],{"class":155}," date",[96,73763,13548],{"class":102},[96,73765,11562],{"class":102},[96,73767,73768],{"class":1946}," Date",[96,73770,1959],{"class":106},[96,73772,73773,73775,73777,73779,73782,73785,73787,73789,73791,73794,73797,73799,73801,73803,73805,73807,73809,73811],{"class":98,"line":33540},[96,73774,58207],{"class":102},[96,73776,16075],{"class":155},[96,73778,13548],{"class":102},[96,73780,73781],{"class":106}," date.",[96,73783,73784],{"class":1946},"getHours",[96,73786,13034],{"class":106},[96,73788,1017],{"class":102},[96,73790,2021],{"class":155},[96,73792,73793],{"class":102}," ?",[96,73795,73796],{"class":211}," '0'",[96,73798,45545],{"class":102},[96,73800,73781],{"class":106},[96,73802,73784],{"class":1946},[96,73804,13034],{"class":106},[96,73806,966],{"class":102},[96,73808,73781],{"class":106},[96,73810,73784],{"class":1946},[96,73812,1959],{"class":106},[96,73814,73815,73817,73820,73822,73824,73827,73829,73831,73833,73835,73837,73839,73841,73843,73845,73847,73849,73851],{"class":98,"line":33546},[96,73816,58207],{"class":102},[96,73818,73819],{"class":155}," m",[96,73821,13548],{"class":102},[96,73823,73781],{"class":106},[96,73825,73826],{"class":1946},"getMinutes",[96,73828,13034],{"class":106},[96,73830,1017],{"class":102},[96,73832,2021],{"class":155},[96,73834,73793],{"class":102},[96,73836,73796],{"class":211},[96,73838,45545],{"class":102},[96,73840,73781],{"class":106},[96,73842,73826],{"class":1946},[96,73844,13034],{"class":106},[96,73846,966],{"class":102},[96,73848,73781],{"class":106},[96,73850,73826],{"class":1946},[96,73852,1959],{"class":106},[96,73854,73855,73857,73859,73861,73863,73866,73868,73870,73872,73874,73876,73878,73880,73882,73884,73886,73888,73890],{"class":98,"line":33552},[96,73856,58207],{"class":102},[96,73858,8412],{"class":155},[96,73860,13548],{"class":102},[96,73862,73781],{"class":106},[96,73864,73865],{"class":1946},"getSeconds",[96,73867,13034],{"class":106},[96,73869,1017],{"class":102},[96,73871,2021],{"class":155},[96,73873,73793],{"class":102},[96,73875,73796],{"class":211},[96,73877,45545],{"class":102},[96,73879,73781],{"class":106},[96,73881,73865],{"class":1946},[96,73883,13034],{"class":106},[96,73885,966],{"class":102},[96,73887,73781],{"class":106},[96,73889,73865],{"class":1946},[96,73891,1959],{"class":106},[96,73893,73894,73896,73899,73901,73903,73906,73908,73911,73913,73916,73918,73920,73923,73925,73927,73929,73931,73933,73935,73938,73940,73943,73945,73948,73950,73952,73954],{"class":98,"line":33558},[96,73895,58207],{"class":102},[96,73897,73898],{"class":155}," str",[96,73900,13548],{"class":102},[96,73902,62882],{"class":211},[96,73904,73905],{"class":106},"date",[96,73907,665],{"class":211},[96,73909,73910],{"class":1946},"getFullYear",[96,73912,2410],{"class":211},[96,73914,73915],{"class":211},"}\u002F${",[96,73917,73905],{"class":106},[96,73919,665],{"class":211},[96,73921,73922],{"class":1946},"getMonth",[96,73924,13034],{"class":211},[96,73926,588],{"class":102},[96,73928,25097],{"class":155},[96,73930,73915],{"class":211},[96,73932,73905],{"class":106},[96,73934,665],{"class":211},[96,73936,73937],{"class":1946},"getDate",[96,73939,2410],{"class":211},[96,73941,73942],{"class":211},"} ${",[96,73944,522],{"class":106},[96,73946,73947],{"class":211},"}:${",[96,73949,651],{"class":106},[96,73951,73947],{"class":211},[96,73953,802],{"class":106},[96,73955,73956],{"class":211},"}`\n",[96,73958,73959,73962],{"class":98,"line":33564},[96,73960,73961],{"class":102},"      return",[96,73963,73964],{"class":106}," str\n",[96,73966,73967],{"class":98,"line":33570},[96,73968,2170],{"class":106},[96,73970,73971],{"class":98,"line":33597},[96,73972,73973],{"class":165},"    \u002F\u002F 渲染函数\n",[96,73975,73976,73978,73980,73982,73984,73986,73988,73990],{"class":98,"line":33621},[96,73977,11205],{"class":102},[96,73979,69726],{"class":155},[96,73981,13548],{"class":102},[96,73983,54375],{"class":106},[96,73985,54378],{"class":1946},[96,73987,107],{"class":106},[96,73989,69737],{"class":211},[96,73991,113],{"class":106},[96,73993,73994,73996,73998],{"class":98,"line":33627},[96,73995,70063],{"class":102},[96,73997,70066],{"class":1946},[96,73999,10837],{"class":106},[96,74001,74002],{"class":98,"line":33633},[96,74003,74004],{"class":165},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[96,74006,74007],{"class":98,"line":33639},[96,74008,74009],{"class":165},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[96,74011,74012,74014,74017,74019,74021,74024,74026,74028,74030,74033,74035,74038],{"class":98,"line":33650},[96,74013,58207],{"class":102},[96,74015,74016],{"class":155}," trArr",[96,74018,13548],{"class":102},[96,74020,51944],{"class":106},[96,74022,74023],{"class":1946},"map",[96,74025,107],{"class":106},[96,74027,54428],{"class":102},[96,74029,1641],{"class":106},[96,74031,74032],{"class":5200},"ele",[96,74034,12419],{"class":106},[96,74036,74037],{"class":5200},"index",[96,74039,12426],{"class":106},[96,74041,74042,74044],{"class":98,"line":33661},[96,74043,14736],{"class":102},[96,74045,70147],{"class":211},[96,74047,74048],{"class":98,"line":33667},[96,74049,74050],{"class":211},"      \u003Ctr>\n",[96,74052,74053,74055,74057,74059,74062],{"class":98,"line":33684},[96,74054,70152],{"class":211},[96,74056,74032],{"class":106},[96,74058,665],{"class":211},[96,74060,74061],{"class":106},"unameId",[96,74063,70167],{"class":211},[96,74065,74066,74068,74070,74072,74074],{"class":98,"line":33707},[96,74067,70152],{"class":211},[96,74069,74032],{"class":106},[96,74071,665],{"class":211},[96,74073,70183],{"class":106},[96,74075,70167],{"class":211},[96,74077,74078,74080,74082,74084,74086],{"class":98,"line":33730},[96,74079,70152],{"class":211},[96,74081,74032],{"class":106},[96,74083,665],{"class":211},[96,74085,70200],{"class":106},[96,74087,70167],{"class":211},[96,74089,74090,74092,74094,74096,74098],{"class":98,"line":33736},[96,74091,70152],{"class":211},[96,74093,74032],{"class":106},[96,74095,665],{"class":211},[96,74097,70217],{"class":106},[96,74099,70167],{"class":211},[96,74101,74102,74104,74106,74108,74110],{"class":98,"line":33741},[96,74103,70152],{"class":211},[96,74105,74032],{"class":106},[96,74107,665],{"class":211},[96,74109,70234],{"class":106},[96,74111,70167],{"class":211},[96,74113,74114,74116,74118,74120,74122],{"class":98,"line":33750},[96,74115,70152],{"class":211},[96,74117,74032],{"class":106},[96,74119,665],{"class":211},[96,74121,70251],{"class":106},[96,74123,70167],{"class":211},[96,74125,74126,74128,74130,74132,74134],{"class":98,"line":33760},[96,74127,70152],{"class":211},[96,74129,74032],{"class":106},[96,74131,665],{"class":211},[96,74133,2370],{"class":106},[96,74135,70167],{"class":211},[96,74137,74138],{"class":98,"line":33766},[96,74139,73594],{"class":211},[96,74141,74142,74145,74147],{"class":98,"line":33771},[96,74143,74144],{"class":211},"          \u003Ca href=\"#\" data-id=\"${",[96,74146,74037],{"class":106},[96,74148,74149],{"class":211},"}\">删除\u003C\u002Fa>\n",[96,74151,74152],{"class":98,"line":33777},[96,74153,73604],{"class":211},[96,74155,74156],{"class":98,"line":33790},[96,74157,74158],{"class":211},"      \u003C\u002Ftr>\n",[96,74160,74161],{"class":98,"line":33796},[96,74162,74163],{"class":211},"  `\n",[96,74165,74166],{"class":98,"line":33807},[96,74167,64794],{"class":106},[96,74169,74170,74172,74174],{"class":98,"line":33818},[96,74171,58223],{"class":106},[96,74173,58226],{"class":1946},[96,74175,74176],{"class":106},"(trArr)\n",[96,74178,74179],{"class":98,"line":33837},[96,74180,2383],{"emptyLinePlaceholder":23},[96,74182,74183],{"class":98,"line":49497},[96,74184,74185],{"class":165},"      \u002F\u002F (2) 把数组转换为字符串join\n",[96,74187,74188],{"class":98,"line":49502},[96,74189,74190],{"class":165},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[96,74192,74193,74195,74197,74200,74203,74205,74208],{"class":98,"line":49511},[96,74194,70078],{"class":106},[96,74196,152],{"class":102},[96,74198,74199],{"class":106}," trArr.",[96,74201,74202],{"class":1946},"join",[96,74204,107],{"class":106},[96,74206,74207],{"class":211},"''",[96,74209,113],{"class":106},[96,74211,74212],{"class":98,"line":49520},[96,74213,74214],{"class":165},"      \u002F\u002F 显示共有几条\n",[96,74216,74217,74219,74221,74223,74226,74229,74231,74233],{"class":98,"line":49525},[96,74218,55750],{"class":106},[96,74220,54378],{"class":1946},[96,74222,107],{"class":106},[96,74224,74225],{"class":211},"'.total span'",[96,74227,74228],{"class":106},").innerHTML ",[96,74230,152],{"class":102},[96,74232,51944],{"class":106},[96,74234,55810],{"class":155},[96,74236,74237],{"class":98,"line":49530},[96,74238,2170],{"class":106},[96,74240,74241],{"class":98,"line":49535},[96,74242,74243],{"class":165},"    \u002F\u002F render()\n",[96,74245,74246],{"class":98,"line":49548},[96,74247,2383],{"emptyLinePlaceholder":23},[96,74249,74250],{"class":98,"line":49553},[96,74251,74252],{"class":165},"    \u002F\u002F 获取DOM对象\n",[96,74254,74255,74257,74259,74261,74263,74265,74267,74269],{"class":98,"line":49562},[96,74256,11205],{"class":102},[96,74258,69800],{"class":155},[96,74260,13548],{"class":102},[96,74262,54375],{"class":106},[96,74264,54378],{"class":1946},[96,74266,107],{"class":106},[96,74268,69811],{"class":211},[96,74270,113],{"class":106},[96,74272,74273,74275,74277,74279,74281,74283,74285,74287],{"class":98,"line":49571},[96,74274,11205],{"class":102},[96,74276,69627],{"class":155},[96,74278,13548],{"class":102},[96,74280,54375],{"class":106},[96,74282,54378],{"class":1946},[96,74284,107],{"class":106},[96,74286,69638],{"class":211},[96,74288,113],{"class":106},[96,74290,74291,74293,74295,74297,74299,74301,74303,74305],{"class":98,"line":49588},[96,74292,11205],{"class":102},[96,74294,15673],{"class":155},[96,74296,13548],{"class":102},[96,74298,54375],{"class":106},[96,74300,54378],{"class":1946},[96,74302,107],{"class":106},[96,74304,69657],{"class":211},[96,74306,113],{"class":106},[96,74308,74310,74312,74314,74316,74318,74320,74322,74324],{"class":98,"line":74309},231,[96,74311,11205],{"class":102},[96,74313,69686],{"class":155},[96,74315,13548],{"class":102},[96,74317,54375],{"class":106},[96,74319,54378],{"class":1946},[96,74321,107],{"class":106},[96,74323,69697],{"class":211},[96,74325,113],{"class":106},[96,74327,74329,74331,74333,74335,74337,74339,74341,74343],{"class":98,"line":74328},232,[96,74330,11205],{"class":102},[96,74332,69666],{"class":155},[96,74334,13548],{"class":102},[96,74336,54375],{"class":106},[96,74338,54378],{"class":1946},[96,74340,107],{"class":106},[96,74342,69677],{"class":211},[96,74344,113],{"class":106},[96,74346,74348,74350,74352,74354,74356,74358,74360,74362],{"class":98,"line":74347},233,[96,74349,11205],{"class":102},[96,74351,69706],{"class":155},[96,74353,13548],{"class":102},[96,74355,54375],{"class":106},[96,74357,54378],{"class":1946},[96,74359,107],{"class":106},[96,74361,69717],{"class":211},[96,74363,113],{"class":106},[96,74365,74367],{"class":98,"line":74366},234,[96,74368,2383],{"emptyLinePlaceholder":23},[96,74370,74372],{"class":98,"line":74371},235,[96,74373,74374],{"class":165},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[96,74376,74378,74380,74382,74384,74386,74388,74390,74392,74394],{"class":98,"line":74377},236,[96,74379,69818],{"class":106},[96,74381,57792],{"class":1946},[96,74383,107],{"class":106},[96,74385,69825],{"class":211},[96,74387,12419],{"class":106},[96,74389,54428],{"class":102},[96,74391,1641],{"class":106},[96,74393,181],{"class":5200},[96,74395,12426],{"class":106},[96,74397,74399],{"class":98,"line":74398},237,[96,74400,74401],{"class":165},"      \u002F\u002F 禁止浏览器跳转\n",[96,74403,74405,74407,74409],{"class":98,"line":74404},238,[96,74406,69845],{"class":106},[96,74408,69848],{"class":1946},[96,74410,1959],{"class":106},[96,74412,74414],{"class":98,"line":74413},239,[96,74415,74416],{"class":165},"      \u002F\u002F 非空判断\n",[96,74418,74420],{"class":98,"line":74419},240,[96,74421,74422],{"class":165},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[96,74424,74426],{"class":98,"line":74425},241,[96,74427,74428],{"class":165},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[96,74430,74432,74434,74436,74438,74441,74443,74446,74449,74451,74453],{"class":98,"line":74431},242,[96,74433,54459],{"class":102},[96,74435,1641],{"class":106},[96,74437,333],{"class":102},[96,74439,74440],{"class":106},"uname.value ",[96,74442,71336],{"class":102},[96,74444,74445],{"class":102}," !",[96,74447,74448],{"class":106},"age.value ",[96,74450,71336],{"class":102},[96,74452,74445],{"class":102},[96,74454,74455],{"class":106},"salary.value) {\n",[96,74457,74459,74461,74463,74465,74467],{"class":98,"line":74458},243,[96,74460,14736],{"class":102},[96,74462,69919],{"class":1946},[96,74464,107],{"class":106},[96,74466,69924],{"class":211},[96,74468,113],{"class":106},[96,74470,74472],{"class":98,"line":74471},244,[96,74473,52377],{"class":106},[96,74475,74477,74479,74481],{"class":98,"line":74476},245,[96,74478,57986],{"class":106},[96,74480,51863],{"class":1946},[96,74482,74483],{"class":106},"({\n",[96,74485,74487],{"class":98,"line":74486},246,[96,74488,74489],{"class":165},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[96,74491,74493],{"class":98,"line":74492},247,[96,74494,74495],{"class":165},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[96,74497,74499],{"class":98,"line":74498},248,[96,74500,74501],{"class":165},"        \u002F\u002F 对象的序号应为数组长度+1\n",[96,74503,74505],{"class":98,"line":74504},249,[96,74506,74507],{"class":165},"        \u002F\u002F unameId: arr.length + 1,\n",[96,74509,74511],{"class":98,"line":74510},250,[96,74512,2383],{"emptyLinePlaceholder":23},[96,74514,74516],{"class":98,"line":74515},251,[96,74517,74518],{"class":165},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[96,74520,74522],{"class":98,"line":74521},252,[96,74523,74524],{"class":165},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[96,74526,74528],{"class":98,"line":74527},253,[96,74529,74530],{"class":165},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[96,74532,74534],{"class":98,"line":74533},254,[96,74535,74536],{"class":165},"        \u002F\u002F 0当假看\n",[96,74538,74540,74543,74545,74547,74550,74552,74554,74556,74559,74561,74563,74566,74568],{"class":98,"line":74539},255,[96,74541,74542],{"class":106},"        unameId: arr.",[96,74544,51947],{"class":155},[96,74546,73793],{"class":102},[96,74548,74549],{"class":106}," arr[arr.",[96,74551,51947],{"class":155},[96,74553,52250],{"class":102},[96,74555,25097],{"class":155},[96,74557,74558],{"class":106},"].unameId ",[96,74560,588],{"class":102},[96,74562,25097],{"class":155},[96,74564,74565],{"class":102}," :",[96,74567,25097],{"class":155},[96,74569,31445],{"class":106},[96,74571,74573],{"class":98,"line":74572},256,[96,74574,69972],{"class":106},[96,74576,74578],{"class":98,"line":74577},257,[96,74579,69977],{"class":106},[96,74581,74583],{"class":98,"line":74582},258,[96,74584,69987],{"class":106},[96,74586,74588],{"class":98,"line":74587},259,[96,74589,69982],{"class":106},[96,74591,74593],{"class":98,"line":74592},260,[96,74594,74595],{"class":106},"        city: city.value,\n",[96,74597,74599],{"class":98,"line":74598},261,[96,74600,74601],{"class":165},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[96,74603,74605],{"class":98,"line":74604},262,[96,74606,74607],{"class":165},"        \u002F\u002F time: new Date().toDateString()\n",[96,74609,74611,74614,74617],{"class":98,"line":74610},263,[96,74612,74613],{"class":106},"        time: ",[96,74615,74616],{"class":1946},"getTime",[96,74618,1959],{"class":106},[96,74620,74622],{"class":98,"line":74621},264,[96,74623,64794],{"class":106},[96,74625,74627],{"class":98,"line":74626},265,[96,74628,74629],{"class":165},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[96,74631,74633,74635],{"class":98,"line":74632},266,[96,74634,70047],{"class":1946},[96,74636,1959],{"class":106},[96,74638,74640,74642,74644,74646,74648],{"class":98,"line":74639},267,[96,74641,70030],{"class":155},[96,74643,665],{"class":106},[96,74645,70035],{"class":1946},[96,74647,13034],{"class":106},[96,74649,74650],{"class":165},"\u002F\u002F重置表单\n",[96,74652,74654],{"class":98,"line":74653},268,[96,74655,74656],{"class":165},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[96,74658,74660,74663,74665,74667,74670,74672,74674,74676,74678],{"class":98,"line":74659},269,[96,74661,74662],{"class":106},"      localStorage.",[96,74664,71633],{"class":1946},[96,74666,107],{"class":106},[96,74668,74669],{"class":211},"'data'",[96,74671,12419],{"class":106},[96,74673,71643],{"class":155},[96,74675,665],{"class":106},[96,74677,71648],{"class":1946},[96,74679,74680],{"class":106},"(arr))\n",[96,74682,74684],{"class":98,"line":74683},270,[96,74685,33440],{"class":106},[96,74687,74689],{"class":98,"line":74688},271,[96,74690,2383],{"emptyLinePlaceholder":23},[96,74692,74694],{"class":98,"line":74693},272,[96,74695,74696],{"class":165},"    \u002F\u002F 3.删除业务\n",[96,74698,74700],{"class":98,"line":74699},273,[96,74701,74702],{"class":165},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[96,74704,74706,74708,74710,74712,74714,74716,74718,74720,74722],{"class":98,"line":74705},274,[96,74707,70320],{"class":106},[96,74709,57792],{"class":1946},[96,74711,107],{"class":106},[96,74713,57797],{"class":211},[96,74715,12419],{"class":106},[96,74717,54428],{"class":102},[96,74719,1641],{"class":106},[96,74721,181],{"class":5200},[96,74723,12426],{"class":106},[96,74725,74727],{"class":98,"line":74726},275,[96,74728,74729],{"class":165},"      \u002F\u002F 判断是否点击的是删除按钮\n",[96,74731,74733,74735,74737,74739,74741],{"class":98,"line":74732},276,[96,74734,54459],{"class":102},[96,74736,67013],{"class":106},[96,74738,54465],{"class":102},[96,74740,68235],{"class":211},[96,74742,12426],{"class":106},[96,74744,74746],{"class":98,"line":74745},277,[96,74747,74748],{"class":165},"        \u002F\u002F alert(1)\n",[96,74750,74752],{"class":98,"line":74751},278,[96,74753,74754],{"class":165},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[96,74756,74758],{"class":98,"line":74757},279,[96,74759,74760],{"class":165},"        \u002F\u002F console.log(e.target)\n",[96,74762,74764],{"class":98,"line":74763},280,[96,74765,74766],{"class":165},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[96,74768,74770],{"class":98,"line":74769},281,[96,74771,2383],{"emptyLinePlaceholder":23},[96,74773,74775],{"class":98,"line":74774},282,[96,74776,74777],{"class":165},"        \u002F\u002F 确认框，确然是否真的要删除\n",[96,74779,74781],{"class":98,"line":74780},283,[96,74782,74783],{"class":165},"        \u002F\u002F confirm()为确认框\n",[96,74785,74787],{"class":98,"line":74786},284,[96,74788,74789],{"class":165},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[96,74791,74793,74795,74797,74800,74802,74805],{"class":98,"line":74792},285,[96,74794,2480],{"class":102},[96,74796,1641],{"class":106},[96,74798,74799],{"class":1946},"confirm",[96,74801,107],{"class":106},[96,74803,74804],{"class":211},"'您确定要删除这条数据吗？'",[96,74806,74807],{"class":106},")) {\n",[96,74809,74811,74814,74816,74818,74820],{"class":98,"line":74810},286,[96,74812,74813],{"class":106},"          arr.",[96,74815,57989],{"class":1946},[96,74817,70373],{"class":106},[96,74819,324],{"class":155},[96,74821,113],{"class":106},[96,74823,74825],{"class":98,"line":74824},287,[96,74826,74827],{"class":165},"          \u002F\u002F 3.4 重新渲染页面\n",[96,74829,74831,74834],{"class":98,"line":74830},288,[96,74832,74833],{"class":1946},"          render",[96,74835,1959],{"class":106},[96,74837,74839],{"class":98,"line":74838},289,[96,74840,74841],{"class":165},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[96,74843,74845,74848,74850,74852,74854,74856,74858,74860,74862],{"class":98,"line":74844},290,[96,74846,74847],{"class":106},"          localStorage.",[96,74849,71633],{"class":1946},[96,74851,107],{"class":106},[96,74853,74669],{"class":211},[96,74855,12419],{"class":106},[96,74857,71643],{"class":155},[96,74859,665],{"class":106},[96,74861,71648],{"class":1946},[96,74863,74680],{"class":106},[96,74865,74867],{"class":98,"line":74866},291,[96,74868,2512],{"class":106},[96,74870,74872],{"class":98,"line":74871},292,[96,74873,52377],{"class":106},[96,74875,74877],{"class":98,"line":74876},293,[96,74878,2383],{"emptyLinePlaceholder":23},[96,74880,74882],{"class":98,"line":74881},294,[96,74883,33440],{"class":106},[96,74885,74887],{"class":98,"line":74886},295,[96,74888,2383],{"emptyLinePlaceholder":23},[96,74890,74892,74894,74896],{"class":98,"line":74891},296,[96,74893,52396],{"class":106},[96,74895,51792],{"class":51279},[96,74897,51286],{"class":106},[96,74899,74901,74903,74905],{"class":98,"line":74900},297,[96,74902,51764],{"class":106},[96,74904,51779],{"class":51279},[96,74906,51286],{"class":106},[96,74908,74910],{"class":98,"line":74909},298,[96,74911,2383],{"emptyLinePlaceholder":23},[96,74913,74915,74917,74919],{"class":98,"line":74914},299,[96,74916,51764],{"class":106},[96,74918,50614],{"class":51279},[96,74920,51286],{"class":106},[38,74922,74924],{"id":74923},"_36-正则表达式","3.6 正则表达式",[14,74926,74927],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[14,74929,74930],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[14,74932,74933],{},"正则表达式的作用：",[1114,74935,74936,74943,74949],{},[53,74937,74938,74939,74942],{},"表单验证（ ",[256,74940,74941],{},"匹配"," ）",[53,74944,74945,74946,74942],{},"过滤敏感词（ ",[256,74947,74948],{},"替换",[53,74950,74951,74952,74942],{},"字符串中提取我们想要的部分（ ",[256,74953,74954],{},"提取",[67,74956,74958],{"id":74957},"_361-语法","3.6.1 语法",[14,74960,74961],{},"正则表达式使用步骤：",[50,74963,74964,74967],{},[53,74965,74966],{},"定义规则",[53,74968,74969],{},"查找是否匹配",[14,74971,74972],{},"正则表达式里边不需要写引号",[14,74974,74975],{},[1445,74976],{"alt":18,"src":74977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[14,74979,74980],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[14,74982,74983],{},"reg.test(str)",[14,74985,74986],{},[1445,74987],{"alt":18,"src":74988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[14,74990,74991],{},[1445,74992],{"alt":18,"src":74993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[67,74995,74997],{"id":74996},"_362-元字符","3.6.2 元字符",[50,74999,75000,75003,75006,75009,75016],{},[53,75001,75002],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[53,75004,75005],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[53,75007,75008],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[53,75010,75011,75012],{},"正则验证工具：",[345,75013,75014],{"href":75014,"rel":75015},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[23850],[53,75017,75018],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[21982,75020,75022],{"id":75021},"_3621-边界符","3.6.2.1 边界符",[14,75024,75025],{},[1445,75026],{"alt":18,"src":75027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[14,75029,75030],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[14,75032,75033],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[14,75035,75036],{},"只匹配一次",[14,75038,75039],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[21982,75041,75043],{"id":75042},"_3622-量词","3.6.2.2 量词",[14,75045,75046],{},[1445,75047],{"alt":18,"src":75048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[14,75050,75051],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[21982,75053,75055],{"id":75054},"_3623-元字符","3.6.2.3 元字符",[14,75057,75058],{},[1445,75059],{"alt":18,"src":75060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[14,75062,75063],{},"匹配的是a或b或c []只选一个",[14,75065,75066],{},[1445,75067],{"alt":18,"src":75068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[14,75070,75071],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[14,75073,75074],{},[1445,75075],{"alt":18,"src":75076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[14,75078,75079],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[14,75081,75082],{},[1445,75083],{"alt":18,"src":75084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[87,75086,75088],{"className":50612,"code":75087,"language":50614,"meta":18,"style":18},"\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",[93,75089,75090,75100,75114,75118,75126,75140,75160,75172,75180,75184,75192,75200,75205,75236,75263,75291,75295,75300,75328,75359,75364,75369,75400,75432,75464,75468,75473,75504,75534,75564,75568,75573,75604,75635,75665,75695,75699,75704,75737,75741,75746,75777,75808,75812,75817,75848,75878,75909,75913,75918,75950,75981,76012,76039,76070,76102,76135,76166,76197,76229,76260,76268,76276,76280],{"__ignoreMap":18},[96,75091,75092,75094,75096,75098],{"class":98,"line":99},[96,75093,51276],{"class":106},[96,75095,51280],{"class":51279},[96,75097,51283],{"class":1946},[96,75099,51286],{"class":106},[96,75101,75102,75104,75106,75108,75110,75112],{"class":98,"line":19},[96,75103,1017],{"class":106},[96,75105,50614],{"class":51279},[96,75107,51295],{"class":1946},[96,75109,152],{"class":106},[96,75111,51300],{"class":211},[96,75113,51286],{"class":106},[96,75115,75116],{"class":98,"line":1162},[96,75117,2383],{"emptyLinePlaceholder":23},[96,75119,75120,75122,75124],{"class":98,"line":1177},[96,75121,1017],{"class":106},[96,75123,51313],{"class":51279},[96,75125,51286],{"class":106},[96,75127,75128,75130,75132,75134,75136,75138],{"class":98,"line":1183},[96,75129,52123],{"class":106},[96,75131,51323],{"class":51279},[96,75133,51326],{"class":1946},[96,75135,152],{"class":106},[96,75137,51331],{"class":211},[96,75139,51286],{"class":106},[96,75141,75142,75144,75146,75148,75150,75152,75154,75156,75158],{"class":98,"line":1197},[96,75143,52123],{"class":106},[96,75145,51323],{"class":51279},[96,75147,14904],{"class":1946},[96,75149,152],{"class":106},[96,75151,51370],{"class":211},[96,75153,51350],{"class":1946},[96,75155,152],{"class":106},[96,75157,51377],{"class":211},[96,75159,51286],{"class":106},[96,75161,75162,75164,75166,75168,75170],{"class":98,"line":1203},[96,75163,52123],{"class":106},[96,75165,51386],{"class":51279},[96,75167,51389],{"class":106},[96,75169,51386],{"class":51279},[96,75171,51286],{"class":106},[96,75173,75174,75176,75178],{"class":98,"line":1294},[96,75175,51764],{"class":106},[96,75177,51313],{"class":51279},[96,75179,51286],{"class":106},[96,75181,75182],{"class":98,"line":1300},[96,75183,2383],{"emptyLinePlaceholder":23},[96,75185,75186,75188,75190],{"class":98,"line":1312},[96,75187,1017],{"class":106},[96,75189,51779],{"class":51279},[96,75191,51286],{"class":106},[96,75193,75194,75196,75198],{"class":98,"line":1595},[96,75195,52123],{"class":106},[96,75197,51792],{"class":51279},[96,75199,51286],{"class":106},[96,75201,75202],{"class":98,"line":1600},[96,75203,75204],{"class":165},"    \u002F\u002F 元字符中\n",[96,75206,75207,75209,75211,75213,75215,75218,75220,75222,75225,75227,75230,75233],{"class":98,"line":1606},[96,75208,73732],{"class":106},[96,75210,58226],{"class":1946},[96,75212,107],{"class":106},[96,75214,691],{"class":211},[96,75216,75217],{"class":47956},"哈",[96,75219,691],{"class":211},[96,75221,665],{"class":106},[96,75223,75224],{"class":1946},"test",[96,75226,107],{"class":106},[96,75228,75229],{"class":211},"'哈'",[96,75231,75232],{"class":106},"))  ",[96,75234,75235],{"class":165},"\u002F\u002Ftrue\n",[96,75237,75238,75240,75242,75244,75246,75248,75250,75252,75254,75256,75259,75261],{"class":98,"line":1611},[96,75239,73732],{"class":106},[96,75241,58226],{"class":1946},[96,75243,107],{"class":106},[96,75245,691],{"class":211},[96,75247,75217],{"class":47956},[96,75249,691],{"class":211},[96,75251,665],{"class":106},[96,75253,75224],{"class":1946},[96,75255,107],{"class":106},[96,75257,75258],{"class":211},"'哈哈'",[96,75260,75232],{"class":106},[96,75262,75235],{"class":165},[96,75264,75265,75267,75269,75271,75273,75275,75277,75279,75281,75283,75286,75289],{"class":98,"line":1625},[96,75266,73732],{"class":106},[96,75268,58226],{"class":1946},[96,75270,107],{"class":106},[96,75272,691],{"class":211},[96,75274,75217],{"class":47956},[96,75276,691],{"class":211},[96,75278,665],{"class":106},[96,75280,75224],{"class":1946},[96,75282,107],{"class":106},[96,75284,75285],{"class":211},"'二哈'",[96,75287,75288],{"class":106},"))   ",[96,75290,75235],{"class":165},[96,75292,75293],{"class":98,"line":1630},[96,75294,2383],{"emptyLinePlaceholder":23},[96,75296,75297],{"class":98,"line":1636},[96,75298,75299],{"class":165},"    \u002F\u002F 1.边界符\n",[96,75301,75302,75304,75306,75308,75310,75312,75314,75316,75318,75320,75322,75324,75326],{"class":98,"line":1657},[96,75303,73732],{"class":106},[96,75305,58226],{"class":1946},[96,75307,107],{"class":106},[96,75309,691],{"class":211},[96,75311,1073],{"class":102},[96,75313,75217],{"class":47956},[96,75315,691],{"class":211},[96,75317,665],{"class":106},[96,75319,75224],{"class":1946},[96,75321,107],{"class":106},[96,75323,75229],{"class":211},[96,75325,75232],{"class":106},[96,75327,75235],{"class":165},[96,75329,75330,75332,75334,75336,75338,75340,75342,75344,75346,75348,75350,75352,75354,75356],{"class":98,"line":1662},[96,75331,73732],{"class":106},[96,75333,58226],{"class":1946},[96,75335,107],{"class":106},[96,75337,691],{"class":211},[96,75339,1073],{"class":102},[96,75341,75217],{"class":47956},[96,75343,409],{"class":102},[96,75345,691],{"class":211},[96,75347,665],{"class":106},[96,75349,75224],{"class":1946},[96,75351,107],{"class":106},[96,75353,75258],{"class":211},[96,75355,75232],{"class":106},[96,75357,75358],{"class":165},"\u002F\u002Ffalse\n",[96,75360,75361],{"class":98,"line":1676},[96,75362,75363],{"class":165},"    \u002F\u002F 2.量词\n",[96,75365,75366],{"class":98,"line":1681},[96,75367,75368],{"class":165},"    \u002F\u002F 量词 * 类似于 >= 0\n",[96,75370,75371,75373,75375,75377,75379,75381,75383,75386,75388,75390,75392,75394,75396,75398],{"class":98,"line":1710},[96,75372,73732],{"class":106},[96,75374,58226],{"class":1946},[96,75376,107],{"class":106},[96,75378,691],{"class":211},[96,75380,1073],{"class":102},[96,75382,75217],{"class":47956},[96,75384,75385],{"class":102},"*$",[96,75387,691],{"class":211},[96,75389,665],{"class":106},[96,75391,75224],{"class":1946},[96,75393,107],{"class":106},[96,75395,75258],{"class":211},[96,75397,75232],{"class":106},[96,75399,75235],{"class":165},[96,75401,75402,75404,75406,75408,75410,75412,75414,75416,75418,75420,75422,75424,75427,75429],{"class":98,"line":1715},[96,75403,73732],{"class":106},[96,75405,58226],{"class":1946},[96,75407,107],{"class":106},[96,75409,691],{"class":211},[96,75411,1073],{"class":102},[96,75413,75217],{"class":47956},[96,75415,75385],{"class":102},[96,75417,691],{"class":211},[96,75419,665],{"class":106},[96,75421,75224],{"class":1946},[96,75423,107],{"class":106},[96,75425,75426],{"class":211},"'二哈好傻'",[96,75428,75232],{"class":106},[96,75430,75431],{"class":165},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[96,75433,75434,75436,75438,75440,75442,75444,75446,75448,75450,75452,75454,75456,75459,75461],{"class":98,"line":1732},[96,75435,73732],{"class":106},[96,75437,58226],{"class":1946},[96,75439,107],{"class":106},[96,75441,691],{"class":211},[96,75443,1073],{"class":102},[96,75445,75217],{"class":47956},[96,75447,75385],{"class":102},[96,75449,691],{"class":211},[96,75451,665],{"class":106},[96,75453,75224],{"class":1946},[96,75455,107],{"class":106},[96,75457,75458],{"class":211},"'哈好哈'",[96,75460,75288],{"class":106},[96,75462,75463],{"class":165},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[96,75465,75466],{"class":98,"line":1737},[96,75467,2383],{"emptyLinePlaceholder":23},[96,75469,75470],{"class":98,"line":1742},[96,75471,75472],{"class":165},"    \u002F\u002F +类似于>=1\n",[96,75474,75475,75477,75479,75481,75483,75485,75487,75490,75492,75494,75496,75498,75500,75502],{"class":98,"line":1747},[96,75476,73732],{"class":106},[96,75478,58226],{"class":1946},[96,75480,107],{"class":106},[96,75482,691],{"class":211},[96,75484,1073],{"class":102},[96,75486,75217],{"class":47956},[96,75488,75489],{"class":102},"+$",[96,75491,691],{"class":211},[96,75493,665],{"class":106},[96,75495,75224],{"class":1946},[96,75497,107],{"class":106},[96,75499,75258],{"class":211},[96,75501,75232],{"class":106},[96,75503,75235],{"class":165},[96,75505,75506,75508,75510,75512,75514,75516,75518,75520,75522,75524,75526,75528,75530,75532],{"class":98,"line":1761},[96,75507,73732],{"class":106},[96,75509,58226],{"class":1946},[96,75511,107],{"class":106},[96,75513,691],{"class":211},[96,75515,1073],{"class":102},[96,75517,75217],{"class":47956},[96,75519,75489],{"class":102},[96,75521,691],{"class":211},[96,75523,665],{"class":106},[96,75525,75224],{"class":1946},[96,75527,107],{"class":106},[96,75529,75426],{"class":211},[96,75531,75232],{"class":106},[96,75533,75431],{"class":165},[96,75535,75536,75538,75540,75542,75544,75546,75548,75550,75552,75554,75556,75558,75560,75562],{"class":98,"line":1766},[96,75537,73732],{"class":106},[96,75539,58226],{"class":1946},[96,75541,107],{"class":106},[96,75543,691],{"class":211},[96,75545,1073],{"class":102},[96,75547,75217],{"class":47956},[96,75549,75489],{"class":102},[96,75551,691],{"class":211},[96,75553,665],{"class":106},[96,75555,75224],{"class":1946},[96,75557,107],{"class":106},[96,75559,75458],{"class":211},[96,75561,75288],{"class":106},[96,75563,75358],{"class":165},[96,75565,75566],{"class":98,"line":2560},[96,75567,2383],{"emptyLinePlaceholder":23},[96,75569,75570],{"class":98,"line":2574},[96,75571,75572],{"class":165},"    \u002F\u002F ?类似于0次或一次\n",[96,75574,75575,75577,75579,75581,75583,75585,75588,75590,75592,75594,75596,75598,75600,75602],{"class":98,"line":2582},[96,75576,73732],{"class":106},[96,75578,58226],{"class":1946},[96,75580,107],{"class":106},[96,75582,691],{"class":211},[96,75584,1073],{"class":102},[96,75586,75587],{"class":47956},"哈？",[96,75589,409],{"class":102},[96,75591,691],{"class":211},[96,75593,665],{"class":106},[96,75595,75224],{"class":1946},[96,75597,107],{"class":106},[96,75599,74207],{"class":211},[96,75601,75288],{"class":106},[96,75603,75235],{"class":165},[96,75605,75606,75608,75610,75612,75614,75616,75618,75621,75623,75625,75627,75629,75631,75633],{"class":98,"line":2587},[96,75607,73732],{"class":106},[96,75609,58226],{"class":1946},[96,75611,107],{"class":106},[96,75613,691],{"class":211},[96,75615,1073],{"class":102},[96,75617,75217],{"class":47956},[96,75619,75620],{"class":102},"?$",[96,75622,691],{"class":211},[96,75624,665],{"class":106},[96,75626,75224],{"class":1946},[96,75628,107],{"class":106},[96,75630,75258],{"class":211},[96,75632,75232],{"class":106},[96,75634,75358],{"class":165},[96,75636,75637,75639,75641,75643,75645,75647,75649,75651,75653,75655,75657,75659,75661,75663],{"class":98,"line":2593},[96,75638,73732],{"class":106},[96,75640,58226],{"class":1946},[96,75642,107],{"class":106},[96,75644,691],{"class":211},[96,75646,1073],{"class":102},[96,75648,75217],{"class":47956},[96,75650,75620],{"class":102},[96,75652,691],{"class":211},[96,75654,665],{"class":106},[96,75656,75224],{"class":1946},[96,75658,107],{"class":106},[96,75660,75426],{"class":211},[96,75662,75232],{"class":106},[96,75664,75431],{"class":165},[96,75666,75667,75669,75671,75673,75675,75677,75679,75681,75683,75685,75687,75689,75691,75693],{"class":98,"line":2599},[96,75668,73732],{"class":106},[96,75670,58226],{"class":1946},[96,75672,107],{"class":106},[96,75674,691],{"class":211},[96,75676,1073],{"class":102},[96,75678,75217],{"class":47956},[96,75680,75620],{"class":102},[96,75682,691],{"class":211},[96,75684,665],{"class":106},[96,75686,75224],{"class":1946},[96,75688,107],{"class":106},[96,75690,75458],{"class":211},[96,75692,75232],{"class":106},[96,75694,75358],{"class":165},[96,75696,75697],{"class":98,"line":2604},[96,75698,2383],{"emptyLinePlaceholder":23},[96,75700,75701],{"class":98,"line":7932},[96,75702,75703],{"class":165},"    \u002F\u002F {n}写几，就必须出现几次\n",[96,75705,75706,75708,75710,75712,75714,75716,75718,75721,75723,75725,75727,75729,75732,75735],{"class":98,"line":7956},[96,75707,73732],{"class":106},[96,75709,58226],{"class":1946},[96,75711,107],{"class":106},[96,75713,691],{"class":211},[96,75715,1073],{"class":102},[96,75717,75217],{"class":47956},[96,75719,75720],{"class":102},"{4}$",[96,75722,691],{"class":211},[96,75724,665],{"class":106},[96,75726,75224],{"class":1946},[96,75728,107],{"class":106},[96,75730,75731],{"class":211},"'哈哈哈哈'",[96,75733,75734],{"class":106},")) ",[96,75736,75235],{"class":165},[96,75738,75739],{"class":98,"line":7961},[96,75740,2383],{"emptyLinePlaceholder":23},[96,75742,75743],{"class":98,"line":7967},[96,75744,75745],{"class":165},"    \u002F\u002F {n,}大于等于n次\n",[96,75747,75748,75750,75752,75754,75756,75758,75760,75763,75765,75767,75769,75771,75773,75775],{"class":98,"line":7994},[96,75749,73732],{"class":106},[96,75751,58226],{"class":1946},[96,75753,107],{"class":106},[96,75755,691],{"class":211},[96,75757,1073],{"class":102},[96,75759,75217],{"class":47956},[96,75761,75762],{"class":102},"{4,}$",[96,75764,691],{"class":211},[96,75766,665],{"class":106},[96,75768,75224],{"class":1946},[96,75770,107],{"class":106},[96,75772,75731],{"class":211},[96,75774,75734],{"class":106},[96,75776,75235],{"class":165},[96,75778,75779,75781,75783,75785,75787,75789,75791,75793,75795,75797,75799,75801,75804,75806],{"class":98,"line":7999},[96,75780,73732],{"class":106},[96,75782,58226],{"class":1946},[96,75784,107],{"class":106},[96,75786,691],{"class":211},[96,75788,1073],{"class":102},[96,75790,75217],{"class":47956},[96,75792,75762],{"class":102},[96,75794,691],{"class":211},[96,75796,665],{"class":106},[96,75798,75224],{"class":1946},[96,75800,107],{"class":106},[96,75802,75803],{"class":211},"'哈哈哈哈哈'",[96,75805,75734],{"class":106},[96,75807,75235],{"class":165},[96,75809,75810],{"class":98,"line":8005},[96,75811,2383],{"emptyLinePlaceholder":23},[96,75813,75814],{"class":98,"line":8017},[96,75815,75816],{"class":165},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[96,75818,75819,75821,75823,75825,75827,75829,75831,75834,75836,75838,75840,75842,75844,75846],{"class":98,"line":8029},[96,75820,73732],{"class":106},[96,75822,58226],{"class":1946},[96,75824,107],{"class":106},[96,75826,691],{"class":211},[96,75828,1073],{"class":102},[96,75830,75217],{"class":47956},[96,75832,75833],{"class":102},"{4,6}$",[96,75835,691],{"class":211},[96,75837,665],{"class":106},[96,75839,75224],{"class":1946},[96,75841,107],{"class":106},[96,75843,75731],{"class":211},[96,75845,75734],{"class":106},[96,75847,75235],{"class":165},[96,75849,75850,75852,75854,75856,75858,75860,75862,75864,75866,75868,75870,75872,75874,75876],{"class":98,"line":8041},[96,75851,73732],{"class":106},[96,75853,58226],{"class":1946},[96,75855,107],{"class":106},[96,75857,691],{"class":211},[96,75859,1073],{"class":102},[96,75861,75217],{"class":47956},[96,75863,75833],{"class":102},[96,75865,691],{"class":211},[96,75867,665],{"class":106},[96,75869,75224],{"class":1946},[96,75871,107],{"class":106},[96,75873,75803],{"class":211},[96,75875,75734],{"class":106},[96,75877,75235],{"class":165},[96,75879,75880,75882,75884,75886,75888,75890,75892,75894,75896,75898,75900,75902,75905,75907],{"class":98,"line":9700},[96,75881,73732],{"class":106},[96,75883,58226],{"class":1946},[96,75885,107],{"class":106},[96,75887,691],{"class":211},[96,75889,1073],{"class":102},[96,75891,75217],{"class":47956},[96,75893,75833],{"class":102},[96,75895,691],{"class":211},[96,75897,665],{"class":106},[96,75899,75224],{"class":1946},[96,75901,107],{"class":106},[96,75903,75904],{"class":211},"'哈哈哈哈哈哈哈'",[96,75906,75734],{"class":106},[96,75908,75358],{"class":165},[96,75910,75911],{"class":98,"line":9725},[96,75912,2383],{"emptyLinePlaceholder":23},[96,75914,75915],{"class":98,"line":9748},[96,75916,75917],{"class":165},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[96,75919,75920,75922,75924,75926,75928,75930,75933,75935,75937,75939,75941,75943,75946,75948],{"class":98,"line":9772},[96,75921,73732],{"class":106},[96,75923,58226],{"class":1946},[96,75925,107],{"class":106},[96,75927,691],{"class":211},[96,75929,1073],{"class":102},[96,75931,75932],{"class":155},"[abc]",[96,75934,409],{"class":102},[96,75936,691],{"class":211},[96,75938,665],{"class":106},[96,75940,75224],{"class":1946},[96,75942,107],{"class":106},[96,75944,75945],{"class":211},"'a'",[96,75947,75232],{"class":106},[96,75949,75235],{"class":165},[96,75951,75952,75954,75956,75958,75960,75962,75964,75966,75968,75970,75972,75974,75977,75979],{"class":98,"line":9777},[96,75953,73732],{"class":106},[96,75955,58226],{"class":1946},[96,75957,107],{"class":106},[96,75959,691],{"class":211},[96,75961,1073],{"class":102},[96,75963,75932],{"class":155},[96,75965,409],{"class":102},[96,75967,691],{"class":211},[96,75969,665],{"class":106},[96,75971,75224],{"class":1946},[96,75973,107],{"class":106},[96,75975,75976],{"class":211},"'b'",[96,75978,75232],{"class":106},[96,75980,75235],{"class":165},[96,75982,75983,75985,75987,75989,75991,75993,75995,75997,75999,76001,76003,76005,76008,76010],{"class":98,"line":9782},[96,75984,73732],{"class":106},[96,75986,58226],{"class":1946},[96,75988,107],{"class":106},[96,75990,691],{"class":211},[96,75992,1073],{"class":102},[96,75994,75932],{"class":155},[96,75996,409],{"class":102},[96,75998,691],{"class":211},[96,76000,665],{"class":106},[96,76002,75224],{"class":1946},[96,76004,107],{"class":106},[96,76006,76007],{"class":211},"'c'",[96,76009,75232],{"class":106},[96,76011,75235],{"class":165},[96,76013,76014,76016,76018,76020,76022,76024,76026,76028,76030,76032,76035,76037],{"class":98,"line":9787},[96,76015,73732],{"class":106},[96,76017,58226],{"class":1946},[96,76019,107],{"class":106},[96,76021,691],{"class":211},[96,76023,75932],{"class":155},[96,76025,691],{"class":211},[96,76027,665],{"class":106},[96,76029,75224],{"class":1946},[96,76031,107],{"class":106},[96,76033,76034],{"class":211},"'ab'",[96,76036,75232],{"class":106},[96,76038,75235],{"class":165},[96,76040,76041,76043,76045,76047,76049,76051,76053,76055,76057,76059,76061,76063,76065,76067],{"class":98,"line":9796},[96,76042,73732],{"class":106},[96,76044,58226],{"class":1946},[96,76046,107],{"class":106},[96,76048,691],{"class":211},[96,76050,1073],{"class":102},[96,76052,75932],{"class":155},[96,76054,409],{"class":102},[96,76056,691],{"class":211},[96,76058,665],{"class":106},[96,76060,75224],{"class":1946},[96,76062,107],{"class":106},[96,76064,76034],{"class":211},[96,76066,75232],{"class":106},[96,76068,76069],{"class":165},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[96,76071,76072,76074,76076,76078,76080,76082,76084,76087,76089,76091,76093,76095,76097,76099],{"class":98,"line":9801},[96,76073,73732],{"class":106},[96,76075,58226],{"class":1946},[96,76077,107],{"class":106},[96,76079,691],{"class":211},[96,76081,1073],{"class":102},[96,76083,75932],{"class":155},[96,76085,76086],{"class":102},"{2}$",[96,76088,691],{"class":211},[96,76090,665],{"class":106},[96,76092,75224],{"class":1946},[96,76094,107],{"class":106},[96,76096,76034],{"class":211},[96,76098,75232],{"class":106},[96,76100,76101],{"class":165},"\u002F\u002Ftrue   可以选两个\n",[96,76103,76104,76106,76108,76110,76112,76114,76117,76119,76121,76123,76125,76127,76130,76132],{"class":98,"line":9807},[96,76105,73732],{"class":106},[96,76107,58226],{"class":1946},[96,76109,107],{"class":106},[96,76111,691],{"class":211},[96,76113,1073],{"class":102},[96,76115,76116],{"class":155},"[a-z]",[96,76118,409],{"class":102},[96,76120,691],{"class":211},[96,76122,665],{"class":106},[96,76124,75224],{"class":1946},[96,76126,107],{"class":106},[96,76128,76129],{"class":211},"'p'",[96,76131,75288],{"class":106},[96,76133,76134],{"class":165},"\u002F\u002Ftrue   依然只能选一个\n",[96,76136,76137,76139,76141,76143,76145,76147,76150,76152,76154,76156,76158,76160,76162,76164],{"class":98,"line":9828},[96,76138,73732],{"class":106},[96,76140,58226],{"class":1946},[96,76142,107],{"class":106},[96,76144,691],{"class":211},[96,76146,1073],{"class":102},[96,76148,76149],{"class":155},"[A-Z]",[96,76151,409],{"class":102},[96,76153,691],{"class":211},[96,76155,665],{"class":106},[96,76157,75224],{"class":1946},[96,76159,107],{"class":106},[96,76161,76129],{"class":211},[96,76163,75288],{"class":106},[96,76165,75358],{"class":165},[96,76167,76168,76170,76172,76174,76176,76178,76180,76182,76184,76186,76188,76190,76193,76195],{"class":98,"line":9834},[96,76169,73732],{"class":106},[96,76171,58226],{"class":1946},[96,76173,107],{"class":106},[96,76175,691],{"class":211},[96,76177,1073],{"class":102},[96,76179,76149],{"class":155},[96,76181,409],{"class":102},[96,76183,691],{"class":211},[96,76185,665],{"class":106},[96,76187,75224],{"class":1946},[96,76189,107],{"class":106},[96,76191,76192],{"class":211},"'P'",[96,76194,75288],{"class":106},[96,76196,75235],{"class":165},[96,76198,76199,76201,76203,76205,76207,76209,76212,76214,76216,76218,76220,76222,76225,76227],{"class":98,"line":9848},[96,76200,73732],{"class":106},[96,76202,58226],{"class":1946},[96,76204,107],{"class":106},[96,76206,691],{"class":211},[96,76208,1073],{"class":102},[96,76210,76211],{"class":155},"[0-9]",[96,76213,409],{"class":102},[96,76215,691],{"class":211},[96,76217,665],{"class":106},[96,76219,75224],{"class":1946},[96,76221,107],{"class":106},[96,76223,76224],{"class":211},"'0'",[96,76226,75288],{"class":106},[96,76228,75235],{"class":165},[96,76230,76231,76233,76235,76237,76239,76241,76244,76246,76248,76250,76252,76254,76256,76258],{"class":98,"line":9854},[96,76232,73732],{"class":106},[96,76234,58226],{"class":1946},[96,76236,107],{"class":106},[96,76238,691],{"class":211},[96,76240,1073],{"class":102},[96,76242,76243],{"class":155},"[a-zA-Z0-9]",[96,76245,409],{"class":102},[96,76247,691],{"class":211},[96,76249,665],{"class":106},[96,76251,75224],{"class":1946},[96,76253,107],{"class":106},[96,76255,76129],{"class":211},[96,76257,75232],{"class":106},[96,76259,75235],{"class":165},[96,76261,76262,76264,76266],{"class":98,"line":9881},[96,76263,52396],{"class":106},[96,76265,51792],{"class":51279},[96,76267,51286],{"class":106},[96,76269,76270,76272,76274],{"class":98,"line":9890},[96,76271,51764],{"class":106},[96,76273,51779],{"class":51279},[96,76275,51286],{"class":106},[96,76277,76278],{"class":98,"line":9896},[96,76279,2383],{"emptyLinePlaceholder":23},[96,76281,76282,76284,76286],{"class":98,"line":9904},[96,76283,51764],{"class":106},[96,76285,50614],{"class":51279},[96,76287,51286],{"class":106},[21982,76289,76291],{"id":76290},"_3624-修饰符","3.6.2.4 修饰符",[14,76293,76294],{},[1445,76295],{"alt":18,"src":76296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[14,76298,76299],{},"replace是个方法，使用的时候一定不要忘记括号()",[14,76301,76302],{},[1445,76303],{"alt":18,"src":76304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[87,76306,76308],{"className":50612,"code":76307,"language":50614,"meta":18,"style":18},"\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",[93,76309,76310,76320,76334,76342,76356,76376,76388,76396,76404,76412,76444,76475,76480,76512,76523,76556,76565,76573,76581],{"__ignoreMap":18},[96,76311,76312,76314,76316,76318],{"class":98,"line":99},[96,76313,51276],{"class":106},[96,76315,51280],{"class":51279},[96,76317,51283],{"class":1946},[96,76319,51286],{"class":106},[96,76321,76322,76324,76326,76328,76330,76332],{"class":98,"line":19},[96,76323,1017],{"class":106},[96,76325,50614],{"class":51279},[96,76327,51295],{"class":1946},[96,76329,152],{"class":106},[96,76331,51300],{"class":211},[96,76333,51286],{"class":106},[96,76335,76336,76338,76340],{"class":98,"line":1162},[96,76337,1017],{"class":106},[96,76339,51313],{"class":51279},[96,76341,51286],{"class":106},[96,76343,76344,76346,76348,76350,76352,76354],{"class":98,"line":1177},[96,76345,52123],{"class":106},[96,76347,51323],{"class":51279},[96,76349,51326],{"class":1946},[96,76351,152],{"class":106},[96,76353,51331],{"class":211},[96,76355,51286],{"class":106},[96,76357,76358,76360,76362,76364,76366,76368,76370,76372,76374],{"class":98,"line":1183},[96,76359,52123],{"class":106},[96,76361,51323],{"class":51279},[96,76363,14904],{"class":1946},[96,76365,152],{"class":106},[96,76367,51370],{"class":211},[96,76369,51350],{"class":1946},[96,76371,152],{"class":106},[96,76373,51377],{"class":211},[96,76375,51286],{"class":106},[96,76377,76378,76380,76382,76384,76386],{"class":98,"line":1197},[96,76379,52123],{"class":106},[96,76381,51386],{"class":51279},[96,76383,51389],{"class":106},[96,76385,51386],{"class":51279},[96,76387,51286],{"class":106},[96,76389,76390,76392,76394],{"class":98,"line":1203},[96,76391,51764],{"class":106},[96,76393,51313],{"class":51279},[96,76395,51286],{"class":106},[96,76397,76398,76400,76402],{"class":98,"line":1294},[96,76399,1017],{"class":106},[96,76401,51779],{"class":51279},[96,76403,51286],{"class":106},[96,76405,76406,76408,76410],{"class":98,"line":1300},[96,76407,52123],{"class":106},[96,76409,51792],{"class":51279},[96,76411,51286],{"class":106},[96,76413,76414,76416,76418,76420,76422,76424,76427,76429,76431,76433,76435,76437,76440,76442],{"class":98,"line":1312},[96,76415,73732],{"class":106},[96,76417,58226],{"class":1946},[96,76419,107],{"class":106},[96,76421,691],{"class":211},[96,76423,1073],{"class":102},[96,76425,76426],{"class":47956},"java",[96,76428,409],{"class":102},[96,76430,691],{"class":211},[96,76432,665],{"class":106},[96,76434,75224],{"class":1946},[96,76436,107],{"class":106},[96,76438,76439],{"class":211},"'java'",[96,76441,75734],{"class":106},[96,76443,75235],{"class":165},[96,76445,76446,76448,76450,76452,76454,76456,76458,76460,76462,76464,76466,76468,76471,76473],{"class":98,"line":1595},[96,76447,73732],{"class":106},[96,76449,58226],{"class":1946},[96,76451,107],{"class":106},[96,76453,691],{"class":211},[96,76455,1073],{"class":102},[96,76457,76426],{"class":47956},[96,76459,409],{"class":102},[96,76461,691],{"class":211},[96,76463,665],{"class":106},[96,76465,75224],{"class":1946},[96,76467,107],{"class":106},[96,76469,76470],{"class":211},"'Java'",[96,76472,75734],{"class":106},[96,76474,75358],{"class":165},[96,76476,76477],{"class":98,"line":1600},[96,76478,76479],{"class":165},"    \u002F\u002F 不区分大小写、\n",[96,76481,76482,76484,76486,76488,76490,76492,76494,76496,76498,76500,76502,76504,76506,76508,76510],{"class":98,"line":1606},[96,76483,73732],{"class":106},[96,76485,58226],{"class":1946},[96,76487,107],{"class":106},[96,76489,691],{"class":211},[96,76491,1073],{"class":102},[96,76493,76426],{"class":47956},[96,76495,409],{"class":102},[96,76497,691],{"class":211},[96,76499,548],{"class":102},[96,76501,665],{"class":106},[96,76503,75224],{"class":1946},[96,76505,107],{"class":106},[96,76507,76470],{"class":211},[96,76509,75734],{"class":106},[96,76511,75235],{"class":165},[96,76513,76514,76516,76518,76520],{"class":98,"line":1611},[96,76515,11205],{"class":102},[96,76517,73898],{"class":155},[96,76519,13548],{"class":102},[96,76521,76522],{"class":211}," 'java是一门编程语言，学完java工资很高'\n",[96,76524,76525,76527,76530,76532,76535,76538,76540,76542,76544,76546,76549,76551,76554],{"class":98,"line":1625},[96,76526,11205],{"class":102},[96,76528,76529],{"class":155}," result",[96,76531,13548],{"class":102},[96,76533,76534],{"class":106}," str.",[96,76536,76537],{"class":1946},"replace",[96,76539,107],{"class":106},[96,76541,691],{"class":211},[96,76543,76426],{"class":47956},[96,76545,691],{"class":211},[96,76547,76548],{"class":102},"ig",[96,76550,12419],{"class":106},[96,76552,76553],{"class":211},"'前端'",[96,76555,113],{"class":106},[96,76557,76558,76560,76562],{"class":98,"line":1630},[96,76559,73732],{"class":106},[96,76561,58226],{"class":1946},[96,76563,76564],{"class":106},"(result)\n",[96,76566,76567,76569,76571],{"class":98,"line":1636},[96,76568,52396],{"class":106},[96,76570,51792],{"class":51279},[96,76572,51286],{"class":106},[96,76574,76575,76577,76579],{"class":98,"line":1657},[96,76576,51764],{"class":106},[96,76578,51779],{"class":51279},[96,76580,51286],{"class":106},[96,76582,76583,76585,76587],{"class":98,"line":1662},[96,76584,51764],{"class":106},[96,76586,50614],{"class":51279},[96,76588,51286],{"class":106},[5110,76590,76591],{},"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":18,"searchDepth":19,"depth":19,"links":76593},[76594,76604,76616,76633,76640,76648],{"id":53339,"depth":19,"text":53340,"children":76595},[76596,76597,76598,76599,76600,76601,76602,76603],{"id":53343,"depth":1162,"text":53344},{"id":53376,"depth":1162,"text":53377},{"id":53415,"depth":1162,"text":53416},{"id":53573,"depth":1162,"text":53574},{"id":53621,"depth":1162,"text":53622},{"id":53758,"depth":1162,"text":53759},{"id":54080,"depth":1162,"text":54081},{"id":57068,"depth":1162,"text":57069},{"id":57096,"depth":19,"text":57097,"children":76605},[76606,76607,76608,76609,76610,76611,76612,76613,76614,76615],{"id":57100,"depth":1162,"text":57101},{"id":57123,"depth":1162,"text":57124},{"id":58038,"depth":1162,"text":58039},{"id":58728,"depth":1162,"text":58729},{"id":59010,"depth":1162,"text":59011},{"id":63171,"depth":1162,"text":63172},{"id":63341,"depth":1162,"text":63342},{"id":63469,"depth":1162,"text":63470},{"id":63494,"depth":1162,"text":63495},{"id":64883,"depth":1162,"text":64884},{"id":66036,"depth":19,"text":66037,"children":76617},[76618,76619,76620,76621,76622,76623,76624,76625,76626,76627,76628,76629,76630,76631,76632],{"id":66040,"depth":1162,"text":66041},{"id":66694,"depth":1162,"text":66695},{"id":68389,"depth":1162,"text":68390},{"id":68430,"depth":1162,"text":68431},{"id":68472,"depth":1162,"text":68473},{"id":68486,"depth":1162,"text":68487},{"id":68535,"depth":1162,"text":68536},{"id":68547,"depth":1162,"text":68548},{"id":68562,"depth":1162,"text":68563},{"id":68598,"depth":1162,"text":68599},{"id":68679,"depth":1162,"text":68680},{"id":68807,"depth":1162,"text":68808},{"id":68819,"depth":1162,"text":68820},{"id":68838,"depth":1162,"text":68839},{"id":70949,"depth":1162,"text":70950},{"id":70968,"depth":19,"text":70969,"children":76634},[76635,76636,76637,76638,76639],{"id":70989,"depth":1162,"text":70990},{"id":71009,"depth":1162,"text":71010},{"id":71058,"depth":1162,"text":71059},{"id":71183,"depth":1162,"text":71184},{"id":71364,"depth":1162,"text":71365},{"id":71382,"depth":19,"text":71383,"children":76641},[76642,76643,76644,76645,76646,76647],{"id":71397,"depth":1162,"text":71398},{"id":71456,"depth":1162,"text":71457},{"id":71480,"depth":1162,"text":71481},{"id":71800,"depth":1162,"text":71801},{"id":71832,"depth":1162,"text":71833},{"id":71855,"depth":1162,"text":71856},{"id":74923,"depth":19,"text":74924,"children":76649},[76650,76651],{"id":74957,"depth":1162,"text":74958},{"id":74996,"depth":1162,"text":74997},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53311,"description":23361},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76658,"title":76659,"body":76660,"description":23361,"extension":21,"meta":92797,"navigation":23,"path":92798,"seo":92799,"stem":92800,"__hash__":92801},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76661,"toc":92733},[76662,76665,76668,76672,76676,76681,76686,76697,76701,76706,76709,76713,76716,76721,76725,76729,76732,76737,76740,76744,76747,76755,76758,76762,76767,76772,76775,76779,76784,76789,76792,76796,76801,76804,76809,76812,76817,76820,76825,76830,76833,76836,76840,76845,76850,76853,76857,76861,76864,76867,76870,76874,76878,76883,76888,76891,76895,76900,76905,76908,76911,76914,76917,76920,76923,76926,76929,76932,76937,76941,76946,76951,76954,76957,76960,76963,76966,76969,76972,76975,76979,76983,76986,76989,76992,76997,76999,77002,77005,77008,77011,77014,77017,77020,77023,77026,77029,77032,77035,77038,77043,77048,77053,77056,77060,77063,77068,77072,77074,77085,77090,77191,77194,77197,77200,77203,77206,77209,77212,77215,77217,77220,77223,77226,77229,77232,77234,77237,77240,77243,77246,77249,77252,77254,77257,77259,77261,77264,77268,77272,77275,77278,77281,77284,77287,77290,77293,77296,77299,77304,77424,77427,77430,77435,77438,77441,77444,77447,77452,77455,77458,77461,77464,77469,77472,77572,77637,77711,77715,77718,77721,77725,77728,77742,77771,77774,77777,77780,77783,77786,77789,77792,77794,77797,77800,77803,77806,77810,77815,77819,77824,77899,77902,78085,78088,78091,78094,78097,78100,78102,78105,78108,78111,78114,78117,78120,78122,78126,78129,78134,78137,78140,78143,78146,78148,78153,78156,78159,78162,78165,78167,78172,78175,78178,78180,78182,78185,78189,78192,78195,78200,78203,78206,78209,78259,78264,78268,78273,78276,78345,78348,78357,78361,78366,78369,78372,78380,78383,78400,80202,80206,80210,80215,80218,80222,80228,80234,80386,80391,80396,80399,80402,80405,80408,80411,80414,80417,80420,80423,80426,80429,80432,80437,80441,80444,80455,80459,80464,80467,80470,80473,80476,80479,80481,80484,80487,80490,80493,80495,80512,80515,80519,80522,80527,80532,80535,80538,80542,80545,80548,80557,80560,80564,80567,80572,80577,80644,80648,80651,80654,80659,80664,80750,80755,80759,80762,80765,80780,80783,80788,80792,80797,80906,80909,80920,81070,81074,81079,81188,81192,81197,81202,81207,81210,81217,81237,81273,81437,81442,81445,81450,81457,81460,81463,81466,81525,81581,81637,81641,81646,81961,81964,81968,81971,81976,82085,82090,82094,82099,82103,82174,82178,82180,82183,82186,82224,82500,82504,82521,82587,82621,82625,82628,82633,82662,82669,82678,82683,82698,82703,82712,82715,82852,82856,82918,82922,82927,83172,83176,83181,83184,83187,83190,83193,83197,83202,84783,84787,84791,84797,84800,84805,84809,84812,84817,84820,84831,84835,84840,84844,84849,84854,84857,84862,84866,84870,84873,84878,84883,84886,84889,84892,85014,85019,85121,85124,85127,85131,85136,85308,85313,85317,85320,85325,85391,85396,85399,85530,85533,85538,85541,85544,85635,85640,85643,85646,85649,85652,85657,85662,85665,85670,85675,85680,85684,85687,85690,85695,85700,85705,85710,85764,85767,85770,85775,85778,85781,85786,85791,85796,85800,85805,85819,85824,85827,85832,85836,85841,85846,85851,85856,85861,85866,85871,85876,85879,85883,85888,85891,85894,85897,85902,85907,85910,85913,85917,85920,85923,85928,85933,85938,85943,85946,85951,85956,86017,86022,86025,86030,87271,87276,87280,87284,87289,87292,87297,87302,87305,87310,87312,87317,87321,87324,87327,87338,87342,87347,87352,87407,87412,87417,87422,87633,87638,87642,87647,87650,87652,87655,87658,88105,88110,88117,88123,88126,88129,88393,88398,88402,88667,88672,88676,88681,88686,88691,88696,89027,89030,89035,89040,89043,89047,89051,89056,89061,89066,89071,89076,89081,89085,89088,89093,89098,89101,89175,89180,89185,89190,89192,89195,89565,89570,89575,89580,89583,89586,89688,89693,89698,89801,89805,89810,89814,89818,89823,89828,89831,89836,89839,89842,90235,90240,90243,90246,90249,90252,90772,90776,90781,90786,90791,90794,90799,90802,90805,91187,91192,91194,91196,91199,91202,91714,91718,91779,91782,91785,91788,91792,91795,91800,91805,92730],[10,76663,76659],{"id":76664},"_4js进阶",[14,76666,76667],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[38,76669,76671],{"id":76670},"_41-作用域","4.1 作用域",[67,76673,76675],{"id":76674},"_411-局部作用域","4.1.1 局部作用域",[14,76677,76678],{},[1445,76679],{"alt":18,"src":76680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[14,76682,76683],{},[1445,76684],{"alt":18,"src":76685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1114,76687,76688,76691,76694],{},[53,76689,76690],{},"函数作用域在函数内部",[53,76692,76693],{},"块级作用域在{}",[53,76695,76696],{},"对象的那个{}不是作用域，不是块作用域",[67,76698,76700],{"id":76699},"_412-全局作用域","4.1.2 全局作用域",[14,76702,76703],{},[1445,76704],{"alt":18,"src":76705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[14,76707,76708],{},"window.a=10不要这样写",[67,76710,76712],{"id":76711},"_413-作用域链","4.1.3 作用域链",[14,76714,76715],{},"变量查找机制",[14,76717,76718],{},[1445,76719],{"alt":18,"src":76720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[38,76722,76724],{"id":76723},"_42-垃圾回收机制","4.2 垃圾回收机制",[67,76726,76728],{"id":76727},"_421-大体介绍","4.2.1 大体介绍",[14,76730,76731],{},"垃圾回收机制(Garbage Collection) 简称 GC",[14,76733,76734],{},[1445,76735],{"alt":18,"src":76736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[14,76738,76739],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[67,76741,76743],{"id":76742},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[14,76745,76746],{},"堆栈空间分配区别：",[50,76748,76749,76752],{},[53,76750,76751],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[53,76753,76754],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[14,76756,76757],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[21982,76759,76761],{"id":76760},"_4221-引用计数","4.2.2.1 引用计数",[14,76763,76764],{},[1445,76765],{"alt":18,"src":76766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[14,76768,76769],{},[1445,76770],{"alt":18,"src":76771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[14,76773,76774],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[21982,76776,76778],{"id":76777},"_4222-标记清除法","4.2.2.2 标记清除法",[14,76780,76781],{},[1445,76782],{"alt":18,"src":76783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[14,76785,76786],{},[1445,76787],{"alt":18,"src":76788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[14,76790,76791],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[38,76793,76795],{"id":76794},"_43-闭包","4.3 闭包",[14,76797,76798],{},[1445,76799],{"alt":18,"src":76800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[14,76802,76803],{},"闭包：内层函数+外层函数的变量",[14,76805,76806],{},[1445,76807],{"alt":18,"src":76808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[14,76810,76811],{},"closure就是闭包",[14,76813,76814],{},[1445,76815],{"alt":18,"src":76816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[14,76818,76819],{},"内层函数必须包含外层函数的变量才是闭包",[14,76821,76822],{},[1445,76823],{"alt":18,"src":76824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[14,76826,76827],{},[1445,76828],{"alt":18,"src":76829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[14,76831,76832],{},"闭包可能会引起内存泄漏",[14,76834,76835],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[38,76837,76839],{"id":76838},"_44-变量提升","4.4 变量提升",[14,76841,76842],{},[1445,76843],{"alt":18,"src":76844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[14,76846,76847],{},[1445,76848],{"alt":18,"src":76849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[14,76851,76852],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[38,76854,76856],{"id":76855},"_45-函数进阶","4.5 函数进阶",[67,76858,76860],{"id":76859},"_451-函数提升","4.5.1 函数提升",[14,76862,76863],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[14,76865,76866],{},"只提升函数声明，不提升函数调用",[51792,76868,76869],{},"\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",[67,76871,76873],{"id":76872},"_452-函数参数","4.5.2 函数参数",[21982,76875,76877],{"id":76876},"_4521-动态参数","4.5.2.1 动态参数",[14,76879,76880],{},[1445,76881],{"alt":18,"src":76882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[14,76884,76885],{},[1445,76886],{"alt":18,"src":76887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[14,76889,76890],{},"箭头函数里边没有arguments",[21982,76892,76894],{"id":76893},"_4522-剩余参数","4.5.2.2 剩余参数",[14,76896,76897],{},[1445,76898],{"alt":18,"src":76899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[14,76901,76902],{},[1445,76903],{"alt":18,"src":76904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[14,76906,76907],{},"剩余参数使用的时候不需要写...",[14,76909,76910],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[14,76912,76913],{},"  function getSum(a,b,...arr) {",[14,76915,76916],{},"  console.log(11)",[14,76918,76919],{},"  }",[14,76921,76922],{},"  getSum(1,2,3,4)",[14,76924,76925],{},"  将1传给a，2传给b，剩下的传给剩余参数",[14,76927,76928],{},"  getSum(1,2)",[14,76930,76931],{},"  将1传给a，2传给b，剩余参数为一个空数组",[14,76933,76934],{},[1445,76935],{"alt":18,"src":76936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[21982,76938,76940],{"id":76939},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[14,76942,76943],{},[1445,76944],{"alt":18,"src":76945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[14,76947,76948],{},[1445,76949],{"alt":18,"src":76950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[14,76952,76953],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[14,76955,76956],{},"展开运算符可以用于数组之间的合并：",[14,76958,76959],{},"const arr1 = [1, 2, 3]",[14,76961,76962],{},"const arr2 = [3, 4, 5]",[14,76964,76965],{},"const arr = [...arr1, ...arr2]",[14,76967,76968],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[14,76970,76971],{},"剩余参数：函数参数使用，得到真数组",[14,76973,76974],{},"展开运算符：数组中使用，数组展开",[67,76976,76978],{"id":76977},"_453-箭头函数","4.5.3 箭头函数",[21982,76980,76982],{"id":76981},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[14,76984,76985],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[14,76987,76988],{},"它不是万能的！！！",[14,76990,76991],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[14,76993,76994],{},[1445,76995],{"alt":18,"src":76996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[14,76998,136],{},[14,77000,77001],{},"① 只有一个形参的时候，可以省略小括号：",[14,77003,77004],{},"const fn=x=>{console.log(x)}",[14,77006,77007],{},"② 只有一行代码时可以省略大括号：",[14,77009,77010],{},"const fn=x=>console.log(11)",[14,77012,77013],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[14,77015,77016],{},"const fn=x=>x+x",[14,77018,77019],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[14,77021,77022],{},"⑤ 阻止表单默认提交：",[14,77024,77025],{},"const form = document.querySelector('form')",[14,77027,77028],{},"form.addEventListener('click', ev => ev.preventDefault())",[14,77030,77031],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[14,77033,77034],{},"const fn=uname=>({uname:uname})",[14,77036,77037],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[14,77039,77040],{},[1445,77041],{"alt":18,"src":77042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[14,77044,77045],{},[1445,77046],{"alt":18,"src":77047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[14,77049,77050],{},[1445,77051],{"alt":18,"src":77052},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[14,77054,77055],{},"一定不要忘记用()，有()就理解为自带return",[21982,77057,77059],{"id":77058},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[14,77061,77062],{},"箭头函数是没有动态参数的arguments",[14,77064,77065],{},[1445,77066],{"alt":18,"src":77067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[21982,77069,77071],{"id":77070},"_4533-箭头函数this","4.5.3.3 箭头函数this",[14,77073,11316],{},[50,77075,77076,77079,77082],{},[53,77077,77078],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[53,77080,77081],{},"事件回调函数使用箭头函数时，this 为全局的 window",[53,77083,77084],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[14,77086,77087],{},[1445,77088],{"alt":18,"src":77089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[87,77091,77093],{"className":53046,"code":77092,"language":53048,"meta":18,"style":18},"  \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",[93,77094,77095,77103,77108,77113,77118,77123,77128,77132,77137,77141,77145,77150,77155,77160,77164,77168,77173,77178,77183],{"__ignoreMap":18},[96,77096,77097,77099,77101],{"class":98,"line":99},[96,77098,52123],{"class":106},[96,77100,51792],{"class":51279},[96,77102,51286],{"class":106},[96,77104,77105],{"class":98,"line":19},[96,77106,77107],{"class":106},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[96,77109,77110],{"class":98,"line":1162},[96,77111,77112],{"class":106},"    console.log(this) \u002F\u002F指向window\n",[96,77114,77115],{"class":98,"line":1177},[96,77116,77117],{"class":106},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[96,77119,77120],{"class":98,"line":1183},[96,77121,77122],{"class":106},"    function fn() {\n",[96,77124,77125],{"class":98,"line":1197},[96,77126,77127],{"class":106},"      console.log(this)  \u002F\u002F指向window\n",[96,77129,77130],{"class":98,"line":1203},[96,77131,2170],{"class":106},[96,77133,77134],{"class":98,"line":1294},[96,77135,77136],{"class":106},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[96,77138,77139],{"class":98,"line":1300},[96,77140,2383],{"emptyLinePlaceholder":23},[96,77142,77143],{"class":98,"line":1312},[96,77144,71502],{"class":106},[96,77146,77147],{"class":98,"line":1595},[96,77148,77149],{"class":106},"      name: 'andy',\n",[96,77151,77152],{"class":98,"line":1600},[96,77153,77154],{"class":106},"      sayHai: function () {\n",[96,77156,77157],{"class":98,"line":1606},[96,77158,77159],{"class":106},"        console.log(this)\n",[96,77161,77162],{"class":98,"line":1611},[96,77163,52377],{"class":106},[96,77165,77166],{"class":98,"line":1625},[96,77167,2170],{"class":106},[96,77169,77170],{"class":98,"line":1630},[96,77171,77172],{"class":106},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[96,77174,77175],{"class":98,"line":1636},[96,77176,77177],{"class":106},"    \u002F\u002F 2.箭头函数的this\n",[96,77179,77180],{"class":98,"line":1657},[96,77181,77182],{"class":106},"    const fn = () => console.log(this)\n",[96,77184,77185,77187,77189],{"class":98,"line":1662},[96,77186,52396],{"class":106},[96,77188,51792],{"class":51279},[96,77190,51286],{"class":106},[14,77192,77193],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[14,77195,77196],{},"const fn = () => console.log(this)",[14,77198,77199],{},"fn() \u002F\u002F指向window",[14,77201,77202],{},"\u002F\u002F 3.对象方法箭头函数 this",[14,77204,77205],{},"①",[14,77207,77208],{},"const obj = {",[14,77210,77211],{},"uname: 'pink老师',",[14,77213,77214],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[14,77216,1053],{},[14,77218,77219],{},"调用对象里边的函数",[14,77221,77222],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[14,77224,77225],{},"obj.sayHai()",[14,77227,77228],{},"②",[14,77230,77231],{},"const obj1 = {",[14,77233,77211],{},[14,77235,77236],{},"sayHai: function () {",[14,77238,77239],{},"let i = 10",[14,77241,77242],{},"const count = () => {",[14,77244,77245],{},"console.log(this)",[14,77247,77248],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[14,77250,77251],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[14,77253,1053],{},[14,77255,77256],{},"count()",[14,77258,1053],{},[14,77260,1053],{},[14,77262,77263],{},"obj1.sayHai()",[38,77265,77267],{"id":77266},"_46-解构赋值","4.6 解构赋值",[67,77269,77271],{"id":77270},"_461-数组解构","4.6.1 数组解构",[14,77273,77274],{},"以前要是使用数组中的值的话：",[14,77276,77277],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[14,77279,77280],{},"const arr=[100,60,80]",[14,77282,77283],{},"const max=arr[0]",[14,77285,77286],{},"const min=arr[1]",[14,77288,77289],{},"const avg=arr[2]",[14,77291,77292],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[14,77294,77295],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[14,77297,77298],{},"这个写法就类似于上边的那种用很多const的方法",[14,77300,77301],{},[1445,77302],{"alt":18,"src":77303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[87,77305,77307],{"className":50612,"code":77306,"language":50614,"meta":18,"style":18},"①变量之间交换值:\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",[93,77308,77309,77314,77319,77324,77329,77334,77338,77342,77347,77351,77356,77361,77365,77370,77375,77386,77396,77401,77406,77411,77415,77419],{"__ignoreMap":18},[96,77310,77311],{"class":98,"line":99},[96,77312,77313],{"class":106},"①变量之间交换值:\n",[96,77315,77316],{"class":98,"line":19},[96,77317,77318],{"class":106},"let a=1\n",[96,77320,77321],{"class":98,"line":1162},[96,77322,77323],{"class":106},"let b=2;\n",[96,77325,77326],{"class":98,"line":1177},[96,77327,77328],{"class":106},"必须加这行代码，不然就会报错\n",[96,77330,77331],{"class":98,"line":1183},[96,77332,77333],{"class":106},"[b,a]=[a,b]\n",[96,77335,77336],{"class":98,"line":1197},[96,77337,2383],{"emptyLinePlaceholder":23},[96,77339,77340],{"class":98,"line":1203},[96,77341,2383],{"emptyLinePlaceholder":23},[96,77343,77344],{"class":98,"line":1294},[96,77345,77346],{"class":106},"可以写成下面的方式：\n",[96,77348,77349],{"class":98,"line":1300},[96,77350,77318],{"class":106},[96,77352,77353],{"class":98,"line":1312},[96,77354,77355],{"class":106},"let b=2\n",[96,77357,77358],{"class":98,"line":1595},[96,77359,77360],{"class":106},";[b,a]=[a,b]\n",[96,77362,77363],{"class":98,"line":1600},[96,77364,2383],{"emptyLinePlaceholder":23},[96,77366,77367],{"class":98,"line":1606},[96,77368,77369],{"class":106},"②排序\n",[96,77371,77372],{"class":98,"line":1611},[96,77373,77374],{"class":106},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[96,77376,77377,77380,77383],{"class":98,"line":1625},[96,77378,77379],{"class":106},"for (let i = 0; i ",[96,77381,1017],{"class":77382},"s7hpK",[96,77384,77385],{"class":106}," arr1.length; i++) {\n",[96,77387,77388,77391,77393],{"class":98,"line":1630},[96,77389,77390],{"class":106},"   for (let j = 0; j ",[96,77392,1017],{"class":77382},[96,77394,77395],{"class":106}," arr1.length - 1; j++) {\n",[96,77397,77398],{"class":98,"line":1636},[96,77399,77400],{"class":106},"      if (arr1[j] > arr1[j + 1]) {\n",[96,77402,77403],{"class":98,"line":1657},[96,77404,77405],{"class":106},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[96,77407,77408],{"class":98,"line":1662},[96,77409,77410],{"class":106},"       }\n",[96,77412,77413],{"class":98,"line":1676},[96,77414,4292],{"class":106},[96,77416,77417],{"class":98,"line":1681},[96,77418,1548],{"class":106},[96,77420,77421],{"class":98,"line":1710},[96,77422,77423],{"class":106},"console.log(arr1)\n",[14,77425,77426],{},"数组解构的细节：",[14,77428,77429],{},"①变量多，单元值少",[14,77431,77432],{},[1445,77433],{"alt":18,"src":77434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[14,77436,77437],{},"防止出现undefined的方法：",[14,77439,77440],{},"const [a=0,b=0] =[1]",[14,77442,77443],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[14,77445,77446],{},"②变量少，单元值多",[14,77448,77449],{},[1445,77450],{"alt":18,"src":77451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[14,77453,77454],{},"此时可以使用剩余参数来接收多余的值",[14,77456,77457],{},"const [a,b,...c]=[1,2,3,4]",[14,77459,77460],{},"console.log(c) 输出[3,4]",[14,77462,77463],{},"③可以按需导入，忽略某些返回值",[14,77465,77466],{},[1445,77467],{"alt":18,"src":77468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[14,77470,77471],{},"④支持多维数组的结构",[87,77473,77477],{"className":77474,"code":77475,"language":77476,"meta":18,"style":18},"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",[93,77478,77479,77507,77523,77538,77553],{"__ignoreMap":18},[96,77480,77481,77483,77485,77487,77489,77491,77493,77495,77498,77500,77502,77504],{"class":98,"line":99},[96,77482,6776],{"class":102},[96,77484,51812],{"class":106},[96,77486,152],{"class":102},[96,77488,52205],{"class":106},[96,77490,324],{"class":155},[96,77492,12419],{"class":106},[96,77494,184],{"class":155},[96,77496,77497],{"class":106},", [",[96,77499,178],{"class":155},[96,77501,12419],{"class":106},[96,77503,400],{"class":155},[96,77505,77506],{"class":106},"]]\n",[96,77508,77509,77512,77514,77516,77518,77520],{"class":98,"line":19},[96,77510,77511],{"class":106},"console.",[96,77513,58226],{"class":1946},[96,77515,3834],{"class":106},[96,77517,298],{"class":155},[96,77519,4199],{"class":106},[96,77521,77522],{"class":165},"  \u002F\u002F1\n",[96,77524,77525,77527,77529,77531,77533,77535],{"class":98,"line":1162},[96,77526,77511],{"class":106},[96,77528,58226],{"class":1946},[96,77530,3834],{"class":106},[96,77532,324],{"class":155},[96,77534,4199],{"class":106},[96,77536,77537],{"class":165},"  \u002F\u002F2\n",[96,77539,77540,77542,77544,77546,77548,77550],{"class":98,"line":1177},[96,77541,77511],{"class":106},[96,77543,58226],{"class":1946},[96,77545,3834],{"class":106},[96,77547,184],{"class":155},[96,77549,4199],{"class":106},[96,77551,77552],{"class":165},"  \u002F\u002F[3,4]\n",[96,77554,77555,77557,77559,77561,77563,77565,77567,77569],{"class":98,"line":1183},[96,77556,77511],{"class":106},[96,77558,58226],{"class":1946},[96,77560,3834],{"class":106},[96,77562,184],{"class":155},[96,77564,4884],{"class":106},[96,77566,298],{"class":155},[96,77568,4199],{"class":106},[96,77570,77571],{"class":165},"  \u002F\u002F3\n",[87,77573,77575],{"className":77474,"code":77574,"language":77476,"meta":18,"style":18},"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",[93,77576,77577,77604,77615,77626],{"__ignoreMap":18},[96,77578,77579,77581,77584,77586,77588,77590,77592,77594,77596,77598,77600,77602],{"class":98,"line":99},[96,77580,6776],{"class":102},[96,77582,77583],{"class":106}," [a, b, c] ",[96,77585,152],{"class":102},[96,77587,52205],{"class":106},[96,77589,324],{"class":155},[96,77591,12419],{"class":106},[96,77593,184],{"class":155},[96,77595,77497],{"class":106},[96,77597,178],{"class":155},[96,77599,12419],{"class":106},[96,77601,400],{"class":155},[96,77603,77506],{"class":106},[96,77605,77606,77608,77610,77613],{"class":98,"line":19},[96,77607,77511],{"class":106},[96,77609,58226],{"class":1946},[96,77611,77612],{"class":106},"(a)",[96,77614,77522],{"class":165},[96,77616,77617,77619,77621,77624],{"class":98,"line":1162},[96,77618,77511],{"class":106},[96,77620,58226],{"class":1946},[96,77622,77623],{"class":106},"(b)",[96,77625,77537],{"class":165},[96,77627,77628,77630,77632,77635],{"class":98,"line":1177},[96,77629,77511],{"class":106},[96,77631,58226],{"class":1946},[96,77633,77634],{"class":106},"(c)",[96,77636,77552],{"class":165},[87,77638,77640],{"className":77474,"code":77639,"language":77476,"meta":18,"style":18},"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",[93,77641,77642,77669,77679,77689,77699],{"__ignoreMap":18},[96,77643,77644,77646,77649,77651,77653,77655,77657,77659,77661,77663,77665,77667],{"class":98,"line":99},[96,77645,6776],{"class":102},[96,77647,77648],{"class":106}," [a, b, [c, d]] ",[96,77650,152],{"class":102},[96,77652,52205],{"class":106},[96,77654,324],{"class":155},[96,77656,12419],{"class":106},[96,77658,184],{"class":155},[96,77660,77497],{"class":106},[96,77662,178],{"class":155},[96,77664,12419],{"class":106},[96,77666,400],{"class":155},[96,77668,77506],{"class":106},[96,77670,77671,77673,77675,77677],{"class":98,"line":19},[96,77672,77511],{"class":106},[96,77674,58226],{"class":1946},[96,77676,77612],{"class":106},[96,77678,77522],{"class":165},[96,77680,77681,77683,77685,77687],{"class":98,"line":1162},[96,77682,77511],{"class":106},[96,77684,58226],{"class":1946},[96,77686,77623],{"class":106},[96,77688,77537],{"class":165},[96,77690,77691,77693,77695,77697],{"class":98,"line":1177},[96,77692,77511],{"class":106},[96,77694,58226],{"class":1946},[96,77696,77634],{"class":106},[96,77698,77571],{"class":165},[96,77700,77701,77703,77705,77708],{"class":98,"line":1183},[96,77702,77511],{"class":106},[96,77704,58226],{"class":1946},[96,77706,77707],{"class":106},"(d)",[96,77709,77710],{"class":165},"  \u002F\u002F4\n",[67,77712,77714],{"id":77713},"_462-对象解构","4.6.2 对象解构",[14,77716,77717],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[14,77719,77720],{},"用的非常非常多！！！！！！",[21982,77722,77724],{"id":77723},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[14,77726,77727],{},"基本语法：",[50,77729,77730,77733,77736,77739],{},[53,77731,77732],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[53,77734,77735],{},"对象属性的值将被赋值给与属性名相同的变量",[53,77737,77738],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[53,77740,77741],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[87,77743,77745],{"className":50612,"code":77744,"language":50614,"meta":18,"style":18},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[93,77746,77747,77752,77757,77762,77766],{"__ignoreMap":18},[96,77748,77749],{"class":98,"line":99},[96,77750,77751],{"class":106},"const obj = {\n",[96,77753,77754],{"class":98,"line":19},[96,77755,77756],{"class":106},"   uname: 'pink老师',\n",[96,77758,77759],{"class":98,"line":1162},[96,77760,77761],{"class":106},"   age: 18,\n",[96,77763,77764],{"class":98,"line":1177},[96,77765,1548],{"class":106},[96,77767,77768],{"class":98,"line":1183},[96,77769,77770],{"class":106},"const { uname, age } = obj\n",[14,77772,77773],{},"上方代码这样写等价于：",[14,77775,77776],{},"const uname等价于obj.uname",[14,77778,77779],{},"变量名可以重新改名：",[14,77781,77782],{},"const uname='red老师'",[14,77784,77785],{},"const user={",[14,77787,77788],{},"  uname:'pink老师',",[14,77790,77791],{},"  age:18",[14,77793,1053],{},[14,77795,77796],{},"const {uname,age}=user",[14,77798,77799],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[14,77801,77802],{},"const {旧变量名：新变量名}=对象",[14,77804,77805],{},"const {uname:username,age}=user",[21982,77807,77809],{"id":77808},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[14,77811,77812],{},[1445,77813],{"alt":18,"src":77814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[21982,77816,77818],{"id":77817},"_4623-多级对象解构","4.6.2.3 多级对象解构",[14,77820,77821],{},[1445,77822],{"alt":18,"src":77823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[87,77825,77827],{"className":53046,"code":77826,"language":53048,"meta":18,"style":18},"  \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",[93,77828,77829,77837,77842,77847,77852,77857,77862,77867,77872,77877,77881,77886,77891],{"__ignoreMap":18},[96,77830,77831,77833,77835],{"class":98,"line":99},[96,77832,52123],{"class":106},[96,77834,51792],{"class":51279},[96,77836,51286],{"class":106},[96,77838,77839],{"class":98,"line":19},[96,77840,77841],{"class":106},"    const pig = {\n",[96,77843,77844],{"class":98,"line":1162},[96,77845,77846],{"class":106},"      name: '佩奇',\n",[96,77848,77849],{"class":98,"line":1177},[96,77850,77851],{"class":106},"      family: {\n",[96,77853,77854],{"class":98,"line":1183},[96,77855,77856],{"class":106},"        mother: '猪妈妈',\n",[96,77858,77859],{"class":98,"line":1197},[96,77860,77861],{"class":106},"        father: '猪爸爸',\n",[96,77863,77864],{"class":98,"line":1203},[96,77865,77866],{"class":106},"        sister: '乔治'\n",[96,77868,77869],{"class":98,"line":1294},[96,77870,77871],{"class":106},"      },\n",[96,77873,77874],{"class":98,"line":1300},[96,77875,77876],{"class":106},"      age: 6\n",[96,77878,77879],{"class":98,"line":1312},[96,77880,2170],{"class":106},[96,77882,77883],{"class":98,"line":1595},[96,77884,77885],{"class":106},"    \u002F\u002F 多级对象解构\n",[96,77887,77888],{"class":98,"line":1600},[96,77889,77890],{"class":106},"    const { name, family: { mother, father, sister }, age } = pig\n",[96,77892,77893,77895,77897],{"class":98,"line":1606},[96,77894,52396],{"class":106},[96,77896,51792],{"class":51279},[96,77898,51286],{"class":106},[14,77900,77901],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[87,77903,77906],{"className":77904,"code":77905,"language":76426,"meta":18,"style":18},"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",[93,77907,77908,77913,77924,77936,77948,77957,77961,77972,77984,77994,77999,78003,78013,78024,78033,78037,78041,78052,78063,78072,78076,78081],{"__ignoreMap":18},[96,77909,77910],{"class":98,"line":99},[96,77911,77912],{"class":165},"    \u002F\u002F 这是后台传递过来的数据\n",[96,77914,77915,77917,77920,77922],{"class":98,"line":19},[96,77916,11205],{"class":102},[96,77918,77919],{"class":106}," msg ",[96,77921,152],{"class":102},[96,77923,15556],{"class":106},[96,77925,77926,77929,77931,77934],{"class":98,"line":1162},[96,77927,77928],{"class":211},"      \"code\"",[96,77930,966],{"class":102},[96,77932,77933],{"class":155}," 200",[96,77935,31445],{"class":106},[96,77937,77938,77941,77943,77946],{"class":98,"line":1177},[96,77939,77940],{"class":211},"      \"msg\"",[96,77942,966],{"class":102},[96,77944,77945],{"class":211}," \"获取新闻列表成功\"",[96,77947,31445],{"class":106},[96,77949,77950,77953,77955],{"class":98,"line":1183},[96,77951,77952],{"class":211},"      \"data\"",[96,77954,966],{"class":102},[96,77956,55426],{"class":106},[96,77958,77959],{"class":98,"line":1197},[96,77960,2493],{"class":106},[96,77962,77963,77966,77968,77970],{"class":98,"line":1203},[96,77964,77965],{"class":211},"          \"id\"",[96,77967,966],{"class":102},[96,77969,25097],{"class":155},[96,77971,31445],{"class":106},[96,77973,77974,77977,77979,77982],{"class":98,"line":1294},[96,77975,77976],{"class":211},"          \"title\"",[96,77978,966],{"class":102},[96,77980,77981],{"class":211}," \"5G商用自己，三大运用商收入下降\"",[96,77983,31445],{"class":106},[96,77985,77986,77989,77991],{"class":98,"line":1300},[96,77987,77988],{"class":211},"          \"count\"",[96,77990,966],{"class":102},[96,77992,77993],{"class":155}," 58\n",[96,77995,77996],{"class":98,"line":1312},[96,77997,77998],{"class":106},"        },\n",[96,78000,78001],{"class":98,"line":1595},[96,78002,2493],{"class":106},[96,78004,78005,78007,78009,78011],{"class":98,"line":1600},[96,78006,77965],{"class":211},[96,78008,966],{"class":102},[96,78010,14739],{"class":155},[96,78012,31445],{"class":106},[96,78014,78015,78017,78019,78022],{"class":98,"line":1606},[96,78016,77976],{"class":211},[96,78018,966],{"class":102},[96,78020,78021],{"class":211}," \"国际媒体头条速览\"",[96,78023,31445],{"class":106},[96,78025,78026,78028,78030],{"class":98,"line":1611},[96,78027,77988],{"class":211},[96,78029,966],{"class":102},[96,78031,78032],{"class":155}," 56\n",[96,78034,78035],{"class":98,"line":1625},[96,78036,77998],{"class":106},[96,78038,78039],{"class":98,"line":1630},[96,78040,2493],{"class":106},[96,78042,78043,78045,78047,78050],{"class":98,"line":1636},[96,78044,77965],{"class":211},[96,78046,966],{"class":102},[96,78048,78049],{"class":155}," 3",[96,78051,31445],{"class":106},[96,78053,78054,78056,78058,78061],{"class":98,"line":1657},[96,78055,77976],{"class":211},[96,78057,966],{"class":102},[96,78059,78060],{"class":211}," \"乌克兰和俄罗斯持续冲突\"",[96,78062,31445],{"class":106},[96,78064,78065,78067,78069],{"class":98,"line":1662},[96,78066,77988],{"class":211},[96,78068,966],{"class":102},[96,78070,78071],{"class":155}," 1669\n",[96,78073,78074],{"class":98,"line":1676},[96,78075,77998],{"class":106},[96,78077,78078],{"class":98,"line":1681},[96,78079,78080],{"class":106},"      ]\n",[96,78082,78083],{"class":98,"line":1710},[96,78084,2170],{"class":106},[14,78086,78087],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[14,78089,78090],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[14,78092,78093],{},"\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,78095,78096],{},"function({data}) {",[14,78098,78099],{},"console.log(data)",[14,78101,1053],{},[14,78103,78104],{},"render(msg)",[14,78106,78107],{},"实参传递给形参的时候解构了",[14,78109,78110],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[14,78112,78113],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[14,78115,78116],{},"function render({data:mydata}) {",[14,78118,78119],{},"  console.log(data)",[14,78121,1053],{},[67,78123,78125],{"id":78124},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[14,78127,78128],{},"有两种情况：一个是数组结构，一个是立即执行函数",[50,78130,78131],{},[53,78132,78133],{},"如果对一个数组进行遍历，有两种方式：",[14,78135,78136],{},"①法1",[14,78138,78139],{},"const arr=[1,2,3]",[14,78141,78142],{},"arr.map(function(item,index) {",[14,78144,78145],{},"  console.log(item)",[14,78147,52443],{},[14,78149,78150],{},[1445,78151],{"alt":18,"src":78152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[14,78154,78155],{},"②法2",[14,78157,78158],{},"const str='pink'",[14,78160,78161],{},"[1,2,3].map(function(item,index) {",[14,78163,78164],{},"console.log(item)",[14,78166,52443],{},[14,78168,78169],{},[1445,78170],{"alt":18,"src":78171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[14,78173,78174],{},"此时会报错",[14,78176,78177],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[14,78179,78164],{},[14,78181,52443],{},[14,78183,78184],{},"内部会当成这样处理，所以我们用分号进行隔开",[38,78186,78188],{"id":78187},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[14,78190,78191],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[14,78193,78194],{},"可以理解为加强版的for循环",[14,78196,78197],{},[1445,78198],{"alt":18,"src":78199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[14,78201,78202],{},"里边不写return，不返回数组，只遍历不返回",[14,78204,78205],{},"map是返回数组",[14,78207,78208],{},"forEach主要用于遍历数组对象",[87,78210,78212],{"className":53046,"code":78211,"language":53048,"meta":18,"style":18},"  \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",[93,78213,78214,78222,78227,78232,78237,78242,78246,78251],{"__ignoreMap":18},[96,78215,78216,78218,78220],{"class":98,"line":99},[96,78217,52123],{"class":106},[96,78219,51792],{"class":51279},[96,78221,51286],{"class":106},[96,78223,78224],{"class":98,"line":19},[96,78225,78226],{"class":106},"    const arr = ['red', 'green', 'pink']\n",[96,78228,78229],{"class":98,"line":1162},[96,78230,78231],{"class":106},"    const result = arr.forEach(function (item, index) {\n",[96,78233,78234],{"class":98,"line":1177},[96,78235,78236],{"class":106},"      console.log(item)\n",[96,78238,78239],{"class":98,"line":1183},[96,78240,78241],{"class":106},"      console.log(index)\n",[96,78243,78244],{"class":98,"line":1197},[96,78245,33440],{"class":106},[96,78247,78248],{"class":98,"line":1203},[96,78249,78250],{"class":106},"    console.log(result)\n",[96,78252,78253,78255,78257],{"class":98,"line":1294},[96,78254,52396],{"class":106},[96,78256,51792],{"class":51279},[96,78258,51286],{"class":106},[14,78260,78261],{},[1445,78262],{"alt":18,"src":78263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[38,78265,78267],{"id":78266},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[14,78269,78270],{},[1445,78271],{"alt":18,"src":78272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[14,78274,78275],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[87,78277,78279],{"className":53046,"code":78278,"language":53048,"meta":18,"style":18},"\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",[93,78280,78281,78289,78297,78302,78307,78311,78315,78320,78324,78329,78337],{"__ignoreMap":18},[96,78282,78283,78285,78287],{"class":98,"line":99},[96,78284,1017],{"class":106},[96,78286,51779],{"class":51279},[96,78288,51286],{"class":106},[96,78290,78291,78293,78295],{"class":98,"line":19},[96,78292,52123],{"class":106},[96,78294,51792],{"class":51279},[96,78296,51286],{"class":106},[96,78298,78299],{"class":98,"line":1162},[96,78300,78301],{"class":106},"    const arr = [10, 20, 30]\n",[96,78303,78304],{"class":98,"line":1177},[96,78305,78306],{"class":106},"    const newArr = arr.filter(function (item, index) {\n",[96,78308,78309],{"class":98,"line":1183},[96,78310,78236],{"class":106},[96,78312,78313],{"class":98,"line":1197},[96,78314,78241],{"class":106},[96,78316,78317],{"class":98,"line":1203},[96,78318,78319],{"class":106},"      return item >= 20\n",[96,78321,78322],{"class":98,"line":1294},[96,78323,33440],{"class":106},[96,78325,78326],{"class":98,"line":1300},[96,78327,78328],{"class":106},"    console.log(newArr)\n",[96,78330,78331,78333,78335],{"class":98,"line":1312},[96,78332,52396],{"class":106},[96,78334,51792],{"class":51279},[96,78336,51286],{"class":106},[96,78338,78339,78341,78343],{"class":98,"line":1595},[96,78340,51764],{"class":106},[96,78342,51779],{"class":51279},[96,78344,51286],{"class":106},[14,78346,78347],{},"这个也可以写成箭头函数：",[87,78349,78351],{"className":50612,"code":78350,"language":50614,"meta":18,"style":18},"const newArr = arr.filter(item => item >= 20)\n",[93,78352,78353],{"__ignoreMap":18},[96,78354,78355],{"class":98,"line":99},[96,78356,78350],{"class":106},[38,78358,78360],{"id":78359},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[14,78362,78363],{},[1445,78364],{"alt":18,"src":78365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[14,78367,78368],{},"步骤：",[14,78370,78371],{},"①：渲染页面模块",[1114,78373,78374,78377],{},[53,78375,78376],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[53,78378,78379],{},"用forEach+字符串的形式",[14,78381,78382],{},"②：点击不同需求，显示不同页面内容",[1114,78384,78385,78388,78391,78394,78397],{},[53,78386,78387],{},"点击采取事件委托方式 .filter",[53,78389,78390],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[53,78392,78393],{},"筛选条件是根据点击的 data-index 来判断",[53,78395,78396],{},"可以使用对象解构，把事件对象解构",[53,78398,78399],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[87,78401,78403],{"className":50612,"code":78402,"language":50614,"meta":18,"style":18},"\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",[93,78404,78405,78415,78429,78433,78441,78455,78475,78487,78495,78501,78511,78521,78531,78535,78539,78545,78558,78570,78580,78592,78596,78600,78607,78620,78632,78649,78667,78680,78684,78688,78700,78710,78714,78718,78725,78766,78793,78803,78807,78811,78819,78831,78835,78839,78847,78859,78871,78882,78886,78890,78899,78911,78922,78926,78930,78939,78951,78963,78967,78971,78978,78988,79000,79012,79027,79031,79035,79043,79059,79069,79079,79089,79101,79105,79109,79119,79130,79140,79144,79152,79160,79164,79172,79187,79213,79238,79263,79282,79290,79304,79309,79314,79319,79324,79329,79337,79345,79350,79361,79366,79376,79386,79396,79406,79410,79414,79423,79432,79441,79450,79454,79458,79467,79476,79485,79494,79498,79502,79511,79520,79529,79538,79542,79546,79555,79564,79573,79582,79586,79590,79599,79608,79617,79626,79630,79634,79643,79652,79661,79670,79674,79678,79687,79696,79704,79713,79717,79721,79725,79730,79742,79747,79759,79763,79780,79808,79817,79822,79832,79842,79851,79856,79861,79865,79870,79887,79891,79896,79904,79909,79936,79941,79961,79966,79978,79983,79988,79993,80004,80018,80055,80073,80106,80123,80147,80151,80156,80162,80166,80170,80174,80182,80190,80194],{"__ignoreMap":18},[96,78406,78407,78409,78411,78413],{"class":98,"line":99},[96,78408,51276],{"class":106},[96,78410,51280],{"class":51279},[96,78412,51283],{"class":1946},[96,78414,51286],{"class":106},[96,78416,78417,78419,78421,78423,78425,78427],{"class":98,"line":19},[96,78418,1017],{"class":106},[96,78420,50614],{"class":51279},[96,78422,51295],{"class":1946},[96,78424,152],{"class":106},[96,78426,51300],{"class":211},[96,78428,51286],{"class":106},[96,78430,78431],{"class":98,"line":1162},[96,78432,2383],{"emptyLinePlaceholder":23},[96,78434,78435,78437,78439],{"class":98,"line":1177},[96,78436,1017],{"class":106},[96,78438,51313],{"class":51279},[96,78440,51286],{"class":106},[96,78442,78443,78445,78447,78449,78451,78453],{"class":98,"line":1183},[96,78444,52123],{"class":106},[96,78446,51323],{"class":51279},[96,78448,51326],{"class":1946},[96,78450,152],{"class":106},[96,78452,51331],{"class":211},[96,78454,51286],{"class":106},[96,78456,78457,78459,78461,78463,78465,78467,78469,78471,78473],{"class":98,"line":1197},[96,78458,52123],{"class":106},[96,78460,51323],{"class":51279},[96,78462,14904],{"class":1946},[96,78464,152],{"class":106},[96,78466,51370],{"class":211},[96,78468,51350],{"class":1946},[96,78470,152],{"class":106},[96,78472,51377],{"class":211},[96,78474,51286],{"class":106},[96,78476,78477,78479,78481,78483,78485],{"class":98,"line":1203},[96,78478,52123],{"class":106},[96,78480,51386],{"class":51279},[96,78482,51389],{"class":106},[96,78484,51386],{"class":51279},[96,78486,51286],{"class":106},[96,78488,78489,78491,78493],{"class":98,"line":1294},[96,78490,52123],{"class":106},[96,78492,5110],{"class":51279},[96,78494,51286],{"class":106},[96,78496,78497,78499],{"class":98,"line":1300},[96,78498,6387],{"class":51279},[96,78500,15556],{"class":106},[96,78502,78503,78505,78507,78509],{"class":98,"line":1312},[96,78504,54674],{"class":155},[96,78506,51416],{"class":106},[96,78508,298],{"class":155},[96,78510,1273],{"class":106},[96,78512,78513,78515,78517,78519],{"class":98,"line":1595},[96,78514,54685],{"class":155},[96,78516,51416],{"class":106},[96,78518,298],{"class":155},[96,78520,1273],{"class":106},[96,78522,78523,78525,78527,78529],{"class":98,"line":1600},[96,78524,72575],{"class":155},[96,78526,51416],{"class":106},[96,78528,60484],{"class":155},[96,78530,1273],{"class":106},[96,78532,78533],{"class":98,"line":1606},[96,78534,2170],{"class":106},[96,78536,78537],{"class":98,"line":1611},[96,78538,2383],{"emptyLinePlaceholder":23},[96,78540,78541,78543],{"class":98,"line":1625},[96,78542,62102],{"class":1946},[96,78544,15556],{"class":106},[96,78546,78547,78549,78551,78554,78556],{"class":98,"line":1630},[96,78548,54750],{"class":155},[96,78550,51416],{"class":106},[96,78552,78553],{"class":155},"990",[96,78555,51471],{"class":102},[96,78557,1273],{"class":106},[96,78559,78560,78562,78564,78566,78568],{"class":98,"line":1636},[96,78561,54685],{"class":155},[96,78563,51416],{"class":106},[96,78565,298],{"class":155},[96,78567,51535],{"class":155},[96,78569,1273],{"class":106},[96,78571,78572,78574,78576,78578],{"class":98,"line":1657},[96,78573,54988],{"class":155},[96,78575,51416],{"class":106},[96,78577,51456],{"class":155},[96,78579,1273],{"class":106},[96,78581,78582,78585,78587,78590],{"class":98,"line":1662},[96,78583,78584],{"class":155},"      flex-wrap",[96,78586,51416],{"class":106},[96,78588,78589],{"class":155},"wrap",[96,78591,1273],{"class":106},[96,78593,78594],{"class":98,"line":1676},[96,78595,2170],{"class":106},[96,78597,78598],{"class":98,"line":1681},[96,78599,2383],{"emptyLinePlaceholder":23},[96,78601,78602,78605],{"class":98,"line":1710},[96,78603,78604],{"class":1946},"    .item",[96,78606,15556],{"class":106},[96,78608,78609,78611,78613,78616,78618],{"class":98,"line":1715},[96,78610,54750],{"class":155},[96,78612,51416],{"class":106},[96,78614,78615],{"class":155},"240",[96,78617,51471],{"class":102},[96,78619,1273],{"class":106},[96,78621,78622,78624,78626,78628,78630],{"class":98,"line":1732},[96,78623,61979],{"class":155},[96,78625,51416],{"class":106},[96,78627,553],{"class":155},[96,78629,51471],{"class":102},[96,78631,1273],{"class":106},[96,78633,78634,78636,78638,78640,78642,78645,78647],{"class":98,"line":1737},[96,78635,54674],{"class":155},[96,78637,51416],{"class":106},[96,78639,807],{"class":155},[96,78641,51471],{"class":102},[96,78643,78644],{"class":155}," 30",[96,78646,51471],{"class":102},[96,78648,1273],{"class":106},[96,78650,78651,78653,78655,78657,78660,78663,78665],{"class":98,"line":1742},[96,78652,61839],{"class":155},[96,78654,51416],{"class":106},[96,78656,28100],{"class":155},[96,78658,78659],{"class":155}," ease",[96,78661,78662],{"class":155}," .5",[96,78664,802],{"class":102},[96,78666,1273],{"class":106},[96,78668,78669,78672,78674,78676,78678],{"class":98,"line":1747},[96,78670,78671],{"class":155},"      margin-bottom",[96,78673,51416],{"class":106},[96,78675,807],{"class":155},[96,78677,51471],{"class":102},[96,78679,1273],{"class":106},[96,78681,78682],{"class":98,"line":1761},[96,78683,2170],{"class":106},[96,78685,78686],{"class":98,"line":1766},[96,78687,2383],{"emptyLinePlaceholder":23},[96,78689,78690,78693,78695,78698],{"class":98,"line":2560},[96,78691,78692],{"class":1946},"    .item:nth-child",[96,78694,107],{"class":106},[96,78696,78697],{"class":155},"4n",[96,78699,12426],{"class":106},[96,78701,78702,78704,78706,78708],{"class":98,"line":2574},[96,78703,61979],{"class":155},[96,78705,51416],{"class":106},[96,78707,298],{"class":155},[96,78709,1273],{"class":106},[96,78711,78712],{"class":98,"line":2582},[96,78713,2170],{"class":106},[96,78715,78716],{"class":98,"line":2587},[96,78717,2383],{"emptyLinePlaceholder":23},[96,78719,78720,78723],{"class":98,"line":2593},[96,78721,78722],{"class":1946},"    .item:hover",[96,78724,15556],{"class":106},[96,78726,78727,78730,78732,78734,78736,78738,78740,78742,78744,78747,78749,78751,78753,78755,78757,78759,78761,78764],{"class":98,"line":2599},[96,78728,78729],{"class":155},"      box-shadow",[96,78731,51416],{"class":106},[96,78733,298],{"class":155},[96,78735,51471],{"class":102},[96,78737,4076],{"class":155},[96,78739,51471],{"class":102},[96,78741,2131],{"class":155},[96,78743,51471],{"class":102},[96,78745,78746],{"class":155}," rgba",[96,78748,107],{"class":106},[96,78750,298],{"class":155},[96,78752,12419],{"class":106},[96,78754,298],{"class":155},[96,78756,12419],{"class":106},[96,78758,298],{"class":155},[96,78760,12419],{"class":106},[96,78762,78763],{"class":155},".2",[96,78765,2702],{"class":106},[96,78767,78768,78771,78773,78776,78778,78780,78782,78785,78787,78789,78791],{"class":98,"line":2604},[96,78769,78770],{"class":155},"      transform",[96,78772,51416],{"class":106},[96,78774,78775],{"class":155},"translate3d",[96,78777,107],{"class":106},[96,78779,298],{"class":155},[96,78781,12419],{"class":106},[96,78783,78784],{"class":155},"-4",[96,78786,51471],{"class":102},[96,78788,12419],{"class":106},[96,78790,298],{"class":155},[96,78792,2702],{"class":106},[96,78794,78795,78797,78799,78801],{"class":98,"line":7932},[96,78796,62004],{"class":155},[96,78798,51416],{"class":106},[96,78800,62009],{"class":155},[96,78802,1273],{"class":106},[96,78804,78805],{"class":98,"line":7956},[96,78806,2170],{"class":106},[96,78808,78809],{"class":98,"line":7961},[96,78810,2383],{"emptyLinePlaceholder":23},[96,78812,78813,78815,78817],{"class":98,"line":7967},[96,78814,78604],{"class":1946},[96,78816,55594],{"class":51279},[96,78818,15556],{"class":106},[96,78820,78821,78823,78825,78827,78829],{"class":98,"line":7994},[96,78822,54750],{"class":155},[96,78824,51416],{"class":106},[96,78826,418],{"class":155},[96,78828,435],{"class":102},[96,78830,1273],{"class":106},[96,78832,78833],{"class":98,"line":7999},[96,78834,2170],{"class":106},[96,78836,78837],{"class":98,"line":8005},[96,78838,2383],{"emptyLinePlaceholder":23},[96,78840,78841,78843,78845],{"class":98,"line":8017},[96,78842,78604],{"class":1946},[96,78844,62283],{"class":1946},[96,78846,15556],{"class":106},[96,78848,78849,78851,78853,78855,78857],{"class":98,"line":8029},[96,78850,54901],{"class":155},[96,78852,51416],{"class":106},[96,78854,757],{"class":155},[96,78856,51471],{"class":102},[96,78858,1273],{"class":106},[96,78860,78861,78863,78865,78867,78869],{"class":98,"line":8041},[96,78862,78671],{"class":155},[96,78864,51416],{"class":106},[96,78866,553],{"class":155},[96,78868,51471],{"class":102},[96,78870,1273],{"class":106},[96,78872,78873,78875,78877,78880],{"class":98,"line":9700},[96,78874,57395],{"class":155},[96,78876,51416],{"class":106},[96,78878,78879],{"class":155},"#666",[96,78881,1273],{"class":106},[96,78883,78884],{"class":98,"line":9725},[96,78885,2170],{"class":106},[96,78887,78888],{"class":98,"line":9748},[96,78889,2383],{"emptyLinePlaceholder":23},[96,78891,78892,78894,78897],{"class":98,"line":9772},[96,78893,78604],{"class":1946},[96,78895,78896],{"class":1946}," .price",[96,78898,15556],{"class":106},[96,78900,78901,78903,78905,78907,78909],{"class":98,"line":9777},[96,78902,54901],{"class":155},[96,78904,51416],{"class":106},[96,78906,857],{"class":155},[96,78908,51471],{"class":102},[96,78910,1273],{"class":106},[96,78912,78913,78915,78917,78920],{"class":98,"line":9782},[96,78914,57395],{"class":155},[96,78916,51416],{"class":106},[96,78918,78919],{"class":155},"firebrick",[96,78921,1273],{"class":106},[96,78923,78924],{"class":98,"line":9787},[96,78925,2170],{"class":106},[96,78927,78928],{"class":98,"line":9796},[96,78929,2383],{"emptyLinePlaceholder":23},[96,78931,78932,78934,78937],{"class":98,"line":9801},[96,78933,78604],{"class":1946},[96,78935,78936],{"class":1946}," .price::before",[96,78938,15556],{"class":106},[96,78940,78941,78944,78946,78949],{"class":98,"line":9807},[96,78942,78943],{"class":155},"      content",[96,78945,51416],{"class":106},[96,78947,78948],{"class":211},"'￥'",[96,78950,1273],{"class":106},[96,78952,78953,78955,78957,78959,78961],{"class":98,"line":9828},[96,78954,54901],{"class":155},[96,78956,51416],{"class":106},[96,78958,656],{"class":155},[96,78960,51471],{"class":102},[96,78962,1273],{"class":106},[96,78964,78965],{"class":98,"line":9834},[96,78966,2170],{"class":106},[96,78968,78969],{"class":98,"line":9848},[96,78970,2383],{"emptyLinePlaceholder":23},[96,78972,78973,78976],{"class":98,"line":9854},[96,78974,78975],{"class":1946},"    .filter",[96,78977,15556],{"class":106},[96,78979,78980,78982,78984,78986],{"class":98,"line":9881},[96,78981,54988],{"class":155},[96,78983,51416],{"class":106},[96,78985,51456],{"class":155},[96,78987,1273],{"class":106},[96,78989,78990,78992,78994,78996,78998],{"class":98,"line":9890},[96,78991,54750],{"class":155},[96,78993,51416],{"class":106},[96,78995,78553],{"class":155},[96,78997,51471],{"class":102},[96,78999,1273],{"class":106},[96,79001,79002,79004,79006,79008,79010],{"class":98,"line":9896},[96,79003,54685],{"class":155},[96,79005,51416],{"class":106},[96,79007,298],{"class":155},[96,79009,51535],{"class":155},[96,79011,1273],{"class":106},[96,79013,79014,79016,79018,79020,79022,79024],{"class":98,"line":9904},[96,79015,54674],{"class":155},[96,79017,51416],{"class":106},[96,79019,763],{"class":155},[96,79021,51471],{"class":102},[96,79023,78644],{"class":155},[96,79025,79026],{"class":102},"px\n",[96,79028,79029],{"class":98,"line":9909},[96,79030,2170],{"class":106},[96,79032,79033],{"class":98,"line":16588},[96,79034,2383],{"emptyLinePlaceholder":23},[96,79036,79037,79039,79041],{"class":98,"line":16594},[96,79038,78975],{"class":1946},[96,79040,1381],{"class":51279},[96,79042,15556],{"class":106},[96,79044,79045,79047,79049,79051,79053,79055,79057],{"class":98,"line":16617},[96,79046,54674],{"class":155},[96,79048,51416],{"class":106},[96,79050,553],{"class":155},[96,79052,51471],{"class":102},[96,79054,8934],{"class":155},[96,79056,51471],{"class":102},[96,79058,1273],{"class":106},[96,79060,79061,79063,79065,79067],{"class":98,"line":16623},[96,79062,61700],{"class":155},[96,79064,51416],{"class":106},[96,79066,61797],{"class":155},[96,79068,1273],{"class":106},[96,79070,79071,79073,79075,79077],{"class":98,"line":16646},[96,79072,57395],{"class":155},[96,79074,51416],{"class":106},[96,79076,78879],{"class":155},[96,79078,1273],{"class":106},[96,79080,79081,79083,79085,79087],{"class":98,"line":16660},[96,79082,63949],{"class":155},[96,79084,51416],{"class":106},[96,79086,54716],{"class":155},[96,79088,1273],{"class":106},[96,79090,79091,79093,79095,79097,79099],{"class":98,"line":16680},[96,79092,61729],{"class":155},[96,79094,51416],{"class":106},[96,79096,807],{"class":155},[96,79098,51471],{"class":102},[96,79100,1273],{"class":106},[96,79102,79103],{"class":98,"line":16686},[96,79104,2170],{"class":106},[96,79106,79107],{"class":98,"line":16697},[96,79108,2383],{"emptyLinePlaceholder":23},[96,79110,79111,79113,79115,79117],{"class":98,"line":16720},[96,79112,78975],{"class":1946},[96,79114,1381],{"class":51279},[96,79116,61879],{"class":1946},[96,79118,15556],{"class":106},[96,79120,79121,79123,79125,79128],{"class":98,"line":16742},[96,79122,54863],{"class":155},[96,79124,51416],{"class":106},[96,79126,79127],{"class":155},"#05943c",[96,79129,1273],{"class":106},[96,79131,79132,79134,79136,79138],{"class":98,"line":16747},[96,79133,57395],{"class":155},[96,79135,51416],{"class":106},[96,79137,60821],{"class":155},[96,79139,1273],{"class":106},[96,79141,79142],{"class":98,"line":16753},[96,79143,2170],{"class":106},[96,79145,79146,79148,79150],{"class":98,"line":16767},[96,79147,52396],{"class":106},[96,79149,5110],{"class":51279},[96,79151,51286],{"class":106},[96,79153,79154,79156,79158],{"class":98,"line":16780},[96,79155,51764],{"class":106},[96,79157,51313],{"class":51279},[96,79159,51286],{"class":106},[96,79161,79162],{"class":98,"line":16785},[96,79163,2383],{"emptyLinePlaceholder":23},[96,79165,79166,79168,79170],{"class":98,"line":16799},[96,79167,1017],{"class":106},[96,79169,51779],{"class":51279},[96,79171,51286],{"class":106},[96,79173,79174,79176,79178,79180,79182,79185],{"class":98,"line":16804},[96,79175,52123],{"class":106},[96,79177,51590],{"class":51279},[96,79179,53465],{"class":1946},[96,79181,152],{"class":106},[96,79183,79184],{"class":211},"\"filter\"",[96,79186,51286],{"class":106},[96,79188,79189,79191,79193,79195,79197,79199,79202,79204,79206,79209,79211],{"class":98,"line":16810},[96,79190,51320],{"class":106},[96,79192,345],{"class":51279},[96,79194,61036],{"class":1946},[96,79196,152],{"class":106},[96,79198,61041],{"class":211},[96,79200,79201],{"class":1946}," data-index",[96,79203,152],{"class":106},[96,79205,3661],{"class":211},[96,79207,79208],{"class":106},">0-100元\u003C\u002F",[96,79210,345],{"class":51279},[96,79212,51286],{"class":106},[96,79214,79215,79217,79219,79221,79223,79225,79227,79229,79231,79234,79236],{"class":98,"line":16815},[96,79216,51320],{"class":106},[96,79218,345],{"class":51279},[96,79220,61036],{"class":1946},[96,79222,152],{"class":106},[96,79224,61041],{"class":211},[96,79226,79201],{"class":1946},[96,79228,152],{"class":106},[96,79230,3684],{"class":211},[96,79232,79233],{"class":106},">100-300元\u003C\u002F",[96,79235,345],{"class":51279},[96,79237,51286],{"class":106},[96,79239,79240,79242,79244,79246,79248,79250,79252,79254,79256,79259,79261],{"class":98,"line":16829},[96,79241,51320],{"class":106},[96,79243,345],{"class":51279},[96,79245,61036],{"class":1946},[96,79247,152],{"class":106},[96,79249,61041],{"class":211},[96,79251,79201],{"class":1946},[96,79253,152],{"class":106},[96,79255,3697],{"class":211},[96,79257,79258],{"class":106},">300元以上\u003C\u002F",[96,79260,345],{"class":51279},[96,79262,51286],{"class":106},[96,79264,79265,79267,79269,79271,79273,79275,79278,79280],{"class":98,"line":16834},[96,79266,51320],{"class":106},[96,79268,345],{"class":51279},[96,79270,61036],{"class":1946},[96,79272,152],{"class":106},[96,79274,61041],{"class":211},[96,79276,79277],{"class":106},">全部区间\u003C\u002F",[96,79279,345],{"class":51279},[96,79281,51286],{"class":106},[96,79283,79284,79286,79288],{"class":98,"line":16839},[96,79285,52396],{"class":106},[96,79287,51590],{"class":51279},[96,79289,51286],{"class":106},[96,79291,79292,79294,79296,79298,79300,79302],{"class":98,"line":16853},[96,79293,52123],{"class":106},[96,79295,51590],{"class":51279},[96,79297,53465],{"class":1946},[96,79299,152],{"class":106},[96,79301,62587],{"class":211},[96,79303,51286],{"class":106},[96,79305,79306],{"class":98,"line":16865},[96,79307,79308],{"class":165},"    \u003C!-- \u003Cdiv class=\"item\">\n",[96,79310,79311],{"class":98,"line":16870},[96,79312,79313],{"class":165},"      \u003Cimg src=\"\" alt=\"\">\n",[96,79315,79316],{"class":98,"line":16883},[96,79317,79318],{"class":165},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[96,79320,79321],{"class":98,"line":16888},[96,79322,79323],{"class":165},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[96,79325,79326],{"class":98,"line":16893},[96,79327,79328],{"class":165},"    \u003C\u002Fdiv> -->\n",[96,79330,79331,79333,79335],{"class":98,"line":16898},[96,79332,52396],{"class":106},[96,79334,51590],{"class":51279},[96,79336,51286],{"class":106},[96,79338,79339,79341,79343],{"class":98,"line":16911},[96,79340,52123],{"class":106},[96,79342,51792],{"class":51279},[96,79344,51286],{"class":106},[96,79346,79347],{"class":98,"line":16916},[96,79348,79349],{"class":165},"    \u002F\u002F 2. 初始化数据\n",[96,79351,79352,79354,79357,79359],{"class":98,"line":32612},[96,79353,11205],{"class":102},[96,79355,79356],{"class":155}," goodsList",[96,79358,13548],{"class":102},[96,79360,55426],{"class":106},[96,79362,79363],{"class":98,"line":32618},[96,79364,79365],{"class":106},"      {\n",[96,79367,79368,79371,79374],{"class":98,"line":32624},[96,79369,79370],{"class":106},"        id: ",[96,79372,79373],{"class":211},"'4001172'",[96,79375,31445],{"class":106},[96,79377,79378,79381,79384],{"class":98,"line":32630},[96,79379,79380],{"class":106},"        name: ",[96,79382,79383],{"class":211},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[96,79385,31445],{"class":106},[96,79387,79388,79391,79394],{"class":98,"line":32636},[96,79389,79390],{"class":106},"        price: ",[96,79392,79393],{"class":211},"'289.00'",[96,79395,31445],{"class":106},[96,79397,79398,79401,79404],{"class":98,"line":32647},[96,79399,79400],{"class":106},"        picture: ",[96,79402,79403],{"class":211},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[96,79405,31445],{"class":106},[96,79407,79408],{"class":98,"line":32653},[96,79409,77871],{"class":106},[96,79411,79412],{"class":98,"line":32673},[96,79413,79365],{"class":106},[96,79415,79416,79418,79421],{"class":98,"line":32679},[96,79417,79370],{"class":106},[96,79419,79420],{"class":211},"'4001594'",[96,79422,31445],{"class":106},[96,79424,79425,79427,79430],{"class":98,"line":32690},[96,79426,79380],{"class":106},[96,79428,79429],{"class":211},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[96,79431,31445],{"class":106},[96,79433,79434,79436,79439],{"class":98,"line":32696},[96,79435,79390],{"class":106},[96,79437,79438],{"class":211},"'288.00'",[96,79440,31445],{"class":106},[96,79442,79443,79445,79448],{"class":98,"line":32702},[96,79444,79400],{"class":106},[96,79446,79447],{"class":211},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[96,79449,31445],{"class":106},[96,79451,79452],{"class":98,"line":32708},[96,79453,77871],{"class":106},[96,79455,79456],{"class":98,"line":32714},[96,79457,79365],{"class":106},[96,79459,79460,79462,79465],{"class":98,"line":32720},[96,79461,79370],{"class":106},[96,79463,79464],{"class":211},"'4001009'",[96,79466,31445],{"class":106},[96,79468,79469,79471,79474],{"class":98,"line":32726},[96,79470,79380],{"class":106},[96,79472,79473],{"class":211},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[96,79475,31445],{"class":106},[96,79477,79478,79480,79483],{"class":98,"line":32732},[96,79479,79390],{"class":106},[96,79481,79482],{"class":211},"'109.00'",[96,79484,31445],{"class":106},[96,79486,79487,79489,79492],{"class":98,"line":32752},[96,79488,79400],{"class":106},[96,79490,79491],{"class":211},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[96,79493,31445],{"class":106},[96,79495,79496],{"class":98,"line":32758},[96,79497,77871],{"class":106},[96,79499,79500],{"class":98,"line":32774},[96,79501,79365],{"class":106},[96,79503,79504,79506,79509],{"class":98,"line":32780},[96,79505,79370],{"class":106},[96,79507,79508],{"class":211},"'4001874'",[96,79510,31445],{"class":106},[96,79512,79513,79515,79518],{"class":98,"line":32794},[96,79514,79380],{"class":106},[96,79516,79517],{"class":211},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[96,79519,31445],{"class":106},[96,79521,79522,79524,79527],{"class":98,"line":32800},[96,79523,79390],{"class":106},[96,79525,79526],{"class":211},"'488.00'",[96,79528,31445],{"class":106},[96,79530,79531,79533,79536],{"class":98,"line":32815},[96,79532,79400],{"class":106},[96,79534,79535],{"class":211},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[96,79537,31445],{"class":106},[96,79539,79540],{"class":98,"line":32821},[96,79541,77871],{"class":106},[96,79543,79544],{"class":98,"line":32830},[96,79545,79365],{"class":106},[96,79547,79548,79550,79553],{"class":98,"line":32836},[96,79549,79370],{"class":106},[96,79551,79552],{"class":211},"'4001649'",[96,79554,31445],{"class":106},[96,79556,79557,79559,79562],{"class":98,"line":32845},[96,79558,79380],{"class":106},[96,79560,79561],{"class":211},"'大师监制龙泉青瓷茶叶罐'",[96,79563,31445],{"class":106},[96,79565,79566,79568,79571],{"class":98,"line":32851},[96,79567,79390],{"class":106},[96,79569,79570],{"class":211},"'139.00'",[96,79572,31445],{"class":106},[96,79574,79575,79577,79580],{"class":98,"line":32857},[96,79576,79400],{"class":106},[96,79578,79579],{"class":211},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[96,79581,31445],{"class":106},[96,79583,79584],{"class":98,"line":32866},[96,79585,77871],{"class":106},[96,79587,79588],{"class":98,"line":32872},[96,79589,79365],{"class":106},[96,79591,79592,79594,79597],{"class":98,"line":32883},[96,79593,79370],{"class":106},[96,79595,79596],{"class":211},"'3997185'",[96,79598,31445],{"class":106},[96,79600,79601,79603,79606],{"class":98,"line":32889},[96,79602,79380],{"class":106},[96,79604,79605],{"class":211},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[96,79607,31445],{"class":106},[96,79609,79610,79612,79615],{"class":98,"line":32908},[96,79611,79390],{"class":106},[96,79613,79614],{"class":211},"'108.00'",[96,79616,31445],{"class":106},[96,79618,79619,79621,79624],{"class":98,"line":32914},[96,79620,79400],{"class":106},[96,79622,79623],{"class":211},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[96,79625,31445],{"class":106},[96,79627,79628],{"class":98,"line":32925},[96,79629,77871],{"class":106},[96,79631,79632],{"class":98,"line":32931},[96,79633,79365],{"class":106},[96,79635,79636,79638,79641],{"class":98,"line":32951},[96,79637,79370],{"class":106},[96,79639,79640],{"class":211},"'3997403'",[96,79642,31445],{"class":106},[96,79644,79645,79647,79650],{"class":98,"line":32967},[96,79646,79380],{"class":106},[96,79648,79649],{"class":211},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[96,79651,31445],{"class":106},[96,79653,79654,79656,79659],{"class":98,"line":32973},[96,79655,79390],{"class":106},[96,79657,79658],{"class":211},"'100.00'",[96,79660,31445],{"class":106},[96,79662,79663,79665,79668],{"class":98,"line":32987},[96,79664,79400],{"class":106},[96,79666,79667],{"class":211},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[96,79669,31445],{"class":106},[96,79671,79672],{"class":98,"line":32993},[96,79673,77871],{"class":106},[96,79675,79676],{"class":98,"line":32999},[96,79677,79365],{"class":106},[96,79679,79680,79682,79685],{"class":98,"line":33010},[96,79681,79370],{"class":106},[96,79683,79684],{"class":211},"'3998274'",[96,79686,31445],{"class":106},[96,79688,79689,79691,79694],{"class":98,"line":33016},[96,79690,79380],{"class":106},[96,79692,79693],{"class":211},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[96,79695,31445],{"class":106},[96,79697,79698,79700,79702],{"class":98,"line":33022},[96,79699,79390],{"class":106},[96,79701,79570],{"class":211},[96,79703,31445],{"class":106},[96,79705,79706,79708,79711],{"class":98,"line":33032},[96,79707,79400],{"class":106},[96,79709,79710],{"class":211},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[96,79712,31445],{"class":106},[96,79714,79715],{"class":98,"line":33038},[96,79716,77871],{"class":106},[96,79718,79719],{"class":98,"line":33049},[96,79720,53088],{"class":106},[96,79722,79723],{"class":98,"line":33055},[96,79724,2383],{"emptyLinePlaceholder":23},[96,79726,79727],{"class":98,"line":33065},[96,79728,79729],{"class":165},"    \u002F\u002F 1.渲染函数\n",[96,79731,79732,79734,79736,79738,79740],{"class":98,"line":33070},[96,79733,70063],{"class":102},[96,79735,70066],{"class":1946},[96,79737,107],{"class":106},[96,79739,3863],{"class":5200},[96,79741,12426],{"class":106},[96,79743,79744],{"class":98,"line":33076},[96,79745,79746],{"class":165},"      \u002F\u002F 声明空字符串\n",[96,79748,79749,79752,79755,79757],{"class":98,"line":33125},[96,79750,79751],{"class":102},"      let",[96,79753,79754],{"class":106}," str ",[96,79756,152],{"class":102},[96,79758,70083],{"class":211},[96,79760,79761],{"class":98,"line":33172},[96,79762,70088],{"class":165},[96,79764,79765,79767,79770,79772,79775,79778],{"class":98,"line":33177},[96,79766,57986],{"class":106},[96,79768,79769],{"class":1946},"forEach",[96,79771,107],{"class":106},[96,79773,79774],{"class":5200},"item",[96,79776,79777],{"class":102}," =>",[96,79779,15556],{"class":106},[96,79781,79782,79784,79787,79790,79792,79795,79797,79800,79803,79805],{"class":98,"line":33183},[96,79783,61249],{"class":102},[96,79785,79786],{"class":106}," { ",[96,79788,79789],{"class":155},"name",[96,79791,12419],{"class":106},[96,79793,79794],{"class":155},"price",[96,79796,12419],{"class":106},[96,79798,79799],{"class":155},"picture",[96,79801,79802],{"class":106}," } ",[96,79804,152],{"class":102},[96,79806,79807],{"class":106}," item\n",[96,79809,79810,79813,79815],{"class":98,"line":33202},[96,79811,79812],{"class":106},"        str ",[96,79814,9461],{"class":102},[96,79816,70147],{"class":211},[96,79818,79819],{"class":98,"line":33208},[96,79820,79821],{"class":211},"          \u003Cdiv class=\"item\">\n",[96,79823,79824,79827,79829],{"class":98,"line":33228},[96,79825,79826],{"class":211},"            \u003Cimg src=\"${",[96,79828,79799],{"class":106},[96,79830,79831],{"class":211},"}\" alt=\"\">\n",[96,79833,79834,79837,79839],{"class":98,"line":33234},[96,79835,79836],{"class":211},"            \u003Cp class=\"name\">${",[96,79838,79789],{"class":106},[96,79840,79841],{"class":211},"}\u003C\u002Fp>\n",[96,79843,79844,79847,79849],{"class":98,"line":33240},[96,79845,79846],{"class":211},"            \u003Cp class=\"price\">${",[96,79848,79794],{"class":106},[96,79850,79841],{"class":211},[96,79852,79853],{"class":98,"line":33250},[96,79854,79855],{"class":211},"          \u003C\u002Fdiv>\n",[96,79857,79858],{"class":98,"line":33255},[96,79859,79860],{"class":211},"        `\n",[96,79862,79863],{"class":98,"line":33261},[96,79864,64794],{"class":106},[96,79866,79867],{"class":98,"line":33277},[96,79868,79869],{"class":165},"      \u002F\u002F 追加给List\n",[96,79871,79872,79874,79876,79878,79881,79883,79885],{"class":98,"line":33322},[96,79873,55750],{"class":106},[96,79875,54378],{"class":1946},[96,79877,107],{"class":106},[96,79879,79880],{"class":211},"'.list'",[96,79882,74228],{"class":106},[96,79884,152],{"class":102},[96,79886,73964],{"class":106},[96,79888,79889],{"class":98,"line":33328},[96,79890,2170],{"class":106},[96,79892,79893],{"class":98,"line":33334},[96,79894,79895],{"class":165},"    \u002F\u002F 页面一打开就需要渲染\n",[96,79897,79898,79901],{"class":98,"line":33340},[96,79899,79900],{"class":1946},"    render",[96,79902,79903],{"class":106},"(goodsList)\n",[96,79905,79906],{"class":98,"line":33351},[96,79907,79908],{"class":165},"    \u002F\u002F 2.过滤筛选\n",[96,79910,79911,79913,79915,79917,79920,79922,79924,79926,79928,79930,79932,79934],{"class":98,"line":33357},[96,79912,52386],{"class":106},[96,79914,54378],{"class":1946},[96,79916,107],{"class":106},[96,79918,79919],{"class":211},"'.filter'",[96,79921,30805],{"class":106},[96,79923,57792],{"class":1946},[96,79925,107],{"class":106},[96,79927,57797],{"class":211},[96,79929,12419],{"class":106},[96,79931,181],{"class":5200},[96,79933,79777],{"class":102},[96,79935,15556],{"class":106},[96,79937,79938],{"class":98,"line":33363},[96,79939,79940],{"class":165},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[96,79942,79943,79945,79947,79950,79952,79954,79956,79958],{"class":98,"line":33369},[96,79944,58207],{"class":102},[96,79946,79786],{"class":106},[96,79948,79949],{"class":155},"tagName",[96,79951,12419],{"class":106},[96,79953,31516],{"class":155},[96,79955,79802],{"class":106},[96,79957,152],{"class":102},[96,79959,79960],{"class":106}," e.target\n",[96,79962,79963],{"class":98,"line":33387},[96,79964,79965],{"class":165},"      \u002F\u002F 判断\n",[96,79967,79968,79970,79972,79974,79976],{"class":98,"line":33401},[96,79969,54459],{"class":102},[96,79971,67013],{"class":106},[96,79973,54465],{"class":102},[96,79975,68235],{"class":211},[96,79977,12426],{"class":106},[96,79979,79980],{"class":98,"line":33410},[96,79981,79982],{"class":165},"        \u002F\u002F console.log(11)\n",[96,79984,79985],{"class":98,"line":33419},[96,79986,79987],{"class":165},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[96,79989,79990],{"class":98,"line":33428},[96,79991,79992],{"class":165},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[96,79994,79995,79997,79999,80001],{"class":98,"line":33437},[96,79996,51809],{"class":102},[96,79998,51812],{"class":106},[96,80000,152],{"class":102},[96,80002,80003],{"class":106}," goodsList\n",[96,80005,80006,80008,80011,80013,80016],{"class":98,"line":33443},[96,80007,2480],{"class":102},[96,80009,80010],{"class":106}," (dataset.index ",[96,80012,54465],{"class":102},[96,80014,80015],{"class":211}," '1'",[96,80017,12426],{"class":106},[96,80019,80020,80023,80025,80028,80031,80033,80035,80037,80040,80042,80044,80047,80049,80051,80053],{"class":98,"line":33449},[96,80021,80022],{"class":106},"          arr ",[96,80024,152],{"class":102},[96,80026,80027],{"class":106}," goodsList.",[96,80029,80030],{"class":1946},"filter",[96,80032,107],{"class":106},[96,80034,79774],{"class":5200},[96,80036,79777],{"class":102},[96,80038,80039],{"class":106}," item.price ",[96,80041,1693],{"class":102},[96,80043,4076],{"class":155},[96,80045,80046],{"class":102}," &&",[96,80048,80039],{"class":106},[96,80050,1571],{"class":102},[96,80052,5738],{"class":155},[96,80054,113],{"class":106},[96,80056,80057,80060,80062,80064,80066,80068,80071],{"class":98,"line":33457},[96,80058,80059],{"class":106},"        } ",[96,80061,1684],{"class":102},[96,80063,1687],{"class":102},[96,80065,80010],{"class":106},[96,80067,54465],{"class":102},[96,80069,80070],{"class":211}," '2'",[96,80072,12426],{"class":106},[96,80074,80075,80077,80079,80081,80083,80085,80087,80089,80091,80093,80095,80097,80099,80101,80104],{"class":98,"line":33462},[96,80076,80022],{"class":106},[96,80078,152],{"class":102},[96,80080,80027],{"class":106},[96,80082,80030],{"class":1946},[96,80084,107],{"class":106},[96,80086,79774],{"class":5200},[96,80088,79777],{"class":102},[96,80090,80039],{"class":106},[96,80092,1693],{"class":102},[96,80094,5738],{"class":155},[96,80096,80046],{"class":102},[96,80098,80039],{"class":106},[96,80100,1571],{"class":102},[96,80102,80103],{"class":155}," 300",[96,80105,113],{"class":106},[96,80107,80108,80110,80112,80114,80116,80118,80121],{"class":98,"line":33468},[96,80109,80059],{"class":106},[96,80111,1684],{"class":102},[96,80113,1687],{"class":102},[96,80115,80010],{"class":106},[96,80117,54465],{"class":102},[96,80119,80120],{"class":211}," '3'",[96,80122,12426],{"class":106},[96,80124,80125,80127,80129,80131,80133,80135,80137,80139,80141,80143,80145],{"class":98,"line":33479},[96,80126,80022],{"class":106},[96,80128,152],{"class":102},[96,80130,80027],{"class":106},[96,80132,80030],{"class":1946},[96,80134,107],{"class":106},[96,80136,79774],{"class":5200},[96,80138,79777],{"class":102},[96,80140,80039],{"class":106},[96,80142,1693],{"class":102},[96,80144,80103],{"class":155},[96,80146,113],{"class":106},[96,80148,80149],{"class":98,"line":33485},[96,80150,2512],{"class":106},[96,80152,80153],{"class":98,"line":33505},[96,80154,80155],{"class":165},"        \u002F\u002F 渲染函数\n",[96,80157,80158,80160],{"class":98,"line":33511},[96,80159,70387],{"class":1946},[96,80161,52391],{"class":106},[96,80163,80164],{"class":98,"line":33517},[96,80165,52377],{"class":106},[96,80167,80168],{"class":98,"line":33523},[96,80169,2383],{"emptyLinePlaceholder":23},[96,80171,80172],{"class":98,"line":33540},[96,80173,33440],{"class":106},[96,80175,80176,80178,80180],{"class":98,"line":33546},[96,80177,52396],{"class":106},[96,80179,51792],{"class":51279},[96,80181,51286],{"class":106},[96,80183,80184,80186,80188],{"class":98,"line":33552},[96,80185,51764],{"class":106},[96,80187,51779],{"class":51279},[96,80189,51286],{"class":106},[96,80191,80192],{"class":98,"line":33558},[96,80193,2383],{"emptyLinePlaceholder":23},[96,80195,80196,80198,80200],{"class":98,"line":33564},[96,80197,51764],{"class":106},[96,80199,50614],{"class":51279},[96,80201,51286],{"class":106},[38,80203,80205],{"id":80204},"_410-深入了解对象","4.10 深入了解对象",[67,80207,80209],{"id":80208},"_4101-创建对象","4.10.1 创建对象",[14,80211,80212],{},[1445,80213],{"alt":18,"src":80214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[14,80216,80217],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[67,80219,80221],{"id":80220},"_4102-构造函数","4.10.2 构造函数",[14,80223,80224,80227],{},[256,80225,80226],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[14,80229,80230,80233],{},[256,80231,80232],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[87,80235,80237],{"className":50612,"code":80236,"language":50614,"meta":18,"style":18},"\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",[93,80238,80239,80247,80252,80273,80286,80298,80310,80314,80319,80346,80351,80378],{"__ignoreMap":18},[96,80240,80241,80243,80245],{"class":98,"line":99},[96,80242,1017],{"class":106},[96,80244,51792],{"class":51279},[96,80246,51286],{"class":106},[96,80248,80249],{"class":98,"line":19},[96,80250,80251],{"class":165},"\u002F\u002F例：\n",[96,80253,80254,80256,80259,80261,80263,80265,80267,80269,80271],{"class":98,"line":1162},[96,80255,54428],{"class":102},[96,80257,80258],{"class":1946}," Pig",[96,80260,107],{"class":106},[96,80262,79789],{"class":5200},[96,80264,485],{"class":106},[96,80266,70200],{"class":5200},[96,80268,485],{"class":106},[96,80270,70217],{"class":5200},[96,80272,12426],{"class":106},[96,80274,80275,80278,80281,80283],{"class":98,"line":1177},[96,80276,80277],{"class":155},"    this",[96,80279,80280],{"class":106},".name",[96,80282,152],{"class":102},[96,80284,80285],{"class":106},"name\n",[96,80287,80288,80290,80293,80295],{"class":98,"line":1183},[96,80289,80277],{"class":155},[96,80291,80292],{"class":106},".age",[96,80294,152],{"class":102},[96,80296,80297],{"class":106},"age\n",[96,80299,80300,80302,80305,80307],{"class":98,"line":1197},[96,80301,80277],{"class":155},[96,80303,80304],{"class":106},".gender",[96,80306,152],{"class":102},[96,80308,80309],{"class":106},"gender    \n",[96,80311,80312],{"class":98,"line":1203},[96,80313,1548],{"class":106},[96,80315,80316],{"class":98,"line":1294},[96,80317,80318],{"class":165},"\u002F\u002F创建佩奇对象\n",[96,80320,80321,80323,80326,80328,80330,80332,80335,80337,80339,80341,80344],{"class":98,"line":1300},[96,80322,6776],{"class":102},[96,80324,80325],{"class":155}," Peppa",[96,80327,11701],{"class":102},[96,80329,80258],{"class":1946},[96,80331,107],{"class":106},[96,80333,80334],{"class":211},"'佩奇'",[96,80336,485],{"class":106},[96,80338,451],{"class":155},[96,80340,485],{"class":106},[96,80342,80343],{"class":211},"'女'",[96,80345,113],{"class":106},[96,80347,80348],{"class":98,"line":1312},[96,80349,80350],{"class":165},"\u002F\u002F创建乔治对象\n",[96,80352,80353,80355,80358,80360,80362,80364,80367,80369,80371,80373,80376],{"class":98,"line":1595},[96,80354,6776],{"class":102},[96,80356,80357],{"class":155}," George",[96,80359,11701],{"class":102},[96,80361,80258],{"class":1946},[96,80363,107],{"class":106},[96,80365,80366],{"class":211},"'乔治'",[96,80368,485],{"class":106},[96,80370,178],{"class":155},[96,80372,485],{"class":106},[96,80374,80375],{"class":211},"'男'",[96,80377,113],{"class":106},[96,80379,80380,80382,80384],{"class":98,"line":1600},[96,80381,51764],{"class":106},[96,80383,51792],{"class":51279},[96,80385,51286],{"class":106},[14,80387,80388],{},[1445,80389],{"alt":18,"src":80390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[14,80392,80393],{},[1445,80394],{"alt":18,"src":80395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[14,80397,80398],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[14,80400,80401],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[14,80403,80404],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[14,80406,80407],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[14,80409,80410],{},"这里用等号是因为：对象.属性=值",[14,80412,80413],{},"①利用对象字面量创建对象",[14,80415,80416],{},"const o={",[14,80418,80419],{},"name:'pink'",[14,80421,80422],{},"} ②利用new Object创建对象",[14,80424,80425],{},"const o=new Object({name:'pink'})",[14,80427,80428],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[14,80430,80431],{},"构造函数创建对象的执行过程：",[14,80433,80434],{},[1445,80435],{"alt":18,"src":80436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[67,80438,80440],{"id":80439},"_4103-实例成员","4.10.3 实例成员",[14,80442,80443],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[50,80445,80446,80449,80452],{},[53,80447,80448],{},"实例对象的属性和方法即为实例成员",[53,80450,80451],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[53,80453,80454],{},"构造函数创建的实例对象彼此独立互不影响",[67,80456,80458],{"id":80457},"_4104-静态成员","4.10.4 静态成员",[14,80460,80461],{},[1445,80462],{"alt":18,"src":80463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[14,80465,80466],{},"静态成员有Date.now() Math.PI Math.random()",[14,80468,80469],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[14,80471,80472],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[14,80474,80475],{},"function Pig(name) n {",[14,80477,80478],{},"this.name=name",[14,80480,1053],{},[14,80482,80483],{},"Pig.eyes=2",[14,80485,80486],{},"Pig.sayHai=function () { console.log(this) }",[14,80488,80489],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[14,80491,80492],{},"console.log(Pig.eyes) \u002F\u002F2",[14,80494,11316],{},[50,80496,80497,80500,80503,80506,80509],{},[53,80498,80499],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[53,80501,80502],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[53,80504,80505],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[53,80507,80508],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[53,80510,80511],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[14,80513,80514],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[67,80516,80518],{"id":80517},"_4105-内置构造函数","4.10.5 内置构造函数",[14,80520,80521],{},"内置构造函数包含：",[14,80523,80524],{},[1445,80525],{"alt":18,"src":80526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[14,80528,80529],{},[1445,80530],{"alt":18,"src":80531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[14,80533,80534],{},"这些基本数据类型，js对他们进行了包装",[51792,80536,80537],{},"\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",[21982,80539,80541],{"id":80540},"_41051-object","4.10.5.1 Object",[14,80543,80544],{},"Object 是内置的构造函数，用于创建普通对象",[14,80546,80547],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[87,80549,80551],{"className":50612,"code":80550,"language":50614,"meta":18,"style":18},"const user=new Object({name:'小明',age:15})\n",[93,80552,80553],{"__ignoreMap":18},[96,80554,80555],{"class":98,"line":99},[96,80556,80550],{"class":106},[14,80558,80559],{},"三个常用的静态方法：",[22894,80561,80563],{"id":80562},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[14,80565,80566],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[14,80568,80569],{},[1445,80570],{"alt":18,"src":80571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[14,80573,80574],{},[1445,80575],{"alt":18,"src":80576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[87,80578,80580],{"className":53046,"code":80579,"language":53048,"meta":18,"style":18},"\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",[93,80581,80582,80590,80598,80603,80608,80613,80618,80623,80628,80636],{"__ignoreMap":18},[96,80583,80584,80586,80588],{"class":98,"line":99},[96,80585,1017],{"class":106},[96,80587,51779],{"class":51279},[96,80589,51286],{"class":106},[96,80591,80592,80594,80596],{"class":98,"line":19},[96,80593,52123],{"class":106},[96,80595,51792],{"class":51279},[96,80597,51286],{"class":106},[96,80599,80600],{"class":98,"line":1162},[96,80601,80602],{"class":106},"    const o = { name: 'pink', age: 6 }\n",[96,80604,80605],{"class":98,"line":1177},[96,80606,80607],{"class":106},"    \u002F\u002F 获得所有属性名\n",[96,80609,80610],{"class":98,"line":1183},[96,80611,80612],{"class":106},"    const arr = Object.keys(o)\n",[96,80614,80615],{"class":98,"line":1197},[96,80616,80617],{"class":106},"    console.log(arr)\n",[96,80619,80620],{"class":98,"line":1203},[96,80621,80622],{"class":106},"    \u002F\u002F 获得所有属性值\n",[96,80624,80625],{"class":98,"line":1294},[96,80626,80627],{"class":106},"    console.log(Object.values(o))\n",[96,80629,80630,80632,80634],{"class":98,"line":1300},[96,80631,52396],{"class":106},[96,80633,51792],{"class":51279},[96,80635,51286],{"class":106},[96,80637,80638,80640,80642],{"class":98,"line":1312},[96,80639,51764],{"class":106},[96,80641,51779],{"class":51279},[96,80643,51286],{"class":106},[22894,80645,80647],{"id":80646},"_410512-object-assign","4.10.5.1.2 Object. assign",[14,80649,80650],{},"Object.assign(oo,o)",[14,80652,80653],{},"后的东西添加给前 是追加",[14,80655,80656],{},[1445,80657],{"alt":18,"src":80658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[14,80660,80661],{},[1445,80662],{"alt":18,"src":80663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[87,80665,80667],{"className":53046,"code":80666,"language":53048,"meta":18,"style":18},"\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",[93,80668,80669,80677,80685,80689,80693,80697,80701,80705,80709,80714,80719,80724,80729,80734,80742],{"__ignoreMap":18},[96,80670,80671,80673,80675],{"class":98,"line":99},[96,80672,1017],{"class":106},[96,80674,51779],{"class":51279},[96,80676,51286],{"class":106},[96,80678,80679,80681,80683],{"class":98,"line":19},[96,80680,52123],{"class":106},[96,80682,51792],{"class":51279},[96,80684,51286],{"class":106},[96,80686,80687],{"class":98,"line":1162},[96,80688,80602],{"class":106},[96,80690,80691],{"class":98,"line":1177},[96,80692,80607],{"class":106},[96,80694,80695],{"class":98,"line":1183},[96,80696,80612],{"class":106},[96,80698,80699],{"class":98,"line":1197},[96,80700,80617],{"class":106},[96,80702,80703],{"class":98,"line":1203},[96,80704,80622],{"class":106},[96,80706,80707],{"class":98,"line":1294},[96,80708,80627],{"class":106},[96,80710,80711],{"class":98,"line":1300},[96,80712,80713],{"class":106},"    const oo = {}\n",[96,80715,80716],{"class":98,"line":1312},[96,80717,80718],{"class":106},"    Object.assign(oo, o)\n",[96,80720,80721],{"class":98,"line":1595},[96,80722,80723],{"class":106},"    console.log(oo)\n",[96,80725,80726],{"class":98,"line":1600},[96,80727,80728],{"class":106},"    Object.assign(o, { gender: '女' })\n",[96,80730,80731],{"class":98,"line":1606},[96,80732,80733],{"class":106},"    console.log(o)\n",[96,80735,80736,80738,80740],{"class":98,"line":1611},[96,80737,52396],{"class":106},[96,80739,51792],{"class":51279},[96,80741,51286],{"class":106},[96,80743,80744,80746,80748],{"class":98,"line":1625},[96,80745,51764],{"class":106},[96,80747,51779],{"class":51279},[96,80749,51286],{"class":106},[14,80751,80752],{},[1445,80753],{"alt":18,"src":80754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[21982,80756,80758],{"id":80757},"_41052-array","4.10.5.2 Array",[14,80760,80761],{},"Array 是内置的构造函数，用于创建数组",[14,80763,80764],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[87,80766,80768],{"className":50612,"code":80767,"language":50614,"meta":18,"style":18},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[93,80769,80770,80775],{"__ignoreMap":18},[96,80771,80772],{"class":98,"line":99},[96,80773,80774],{"class":106},"const arr=new Array(3,5)\n",[96,80776,80777],{"class":98,"line":19},[96,80778,80779],{"class":106},"console.log(arr)  \u002F\u002F[3,5]\n",[14,80781,80782],{},"Array的实例方法，这个方法是实例成员",[14,80784,80785],{},[1445,80786],{"alt":18,"src":80787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[22894,80789,80791],{"id":80790},"_410521-reduce","4.10.5.2.1 reduce",[14,80793,80794],{},[1445,80795],{"alt":18,"src":80796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[87,80798,80800],{"className":53046,"code":80799,"language":53048,"meta":18,"style":18},"\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",[93,80801,80802,80810,80818,80823,80828,80833,80838,80842,80847,80852,80857,80861,80866,80871,80875,80880,80885,80890,80898],{"__ignoreMap":18},[96,80803,80804,80806,80808],{"class":98,"line":99},[96,80805,1017],{"class":106},[96,80807,51779],{"class":51279},[96,80809,51286],{"class":106},[96,80811,80812,80814,80816],{"class":98,"line":19},[96,80813,52123],{"class":106},[96,80815,51792],{"class":51279},[96,80817,51286],{"class":106},[96,80819,80820],{"class":98,"line":1162},[96,80821,80822],{"class":106},"    const arr = [1, 5, 8]\n",[96,80824,80825],{"class":98,"line":1177},[96,80826,80827],{"class":106},"    \u002F\u002F 1.没有初始值\n",[96,80829,80830],{"class":98,"line":1183},[96,80831,80832],{"class":106},"    const total = arr.reduce(function (prev, current) {\n",[96,80834,80835],{"class":98,"line":1197},[96,80836,80837],{"class":106},"      return prev + current\n",[96,80839,80840],{"class":98,"line":1203},[96,80841,33440],{"class":106},[96,80843,80844],{"class":98,"line":1294},[96,80845,80846],{"class":106},"    console.log(total)   \u002F\u002F14\n",[96,80848,80849],{"class":98,"line":1300},[96,80850,80851],{"class":106},"    \u002F\u002F 2.有初始值\n",[96,80853,80854],{"class":98,"line":1312},[96,80855,80856],{"class":106},"    const total1 = arr.reduce(function (prev, current) {\n",[96,80858,80859],{"class":98,"line":1595},[96,80860,80837],{"class":106},[96,80862,80863],{"class":98,"line":1600},[96,80864,80865],{"class":106},"    }, 10)\n",[96,80867,80868],{"class":98,"line":1606},[96,80869,80870],{"class":106},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[96,80872,80873],{"class":98,"line":1611},[96,80874,2383],{"emptyLinePlaceholder":23},[96,80876,80877],{"class":98,"line":1625},[96,80878,80879],{"class":106},"    \u002F\u002F 3.箭头函数写法\n",[96,80881,80882],{"class":98,"line":1630},[96,80883,80884],{"class":106},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[96,80886,80887],{"class":98,"line":1636},[96,80888,80889],{"class":106},"    console.log(total2)   \u002F\u002F24\n",[96,80891,80892,80894,80896],{"class":98,"line":1657},[96,80893,52396],{"class":106},[96,80895,51792],{"class":51279},[96,80897,51286],{"class":106},[96,80899,80900,80902,80904],{"class":98,"line":1662},[96,80901,51764],{"class":106},[96,80903,51779],{"class":51279},[96,80905,51286],{"class":106},[14,80907,80908],{},"执行过程：",[50,80910,80911,80914,80917],{},[53,80912,80913],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[53,80915,80916],{},"每一次循环，把返回值给作为下一次循环的上一次值",[53,80918,80919],{},"如果有起始值，则起始值作为上一次值",[87,80921,80923],{"className":53046,"code":80922,"language":53048,"meta":18,"style":18},"\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",[93,80924,80925,80933,80941,80945,80949,80953,80957,80961,80965,80970,80975,80980,80985,80990,80994,80998,81002,81006,81010,81014,81019,81023,81028,81032,81037,81042,81046,81050,81054,81062],{"__ignoreMap":18},[96,80926,80927,80929,80931],{"class":98,"line":99},[96,80928,1017],{"class":106},[96,80930,51779],{"class":51279},[96,80932,51286],{"class":106},[96,80934,80935,80937,80939],{"class":98,"line":19},[96,80936,52123],{"class":106},[96,80938,51792],{"class":51279},[96,80940,51286],{"class":106},[96,80942,80943],{"class":98,"line":1162},[96,80944,80822],{"class":106},[96,80946,80947],{"class":98,"line":1177},[96,80948,80827],{"class":106},[96,80950,80951],{"class":98,"line":1183},[96,80952,80832],{"class":106},[96,80954,80955],{"class":98,"line":1197},[96,80956,80837],{"class":106},[96,80958,80959],{"class":98,"line":1203},[96,80960,33440],{"class":106},[96,80962,80963],{"class":98,"line":1294},[96,80964,80846],{"class":106},[96,80966,80967],{"class":98,"line":1300},[96,80968,80969],{"class":106},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[96,80971,80972],{"class":98,"line":1312},[96,80973,80974],{"class":106},"    \u002F\u002F     1              5                    6\n",[96,80976,80977],{"class":98,"line":1595},[96,80978,80979],{"class":106},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[96,80981,80982],{"class":98,"line":1600},[96,80983,80984],{"class":106},"    \u002F\u002F     6              8                    14\n",[96,80986,80987],{"class":98,"line":1606},[96,80988,80989],{"class":106},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[96,80991,80992],{"class":98,"line":1611},[96,80993,80851],{"class":106},[96,80995,80996],{"class":98,"line":1625},[96,80997,80856],{"class":106},[96,80999,81000],{"class":98,"line":1630},[96,81001,80837],{"class":106},[96,81003,81004],{"class":98,"line":1636},[96,81005,80865],{"class":106},[96,81007,81008],{"class":98,"line":1657},[96,81009,80870],{"class":106},[96,81011,81012],{"class":98,"line":1662},[96,81013,80969],{"class":106},[96,81015,81016],{"class":98,"line":1676},[96,81017,81018],{"class":106},"    \u002F\u002F     10             1                     11\n",[96,81020,81021],{"class":98,"line":1681},[96,81022,80979],{"class":106},[96,81024,81025],{"class":98,"line":1710},[96,81026,81027],{"class":106},"    \u002F\u002F     11             5                    16\n",[96,81029,81030],{"class":98,"line":1715},[96,81031,80979],{"class":106},[96,81033,81034],{"class":98,"line":1732},[96,81035,81036],{"class":106},"    \u002F\u002F     16             8                    24\n",[96,81038,81039],{"class":98,"line":1737},[96,81040,81041],{"class":106},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[96,81043,81044],{"class":98,"line":1742},[96,81045,80879],{"class":106},[96,81047,81048],{"class":98,"line":1747},[96,81049,80884],{"class":106},[96,81051,81052],{"class":98,"line":1761},[96,81053,80889],{"class":106},[96,81055,81056,81058,81060],{"class":98,"line":1766},[96,81057,52396],{"class":106},[96,81059,51792],{"class":51279},[96,81061,51286],{"class":106},[96,81063,81064,81066,81068],{"class":98,"line":2560},[96,81065,51764],{"class":106},[96,81067,51779],{"class":51279},[96,81069,51286],{"class":106},[22894,81071,81073],{"id":81072},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[14,81075,81076],{},[1445,81077],{"alt":18,"src":81078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[87,81080,81082],{"className":53046,"code":81081,"language":53048,"meta":18,"style":18},"\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",[93,81083,81084,81092,81100,81105,81110,81115,81120,81124,81129,81134,81139,81144,81149,81154,81158,81163,81167,81172,81180],{"__ignoreMap":18},[96,81085,81086,81088,81090],{"class":98,"line":99},[96,81087,1017],{"class":106},[96,81089,51779],{"class":51279},[96,81091,51286],{"class":106},[96,81093,81094,81096,81098],{"class":98,"line":19},[96,81095,52123],{"class":106},[96,81097,51792],{"class":51279},[96,81099,51286],{"class":106},[96,81101,81102],{"class":98,"line":1162},[96,81103,81104],{"class":106},"    const arr = [\n",[96,81106,81107],{"class":98,"line":1177},[96,81108,81109],{"class":106},"      { name: '张三', salary: 10000 },\n",[96,81111,81112],{"class":98,"line":1183},[96,81113,81114],{"class":106},"      { name: '李四', salary: 10000 },\n",[96,81116,81117],{"class":98,"line":1197},[96,81118,81119],{"class":106},"      { name: '王五', salary: 10000 }\n",[96,81121,81122],{"class":98,"line":1203},[96,81123,53088],{"class":106},[96,81125,81126],{"class":98,"line":1294},[96,81127,81128],{"class":106},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[96,81130,81131],{"class":98,"line":1300},[96,81132,81133],{"class":106},"    \u002F\u002F prev是累计值\n",[96,81135,81136],{"class":98,"line":1312},[96,81137,81138],{"class":106},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[96,81140,81141],{"class":98,"line":1595},[96,81142,81143],{"class":106},"    console.log(total)\n",[96,81145,81146],{"class":98,"line":1600},[96,81147,81148],{"class":106},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[96,81150,81151],{"class":98,"line":1606},[96,81152,81153],{"class":106},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[96,81155,81156],{"class":98,"line":1611},[96,81157,81148],{"class":106},[96,81159,81160],{"class":98,"line":1625},[96,81161,81162],{"class":106},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[96,81164,81165],{"class":98,"line":1630},[96,81166,81148],{"class":106},[96,81168,81169],{"class":98,"line":1636},[96,81170,81171],{"class":106},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[96,81173,81174,81176,81178],{"class":98,"line":1657},[96,81175,52396],{"class":106},[96,81177,51792],{"class":51279},[96,81179,51286],{"class":106},[96,81181,81182,81184,81186],{"class":98,"line":1662},[96,81183,51764],{"class":106},[96,81185,51779],{"class":51279},[96,81187,51286],{"class":106},[22894,81189,81191],{"id":81190},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[14,81193,81194],{},[1445,81195],{"alt":18,"src":81196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[14,81198,81199],{},[1445,81200],{"alt":18,"src":81201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[50,81203,81204],{},[53,81205,81206],{},"find()",[14,81208,81209],{},"循环查找，找到第一个就ok",[14,81211,81212],{},[345,81213,81216],{"href":81214,"rel":81215},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[23850],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[87,81218,81220],{"className":50612,"code":81219,"language":50614,"meta":18,"style":18},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[93,81221,81222,81227,81232],{"__ignoreMap":18},[96,81223,81224],{"class":98,"line":99},[96,81225,81226],{"class":106},"const array1 = [5, 12, 8, 130, 44]\n",[96,81228,81229],{"class":98,"line":19},[96,81230,81231],{"class":106},"const found = array1.find((element) => element > 10)\n",[96,81233,81234],{"class":98,"line":1162},[96,81235,81236],{"class":106},"console.log(found)  \u002F\u002F12\n",[14,81238,81239,81241,81242,81247,81248,81251,81252,81254,81255,81260,81261,81263,81264,81266,81267,81269,81270],{},[93,81240,81206],{}," 方法是一个",[345,81243,81246],{"href":81244,"rel":81245},"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",[23850],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[93,81249,81250],{},"callbackFn"," 函数，直到 ",[93,81253,81250],{}," 返回一个",[345,81256,81259],{"href":81257,"rel":81258},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[23850],"真值","。然后 ",[93,81262,81206],{}," 返回该元素并停止迭代数组。如果 ",[93,81265,81250],{}," 从未返回真值，则 ",[93,81268,81206],{}," 返回 ",[93,81271,81272],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[87,81274,81276],{"className":53046,"code":81275,"language":53048,"meta":18,"style":18},"\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",[93,81277,81278,81286,81294,81299,81304,81309,81313,81318,81323,81327,81332,81337,81341,81345,81350,81355,81359,81363,81368,81373,81378,81383,81388,81392,81397,81402,81407,81412,81416,81421,81429],{"__ignoreMap":18},[96,81279,81280,81282,81284],{"class":98,"line":99},[96,81281,1017],{"class":106},[96,81283,51779],{"class":51279},[96,81285,51286],{"class":106},[96,81287,81288,81290,81292],{"class":98,"line":19},[96,81289,52123],{"class":106},[96,81291,51792],{"class":51279},[96,81293,51286],{"class":106},[96,81295,81296],{"class":98,"line":1162},[96,81297,81298],{"class":106},"    const arr = ['red', 'blue', 'green']\n",[96,81300,81301],{"class":98,"line":1177},[96,81302,81303],{"class":106},"    const found = arr.find(item => item === 'pink')\n",[96,81305,81306],{"class":98,"line":1183},[96,81307,81308],{"class":106},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[96,81310,81311],{"class":98,"line":1197},[96,81312,2383],{"emptyLinePlaceholder":23},[96,81314,81315],{"class":98,"line":1203},[96,81316,81317],{"class":106},"    \u002F\u002F 使用场景，用于查找数据\n",[96,81319,81320],{"class":98,"line":1294},[96,81321,81322],{"class":106},"    const arr1 = [\n",[96,81324,81325],{"class":98,"line":1300},[96,81326,79365],{"class":106},[96,81328,81329],{"class":98,"line":1312},[96,81330,81331],{"class":106},"        name: '小米',\n",[96,81333,81334],{"class":98,"line":1595},[96,81335,81336],{"class":106},"        price: 1999\n",[96,81338,81339],{"class":98,"line":1600},[96,81340,77871],{"class":106},[96,81342,81343],{"class":98,"line":1606},[96,81344,79365],{"class":106},[96,81346,81347],{"class":98,"line":1611},[96,81348,81349],{"class":106},"        name: '华为',\n",[96,81351,81352],{"class":98,"line":1625},[96,81353,81354],{"class":106},"        price: 3999\n",[96,81356,81357],{"class":98,"line":1630},[96,81358,52377],{"class":106},[96,81360,81361],{"class":98,"line":1636},[96,81362,53088],{"class":106},[96,81364,81365],{"class":98,"line":1657},[96,81366,81367],{"class":106},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[96,81369,81370],{"class":98,"line":1662},[96,81371,81372],{"class":106},"    \u002F\u002F const found1 = arr1.find(item => {\n",[96,81374,81375],{"class":98,"line":1676},[96,81376,81377],{"class":106},"    \u002F\u002F   if (item.name === '小米') {\n",[96,81379,81380],{"class":98,"line":1681},[96,81381,81382],{"class":106},"    \u002F\u002F     return item\n",[96,81384,81385],{"class":98,"line":1710},[96,81386,81387],{"class":106},"    \u002F\u002F   }\n",[96,81389,81390],{"class":98,"line":1715},[96,81391,63269],{"class":106},[96,81393,81394],{"class":98,"line":1732},[96,81395,81396],{"class":106},"    \u002F\u002F 另一种写法\n",[96,81398,81399],{"class":98,"line":1737},[96,81400,81401],{"class":106},"    const found1 = arr1.find(item => {\n",[96,81403,81404],{"class":98,"line":1742},[96,81405,81406],{"class":106},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[96,81408,81409],{"class":98,"line":1747},[96,81410,81411],{"class":106},"      return item.name = '小米'\n",[96,81413,81414],{"class":98,"line":1761},[96,81415,33440],{"class":106},[96,81417,81418],{"class":98,"line":1766},[96,81419,81420],{"class":106},"    console.log(found1)\n",[96,81422,81423,81425,81427],{"class":98,"line":2560},[96,81424,52396],{"class":106},[96,81426,51792],{"class":51279},[96,81428,51286],{"class":106},[96,81430,81431,81433,81435],{"class":98,"line":2574},[96,81432,51764],{"class":106},[96,81434,51779],{"class":51279},[96,81436,51286],{"class":106},[14,81438,81439],{},[1445,81440],{"alt":18,"src":81441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[14,81443,81444],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[50,81446,81447],{"start":19},[53,81448,81449],{},"every()返回的是布尔值",[14,81451,81452],{},[345,81453,81456],{"href":81454,"rel":81455},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[23850],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[14,81458,81459],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[14,81461,81462],{},"some是只有有一个就没问题",[14,81464,81465],{},"every是必须全是才行",[87,81467,81471],{"className":81468,"code":81469,"language":81470,"meta":18,"style":18},"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",[93,81472,81473,81489,81503,81507,81516],{"__ignoreMap":18},[96,81474,81475,81477,81480,81482,81484,81487],{"class":98,"line":99},[96,81476,54428],{"class":102},[96,81478,81479],{"class":106}," isBigEnough(element, ",[96,81481,74037],{"class":102},[96,81483,12419],{"class":106},[96,81485,81486],{"class":102},"array",[96,81488,12426],{"class":106},[96,81490,81491,81494,81497,81499,81501],{"class":98,"line":19},[96,81492,81493],{"class":102},"  return",[96,81495,81496],{"class":106}," element ",[96,81498,1693],{"class":102},[96,81500,2021],{"class":155},[96,81502,1273],{"class":106},[96,81504,81505],{"class":98,"line":1162},[96,81506,1548],{"class":106},[96,81508,81509,81512,81514],{"class":98,"line":1177},[96,81510,81511],{"class":106},"[12, 5, 8, 130, 44].every(isBigEnough); ",[96,81513,33308],{"class":102},[96,81515,54495],{"class":106},[96,81517,81518,81521,81523],{"class":98,"line":1183},[96,81519,81520],{"class":106},"[12, 54, 18, 130, 44].every(isBigEnough); ",[96,81522,33308],{"class":102},[96,81524,57919],{"class":106},[87,81526,81528],{"className":53046,"code":81527,"language":53048,"meta":18,"style":18},"\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",[93,81529,81530,81538,81546,81551,81555,81560,81565,81573],{"__ignoreMap":18},[96,81531,81532,81534,81536],{"class":98,"line":99},[96,81533,1017],{"class":106},[96,81535,51779],{"class":51279},[96,81537,51286],{"class":106},[96,81539,81540,81542,81544],{"class":98,"line":19},[96,81541,52123],{"class":106},[96,81543,51792],{"class":51279},[96,81545,51286],{"class":106},[96,81547,81548],{"class":98,"line":1162},[96,81549,81550],{"class":106},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[96,81552,81553],{"class":98,"line":1177},[96,81554,78301],{"class":106},[96,81556,81557],{"class":98,"line":1183},[96,81558,81559],{"class":106},"    const flag = arr.every(item => item >= 10)\n",[96,81561,81562],{"class":98,"line":1197},[96,81563,81564],{"class":106},"    console.log(flag)    \u002F\u002Ftrue\n",[96,81566,81567,81569,81571],{"class":98,"line":1203},[96,81568,52396],{"class":106},[96,81570,51792],{"class":51279},[96,81572,51286],{"class":106},[96,81574,81575,81577,81579],{"class":98,"line":1294},[96,81576,51764],{"class":106},[96,81578,51779],{"class":51279},[96,81580,51286],{"class":106},[87,81582,81584],{"className":53046,"code":81583,"language":53048,"meta":18,"style":18},"\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",[93,81585,81586,81594,81602,81606,81611,81616,81621,81629],{"__ignoreMap":18},[96,81587,81588,81590,81592],{"class":98,"line":99},[96,81589,1017],{"class":106},[96,81591,51779],{"class":51279},[96,81593,51286],{"class":106},[96,81595,81596,81598,81600],{"class":98,"line":19},[96,81597,52123],{"class":106},[96,81599,51792],{"class":51279},[96,81601,51286],{"class":106},[96,81603,81604],{"class":98,"line":1162},[96,81605,81550],{"class":106},[96,81607,81608],{"class":98,"line":1177},[96,81609,81610],{"class":106},"    const arr = [10, 0, 5]\n",[96,81612,81613],{"class":98,"line":1183},[96,81614,81615],{"class":106},"    const flag = arr.some(item => item >= 10)\n",[96,81617,81618],{"class":98,"line":1197},[96,81619,81620],{"class":106},"    console.log(flag)   \u002F\u002Ftrue\n",[96,81622,81623,81625,81627],{"class":98,"line":1203},[96,81624,52396],{"class":106},[96,81626,51792],{"class":51279},[96,81628,51286],{"class":106},[96,81630,81631,81633,81635],{"class":98,"line":1294},[96,81632,51764],{"class":106},[96,81634,51779],{"class":51279},[96,81636,51286],{"class":106},[22894,81638,81640],{"id":81639},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[14,81642,81643],{},[1445,81644],{"alt":18,"src":81645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[87,81647,81649],{"className":50612,"code":81648,"language":50614,"meta":18,"style":18},"\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",[93,81650,81651,81661,81675,81679,81687,81701,81721,81733,81741,81748,81760,81772,81784,81796,81806,81816,81820,81828,81836,81840,81848,81860,81868,81890,81895,81900,81933,81941,81949,81953],{"__ignoreMap":18},[96,81652,81653,81655,81657,81659],{"class":98,"line":99},[96,81654,51276],{"class":106},[96,81656,51280],{"class":51279},[96,81658,51283],{"class":1946},[96,81660,51286],{"class":106},[96,81662,81663,81665,81667,81669,81671,81673],{"class":98,"line":19},[96,81664,1017],{"class":106},[96,81666,50614],{"class":51279},[96,81668,51295],{"class":1946},[96,81670,152],{"class":106},[96,81672,51300],{"class":211},[96,81674,51286],{"class":106},[96,81676,81677],{"class":98,"line":1162},[96,81678,2383],{"emptyLinePlaceholder":23},[96,81680,81681,81683,81685],{"class":98,"line":1177},[96,81682,1017],{"class":106},[96,81684,51313],{"class":51279},[96,81686,51286],{"class":106},[96,81688,81689,81691,81693,81695,81697,81699],{"class":98,"line":1183},[96,81690,52123],{"class":106},[96,81692,51323],{"class":51279},[96,81694,51326],{"class":1946},[96,81696,152],{"class":106},[96,81698,51331],{"class":211},[96,81700,51286],{"class":106},[96,81702,81703,81705,81707,81709,81711,81713,81715,81717,81719],{"class":98,"line":1197},[96,81704,52123],{"class":106},[96,81706,51323],{"class":51279},[96,81708,14904],{"class":1946},[96,81710,152],{"class":106},[96,81712,51370],{"class":211},[96,81714,51350],{"class":1946},[96,81716,152],{"class":106},[96,81718,51377],{"class":211},[96,81720,51286],{"class":106},[96,81722,81723,81725,81727,81729,81731],{"class":98,"line":1203},[96,81724,52123],{"class":106},[96,81726,51386],{"class":51279},[96,81728,51389],{"class":106},[96,81730,51386],{"class":51279},[96,81732,51286],{"class":106},[96,81734,81735,81737,81739],{"class":98,"line":1294},[96,81736,52123],{"class":106},[96,81738,5110],{"class":51279},[96,81740,51286],{"class":106},[96,81742,81743,81746],{"class":98,"line":1300},[96,81744,81745],{"class":51279},"    div",[96,81747,15556],{"class":106},[96,81749,81750,81752,81754,81756,81758],{"class":98,"line":1312},[96,81751,54750],{"class":155},[96,81753,51416],{"class":106},[96,81755,1705],{"class":155},[96,81757,51471],{"class":102},[96,81759,1273],{"class":106},[96,81761,81762,81764,81766,81768,81770],{"class":98,"line":1595},[96,81763,54764],{"class":155},[96,81765,51416],{"class":106},[96,81767,508],{"class":155},[96,81769,51471],{"class":102},[96,81771,1273],{"class":106},[96,81773,81774,81776,81778,81780,81782],{"class":98,"line":1600},[96,81775,57338],{"class":155},[96,81777,51416],{"class":106},[96,81779,508],{"class":155},[96,81781,51471],{"class":102},[96,81783,1273],{"class":106},[96,81785,81786,81788,81790,81792,81794],{"class":98,"line":1606},[96,81787,65112],{"class":155},[96,81789,51416],{"class":106},[96,81791,605],{"class":155},[96,81793,51471],{"class":102},[96,81795,1273],{"class":106},[96,81797,81798,81800,81802,81804],{"class":98,"line":1611},[96,81799,57265],{"class":155},[96,81801,51416],{"class":106},[96,81803,51571],{"class":155},[96,81805,1273],{"class":106},[96,81807,81808,81810,81812,81814],{"class":98,"line":1625},[96,81809,54863],{"class":155},[96,81811,51416],{"class":106},[96,81813,51624],{"class":155},[96,81815,1273],{"class":106},[96,81817,81818],{"class":98,"line":1630},[96,81819,2170],{"class":106},[96,81821,81822,81824,81826],{"class":98,"line":1636},[96,81823,52396],{"class":106},[96,81825,5110],{"class":51279},[96,81827,51286],{"class":106},[96,81829,81830,81832,81834],{"class":98,"line":1657},[96,81831,51764],{"class":106},[96,81833,51313],{"class":51279},[96,81835,51286],{"class":106},[96,81837,81838],{"class":98,"line":1662},[96,81839,2383],{"emptyLinePlaceholder":23},[96,81841,81842,81844,81846],{"class":98,"line":1676},[96,81843,1017],{"class":106},[96,81845,51779],{"class":51279},[96,81847,51286],{"class":106},[96,81849,81850,81852,81854,81856,81858],{"class":98,"line":1681},[96,81851,52123],{"class":106},[96,81853,51590],{"class":51279},[96,81855,55293],{"class":106},[96,81857,51590],{"class":51279},[96,81859,51286],{"class":106},[96,81861,81862,81864,81866],{"class":98,"line":1710},[96,81863,52123],{"class":106},[96,81865,51792],{"class":51279},[96,81867,51286],{"class":106},[96,81869,81870,81872,81875,81877,81880,81883,81885,81888],{"class":98,"line":1715},[96,81871,11205],{"class":102},[96,81873,81874],{"class":155}," spec",[96,81876,13548],{"class":102},[96,81878,81879],{"class":106}," { size: ",[96,81881,81882],{"class":211},"'40cm*40cm'",[96,81884,55443],{"class":106},[96,81886,81887],{"class":211},"'黑色'",[96,81889,55583],{"class":106},[96,81891,81892],{"class":98,"line":1732},[96,81893,81894],{"class":165},"    \u002F\u002F const arr = Object.values(spec)\n",[96,81896,81897],{"class":98,"line":1737},[96,81898,81899],{"class":165},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[96,81901,81902,81904,81906,81908,81911,81913,81915,81918,81921,81924,81926,81928,81931],{"class":98,"line":1742},[96,81903,52386],{"class":106},[96,81905,54378],{"class":1946},[96,81907,107],{"class":106},[96,81909,81910],{"class":211},"'div'",[96,81912,74228],{"class":106},[96,81914,152],{"class":102},[96,81916,81917],{"class":106}," Object.",[96,81919,81920],{"class":1946},"values",[96,81922,81923],{"class":106},"(spec).",[96,81925,74202],{"class":1946},[96,81927,107],{"class":106},[96,81929,81930],{"class":211},"'\u002F'",[96,81932,113],{"class":106},[96,81934,81935,81937,81939],{"class":98,"line":1747},[96,81936,52396],{"class":106},[96,81938,51792],{"class":51279},[96,81940,51286],{"class":106},[96,81942,81943,81945,81947],{"class":98,"line":1761},[96,81944,51764],{"class":106},[96,81946,51779],{"class":51279},[96,81948,51286],{"class":106},[96,81950,81951],{"class":98,"line":1766},[96,81952,2383],{"emptyLinePlaceholder":23},[96,81954,81955,81957,81959],{"class":98,"line":2560},[96,81956,51764],{"class":106},[96,81958,50614],{"class":51279},[96,81960,51286],{"class":106},[14,81962,81963],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[22894,81965,81967],{"id":81966},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[14,81969,81970],{},"静态方法，将伪数组转换为真数组",[14,81972,81973],{},[1445,81974],{"alt":18,"src":81975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[87,81977,81979],{"className":53046,"code":81978,"language":53048,"meta":18,"style":18},"\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",[93,81980,81981,81989,81997,82009,82021,82033,82041,82049,82054,82059,82064,82069,82077],{"__ignoreMap":18},[96,81982,81983,81985,81987],{"class":98,"line":99},[96,81984,1017],{"class":106},[96,81986,51779],{"class":51279},[96,81988,51286],{"class":106},[96,81990,81991,81993,81995],{"class":98,"line":19},[96,81992,52123],{"class":106},[96,81994,1114],{"class":51279},[96,81996,51286],{"class":106},[96,81998,81999,82001,82003,82005,82007],{"class":98,"line":1162},[96,82000,51320],{"class":106},[96,82002,53],{"class":51279},[96,82004,55293],{"class":106},[96,82006,53],{"class":51279},[96,82008,51286],{"class":106},[96,82010,82011,82013,82015,82017,82019],{"class":98,"line":1177},[96,82012,51320],{"class":106},[96,82014,53],{"class":51279},[96,82016,55293],{"class":106},[96,82018,53],{"class":51279},[96,82020,51286],{"class":106},[96,82022,82023,82025,82027,82029,82031],{"class":98,"line":1183},[96,82024,51320],{"class":106},[96,82026,53],{"class":51279},[96,82028,55293],{"class":106},[96,82030,53],{"class":51279},[96,82032,51286],{"class":106},[96,82034,82035,82037,82039],{"class":98,"line":1197},[96,82036,52396],{"class":106},[96,82038,1114],{"class":51279},[96,82040,51286],{"class":106},[96,82042,82043,82045,82047],{"class":98,"line":1203},[96,82044,52123],{"class":106},[96,82046,51792],{"class":51279},[96,82048,51286],{"class":106},[96,82050,82051],{"class":98,"line":1294},[96,82052,82053],{"class":106},"    const lis = document.querySelectorAll('li')\n",[96,82055,82056],{"class":98,"line":1300},[96,82057,82058],{"class":106},"    const liss = Array.from(lis)\n",[96,82060,82061],{"class":98,"line":1312},[96,82062,82063],{"class":106},"    liss.pop()\n",[96,82065,82066],{"class":98,"line":1595},[96,82067,82068],{"class":106},"    console.log(liss)\n",[96,82070,82071,82073,82075],{"class":98,"line":1600},[96,82072,52396],{"class":106},[96,82074,51792],{"class":51279},[96,82076,51286],{"class":106},[96,82078,82079,82081,82083],{"class":98,"line":1606},[96,82080,51764],{"class":106},[96,82082,51779],{"class":51279},[96,82084,51286],{"class":106},[14,82086,82087],{},[1445,82088],{"alt":18,"src":82089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[21982,82091,82093],{"id":82092},"_41053-string","4.10.5.3 String",[14,82095,82096],{},[1445,82097],{"alt":18,"src":82098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[22894,82100,82102],{"id":82101},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[87,82104,82106],{"className":53046,"code":82105,"language":53048,"meta":18,"style":18},"\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",[93,82107,82108,82116,82124,82129,82134,82139,82143,82148,82153,82158,82166],{"__ignoreMap":18},[96,82109,82110,82112,82114],{"class":98,"line":99},[96,82111,1017],{"class":106},[96,82113,51779],{"class":51279},[96,82115,51286],{"class":106},[96,82117,82118,82120,82122],{"class":98,"line":19},[96,82119,52123],{"class":106},[96,82121,51792],{"class":51279},[96,82123,51286],{"class":106},[96,82125,82126],{"class":98,"line":1162},[96,82127,82128],{"class":106},"    \u002F\u002F 把字符串转化为数组\n",[96,82130,82131],{"class":98,"line":1177},[96,82132,82133],{"class":106},"    const str = 'pink,red'\n",[96,82135,82136],{"class":98,"line":1183},[96,82137,82138],{"class":106},"    const arr = str.split(',')\n",[96,82140,82141],{"class":98,"line":1197},[96,82142,80617],{"class":106},[96,82144,82145],{"class":98,"line":1203},[96,82146,82147],{"class":106},"    const str1 = '2025-8-25'\n",[96,82149,82150],{"class":98,"line":1294},[96,82151,82152],{"class":106},"    const arr1 = str1.split('-')\n",[96,82154,82155],{"class":98,"line":1300},[96,82156,82157],{"class":106},"    console.log(arr1)\n",[96,82159,82160,82162,82164],{"class":98,"line":1312},[96,82161,52396],{"class":106},[96,82163,51792],{"class":51279},[96,82165,51286],{"class":106},[96,82167,82168,82170,82172],{"class":98,"line":1595},[96,82169,51764],{"class":106},[96,82171,51779],{"class":51279},[96,82173,51286],{"class":106},[22894,82175,82177],{"id":82176},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[14,82179,5165],{},[14,82181,82182],{},"substring(indexStart)",[14,82184,82185],{},"substring(indexStart, indexEnd)",[1114,82187,82188,82199,82211,82221],{},[53,82189,82190,82191,82194,82195,82198],{},"如果省略了 ",[93,82192,82193],{},"indexEnd","，则 ",[93,82196,82197],{},"substring()"," 提取字符直到字符串的末尾",[53,82200,82201,82202,82205,82206,82194,82208,82210],{},"如果 ",[93,82203,82204],{},"indexStart"," 等于 ",[93,82207,82193],{},[93,82209,82197],{}," 返回一个空字符串",[53,82212,82201,82213,82215,82216,82194,82218,82220],{},[93,82214,82204],{}," 大于 ",[93,82217,82193],{},[93,82219,82197],{}," 的效果就像交换了这两个参数一样",[53,82222,82223],{},"结束的索引号不包含想要截取的部分",[87,82225,82227],{"className":81468,"code":82226,"language":81470,"meta":18,"style":18},"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",[93,82228,82229,82241,82245,82279,82309,82313,82344,82348,82375,82405,82435,82439,82470],{"__ignoreMap":18},[96,82230,82231,82234,82236,82239],{"class":98,"line":99},[96,82232,82233],{"class":106},"const anyString ",[96,82235,152],{"class":102},[96,82237,82238],{"class":211}," \"Mozilla\"",[96,82240,1273],{"class":106},[96,82242,82243],{"class":98,"line":19},[96,82244,2383],{"emptyLinePlaceholder":23},[96,82246,82247,82250,82252,82254,82256,82259,82261,82264,82266,82268,82270,82272,82274,82276],{"class":98,"line":1162},[96,82248,82249],{"class":155},"console",[96,82251,665],{"class":106},[96,82253,58226],{"class":155},[96,82255,107],{"class":106},[96,82257,82258],{"class":155},"anyString",[96,82260,665],{"class":106},[96,82262,82263],{"class":155},"substring",[96,82265,107],{"class":106},[96,82267,298],{"class":155},[96,82269,12419],{"class":106},[96,82271,324],{"class":155},[96,82273,75232],{"class":106},[96,82275,33308],{"class":102},[96,82277,82278],{"class":211}," 'M'\n",[96,82280,82281,82283,82285,82287,82289,82291,82293,82295,82297,82299,82301,82303,82305,82307],{"class":98,"line":1177},[96,82282,82249],{"class":155},[96,82284,665],{"class":106},[96,82286,58226],{"class":155},[96,82288,107],{"class":106},[96,82290,82258],{"class":155},[96,82292,665],{"class":106},[96,82294,82263],{"class":155},[96,82296,107],{"class":106},[96,82298,324],{"class":155},[96,82300,12419],{"class":106},[96,82302,298],{"class":155},[96,82304,75232],{"class":106},[96,82306,33308],{"class":102},[96,82308,82278],{"class":211},[96,82310,82311],{"class":98,"line":1183},[96,82312,2383],{"emptyLinePlaceholder":23},[96,82314,82315,82317,82319,82321,82323,82325,82327,82329,82331,82333,82335,82337,82339,82341],{"class":98,"line":1197},[96,82316,82249],{"class":155},[96,82318,665],{"class":106},[96,82320,58226],{"class":155},[96,82322,107],{"class":106},[96,82324,82258],{"class":155},[96,82326,665],{"class":106},[96,82328,82263],{"class":155},[96,82330,107],{"class":106},[96,82332,298],{"class":155},[96,82334,12419],{"class":106},[96,82336,451],{"class":155},[96,82338,75232],{"class":106},[96,82340,33308],{"class":102},[96,82342,82343],{"class":211}," 'Mozill'\n",[96,82345,82346],{"class":98,"line":1203},[96,82347,2383],{"emptyLinePlaceholder":23},[96,82349,82350,82352,82354,82356,82358,82360,82362,82364,82366,82368,82370,82372],{"class":98,"line":1294},[96,82351,82249],{"class":155},[96,82353,665],{"class":106},[96,82355,58226],{"class":155},[96,82357,107],{"class":106},[96,82359,82258],{"class":155},[96,82361,665],{"class":106},[96,82363,82263],{"class":155},[96,82365,107],{"class":106},[96,82367,400],{"class":155},[96,82369,75232],{"class":106},[96,82371,33308],{"class":102},[96,82373,82374],{"class":211}," 'lla'\n",[96,82376,82377,82379,82381,82383,82385,82387,82389,82391,82393,82395,82397,82399,82401,82403],{"class":98,"line":1300},[96,82378,82249],{"class":155},[96,82380,665],{"class":106},[96,82382,58226],{"class":155},[96,82384,107],{"class":106},[96,82386,82258],{"class":155},[96,82388,665],{"class":106},[96,82390,82263],{"class":155},[96,82392,107],{"class":106},[96,82394,400],{"class":155},[96,82396,12419],{"class":106},[96,82398,476],{"class":155},[96,82400,75288],{"class":106},[96,82402,33308],{"class":102},[96,82404,82374],{"class":211},[96,82406,82407,82409,82411,82413,82415,82417,82419,82421,82423,82425,82427,82429,82431,82433],{"class":98,"line":1312},[96,82408,82249],{"class":155},[96,82410,665],{"class":106},[96,82412,58226],{"class":155},[96,82414,107],{"class":106},[96,82416,82258],{"class":155},[96,82418,665],{"class":106},[96,82420,82263],{"class":155},[96,82422,107],{"class":106},[96,82424,476],{"class":155},[96,82426,12419],{"class":106},[96,82428,400],{"class":155},[96,82430,75232],{"class":106},[96,82432,33308],{"class":102},[96,82434,82374],{"class":211},[96,82436,82437],{"class":98,"line":1595},[96,82438,2383],{"emptyLinePlaceholder":23},[96,82440,82441,82443,82445,82447,82449,82451,82453,82455,82457,82459,82461,82463,82465,82467],{"class":98,"line":1600},[96,82442,82249],{"class":155},[96,82444,665],{"class":106},[96,82446,58226],{"class":155},[96,82448,107],{"class":106},[96,82450,82258],{"class":155},[96,82452,665],{"class":106},[96,82454,82263],{"class":155},[96,82456,107],{"class":106},[96,82458,298],{"class":155},[96,82460,12419],{"class":106},[96,82462,476],{"class":155},[96,82464,75232],{"class":106},[96,82466,33308],{"class":102},[96,82468,82469],{"class":211}," 'Mozilla'\n",[96,82471,82472,82474,82476,82478,82480,82482,82484,82486,82488,82490,82492,82494,82496,82498],{"class":98,"line":1606},[96,82473,82249],{"class":155},[96,82475,665],{"class":106},[96,82477,58226],{"class":155},[96,82479,107],{"class":106},[96,82481,82258],{"class":155},[96,82483,665],{"class":106},[96,82485,82263],{"class":155},[96,82487,107],{"class":106},[96,82489,298],{"class":155},[96,82491,12419],{"class":106},[96,82493,553],{"class":155},[96,82495,75232],{"class":106},[96,82497,33308],{"class":102},[96,82499,82469],{"class":211},[22894,82501,82503],{"id":82502},"_410533-startswith","4.10.5.3.3 startsWith",[14,82505,82506,82509,82510,82515,82516,82518,82519],{},[93,82507,82508],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[256,82511,82512],{},[93,82513,82514],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[93,82517,1345],{}," 或 ",[93,82520,65999],{},[87,82522,82524],{"className":77474,"code":82523,"language":77476,"meta":18,"style":18},"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",[93,82525,82526,82538,82557,82562,82582],{"__ignoreMap":18},[96,82527,82528,82530,82533,82535],{"class":98,"line":99},[96,82529,6776],{"class":102},[96,82531,82532],{"class":106}," str1 ",[96,82534,152],{"class":102},[96,82536,82537],{"class":211}," \"Saturday night plans\"\n",[96,82539,82540,82542,82544,82547,82550,82552,82555],{"class":98,"line":19},[96,82541,77511],{"class":106},[96,82543,58226],{"class":1946},[96,82545,82546],{"class":106},"(str1.",[96,82548,82549],{"class":1946},"startsWith",[96,82551,107],{"class":106},[96,82553,82554],{"class":211},"\"Sat\"",[96,82556,30476],{"class":106},[96,82558,82559],{"class":98,"line":1162},[96,82560,82561],{"class":165},"\u002F\u002F Expected output: true\n",[96,82563,82564,82566,82568,82570,82572,82574,82576,82578,82580],{"class":98,"line":1177},[96,82565,77511],{"class":106},[96,82567,58226],{"class":1946},[96,82569,82546],{"class":106},[96,82571,82549],{"class":1946},[96,82573,107],{"class":106},[96,82575,82554],{"class":211},[96,82577,12419],{"class":106},[96,82579,178],{"class":155},[96,82581,30476],{"class":106},[96,82583,82584],{"class":98,"line":1183},[96,82585,82586],{"class":165},"\u002F\u002F Expected output: false\n",[87,82588,82590],{"className":50612,"code":82589,"language":50614,"meta":18,"style":18},"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",[93,82591,82592,82597,82602,82606,82611,82616],{"__ignoreMap":18},[96,82593,82594],{"class":98,"line":99},[96,82595,82596],{"class":106},"startsWith(searchString)\n",[96,82598,82599],{"class":98,"line":19},[96,82600,82601],{"class":106},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[96,82603,82604],{"class":98,"line":1162},[96,82605,2383],{"emptyLinePlaceholder":23},[96,82607,82608],{"class":98,"line":1177},[96,82609,82610],{"class":106},"const str3 = 'pink老师上课中'\n",[96,82612,82613],{"class":98,"line":1183},[96,82614,82615],{"class":106},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[96,82617,82618],{"class":98,"line":1197},[96,82619,82620],{"class":106},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[22894,82622,82624],{"id":82623},"_410534-includes","4.10.5.3.4 includes",[14,82626,82627],{},"includes(searchString) includes(searchString, position)",[50,82629,82630],{},[53,82631,82632],{},"searchString:",[14,82634,82635,82636,82638,82639,82644,82645,82650,82651,21484,82654,82657,82658,82661],{},"一个要在 ",[93,82637,1282],{}," 中查找的字符串。",[345,82640,82643],{"href":82641,"rel":82642},"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",[23850],"不能是正则表达式","。所有非正则表达式的值都会被",[345,82646,82649],{"href":82647,"rel":82648},"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",[23850],"强制转换为字符串","，因此如果该参数被省略或传入 ",[93,82652,82653],{},"undefined",[93,82655,82656],{},"includes()"," 方法会在字符串中搜索 ",[93,82659,82660],{},"\"undefined\"","，这通常不是你想要的",[50,82663,82664],{"start":19},[53,82665,82666,966],{},[93,82667,82668],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[14,82670,82671,82672,82675,82676],{},"在字符串中开始搜索 ",[93,82673,82674],{},"searchString"," 的位置。默认值为 ",[93,82677,298],{},[50,82679,82680],{"start":1162},[53,82681,82682],{},"返回值：",[14,82684,82685,82686,82688,82689,82693,82694],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[93,82687,82674],{}," 为空字符串的情况），则返回 ",[256,82690,82691],{},[93,82692,1345],{}," ，否则返回 ",[256,82695,82696],{},[93,82697,65999],{},[50,82699,82700],{"start":1177},[53,82701,82702],{},"异常：",[14,82704,82201,82705,13779,82707,82711],{},[93,82706,82674],{},[345,82708,82710],{"href":82641,"rel":82709},[23850],"是一个正则表达式","，则会抛出",[14,82713,82714],{},"只要是有就是true，不需要非得以谁开头结尾",[87,82716,82718],{"className":77474,"code":82717,"language":77476,"meta":18,"style":18},"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",[93,82719,82720,82731,82754,82773,82793,82815,82834],{"__ignoreMap":18},[96,82721,82722,82724,82726,82728],{"class":98,"line":99},[96,82723,6776],{"class":102},[96,82725,79754],{"class":106},[96,82727,152],{"class":102},[96,82729,82730],{"class":211}," \"To be, or not to be, that is the question.\"\n",[96,82732,82733,82735,82737,82740,82743,82745,82748,82751],{"class":98,"line":19},[96,82734,77511],{"class":106},[96,82736,58226],{"class":1946},[96,82738,82739],{"class":106},"(str.",[96,82741,82742],{"class":1946},"includes",[96,82744,107],{"class":106},[96,82746,82747],{"class":211},"\"To be\"",[96,82749,82750],{"class":106},"))",[96,82752,82753],{"class":165},"  \u002F\u002F true\n",[96,82755,82756,82758,82760,82762,82764,82766,82769,82771],{"class":98,"line":1162},[96,82757,77511],{"class":106},[96,82759,58226],{"class":1946},[96,82761,82739],{"class":106},[96,82763,82742],{"class":1946},[96,82765,107],{"class":106},[96,82767,82768],{"class":211},"\"question\"",[96,82770,82750],{"class":106},[96,82772,82753],{"class":165},[96,82774,82775,82777,82779,82781,82783,82785,82788,82790],{"class":98,"line":1177},[96,82776,77511],{"class":106},[96,82778,58226],{"class":1946},[96,82780,82739],{"class":106},[96,82782,82742],{"class":1946},[96,82784,107],{"class":106},[96,82786,82787],{"class":211},"\"nonexistent\"",[96,82789,82750],{"class":106},[96,82791,82792],{"class":165},"  \u002F\u002F false\n",[96,82794,82795,82797,82799,82801,82803,82805,82807,82809,82811,82813],{"class":98,"line":1183},[96,82796,77511],{"class":106},[96,82798,58226],{"class":1946},[96,82800,82739],{"class":106},[96,82802,82742],{"class":1946},[96,82804,107],{"class":106},[96,82806,82747],{"class":211},[96,82808,12419],{"class":106},[96,82810,324],{"class":155},[96,82812,82750],{"class":106},[96,82814,82792],{"class":165},[96,82816,82817,82819,82821,82823,82825,82827,82830,82832],{"class":98,"line":1197},[96,82818,77511],{"class":106},[96,82820,58226],{"class":1946},[96,82822,82739],{"class":106},[96,82824,82742],{"class":1946},[96,82826,107],{"class":106},[96,82828,82829],{"class":211},"\"TO BE\"",[96,82831,82750],{"class":106},[96,82833,82792],{"class":165},[96,82835,82836,82838,82840,82842,82844,82846,82848,82850],{"class":98,"line":1203},[96,82837,77511],{"class":106},[96,82839,58226],{"class":1946},[96,82841,82739],{"class":106},[96,82843,82742],{"class":1946},[96,82845,107],{"class":106},[96,82847,7636],{"class":211},[96,82849,82750],{"class":106},[96,82851,82753],{"class":165},[22894,82853,82855],{"id":82854},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[87,82857,82859],{"className":53046,"code":82858,"language":53048,"meta":18,"style":18},"\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",[93,82860,82861,82869,82877,82882,82887,82892,82897,82902,82910],{"__ignoreMap":18},[96,82862,82863,82865,82867],{"class":98,"line":99},[96,82864,1017],{"class":106},[96,82866,51779],{"class":51279},[96,82868,51286],{"class":106},[96,82870,82871,82873,82875],{"class":98,"line":19},[96,82872,52123],{"class":106},[96,82874,51792],{"class":51279},[96,82876,51286],{"class":106},[96,82878,82879],{"class":98,"line":1162},[96,82880,82881],{"class":106},"    const num = 10\n",[96,82883,82884],{"class":98,"line":1177},[96,82885,82886],{"class":106},"    \u002F\u002F 强制转换\n",[96,82888,82889],{"class":98,"line":1183},[96,82890,82891],{"class":106},"    console.log(String(num))\n",[96,82893,82894],{"class":98,"line":1197},[96,82895,82896],{"class":106},"    \u002F\u002F toString()方法转换\n",[96,82898,82899],{"class":98,"line":1203},[96,82900,82901],{"class":106},"    console.log(num.toString())\n",[96,82903,82904,82906,82908],{"class":98,"line":1294},[96,82905,52396],{"class":106},[96,82907,51792],{"class":51279},[96,82909,51286],{"class":106},[96,82911,82912,82914,82916],{"class":98,"line":1300},[96,82913,51764],{"class":106},[96,82915,51779],{"class":51279},[96,82917,51286],{"class":106},[22894,82919,82921],{"id":82920},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[14,82923,82924],{},[1445,82925],{"alt":18,"src":82926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[87,82928,82930],{"className":50612,"code":82929,"language":50614,"meta":18,"style":18},"\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",[93,82931,82932,82942,82956,82960,82968,82982,83002,83014,83022,83026,83034,83046,83054,83066,83071,83076,83081,83128,83144,83152,83160,83164],{"__ignoreMap":18},[96,82933,82934,82936,82938,82940],{"class":98,"line":99},[96,82935,51276],{"class":106},[96,82937,51280],{"class":51279},[96,82939,51283],{"class":1946},[96,82941,51286],{"class":106},[96,82943,82944,82946,82948,82950,82952,82954],{"class":98,"line":19},[96,82945,1017],{"class":106},[96,82947,50614],{"class":51279},[96,82949,51295],{"class":1946},[96,82951,152],{"class":106},[96,82953,51300],{"class":211},[96,82955,51286],{"class":106},[96,82957,82958],{"class":98,"line":1162},[96,82959,2383],{"emptyLinePlaceholder":23},[96,82961,82962,82964,82966],{"class":98,"line":1177},[96,82963,1017],{"class":106},[96,82965,51313],{"class":51279},[96,82967,51286],{"class":106},[96,82969,82970,82972,82974,82976,82978,82980],{"class":98,"line":1183},[96,82971,52123],{"class":106},[96,82973,51323],{"class":51279},[96,82975,51326],{"class":1946},[96,82977,152],{"class":106},[96,82979,51331],{"class":211},[96,82981,51286],{"class":106},[96,82983,82984,82986,82988,82990,82992,82994,82996,82998,83000],{"class":98,"line":1197},[96,82985,52123],{"class":106},[96,82987,51323],{"class":51279},[96,82989,14904],{"class":1946},[96,82991,152],{"class":106},[96,82993,51370],{"class":211},[96,82995,51350],{"class":1946},[96,82997,152],{"class":106},[96,82999,51377],{"class":211},[96,83001,51286],{"class":106},[96,83003,83004,83006,83008,83010,83012],{"class":98,"line":1203},[96,83005,52123],{"class":106},[96,83007,51386],{"class":51279},[96,83009,51389],{"class":106},[96,83011,51386],{"class":51279},[96,83013,51286],{"class":106},[96,83015,83016,83018,83020],{"class":98,"line":1294},[96,83017,51764],{"class":106},[96,83019,51313],{"class":51279},[96,83021,51286],{"class":106},[96,83023,83024],{"class":98,"line":1300},[96,83025,2383],{"emptyLinePlaceholder":23},[96,83027,83028,83030,83032],{"class":98,"line":1312},[96,83029,1017],{"class":106},[96,83031,51779],{"class":51279},[96,83033,51286],{"class":106},[96,83035,83036,83038,83040,83042,83044],{"class":98,"line":1595},[96,83037,52123],{"class":106},[96,83039,51590],{"class":51279},[96,83041,55293],{"class":106},[96,83043,51590],{"class":51279},[96,83045,51286],{"class":106},[96,83047,83048,83050,83052],{"class":98,"line":1600},[96,83049,52123],{"class":106},[96,83051,51792],{"class":51279},[96,83053,51286],{"class":106},[96,83055,83056,83058,83061,83063],{"class":98,"line":1606},[96,83057,11205],{"class":102},[96,83059,83060],{"class":155}," gift",[96,83062,13548],{"class":102},[96,83064,83065],{"class":211}," '50g的茶叶，清洗球'\n",[96,83067,83068],{"class":98,"line":1611},[96,83069,83070],{"class":165},"    \u002F\u002F 1.把字符串拆分为数组\n",[96,83072,83073],{"class":98,"line":1625},[96,83074,83075],{"class":165},"    \u002F\u002F console.log(gift.split(','))\n",[96,83077,83078],{"class":98,"line":1630},[96,83079,83080],{"class":165},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[96,83082,83083,83085,83087,83089,83092,83095,83097,83100,83102,83104,83106,83108,83110,83113,83115,83118,83120,83122,83124,83126],{"class":98,"line":1636},[96,83084,11205],{"class":102},[96,83086,73898],{"class":155},[96,83088,13548],{"class":102},[96,83090,83091],{"class":106}," gift.",[96,83093,83094],{"class":1946},"split",[96,83096,107],{"class":106},[96,83098,83099],{"class":211},"'，'",[96,83101,30805],{"class":106},[96,83103,74023],{"class":1946},[96,83105,107],{"class":106},[96,83107,79774],{"class":5200},[96,83109,79777],{"class":102},[96,83111,83112],{"class":211}," `\u003Cspan>【赠品】${",[96,83114,79774],{"class":106},[96,83116,83117],{"class":211},"}\u003C\u002Fspan>\u003Cbr>`",[96,83119,30805],{"class":106},[96,83121,74202],{"class":1946},[96,83123,107],{"class":106},[96,83125,74207],{"class":211},[96,83127,113],{"class":106},[96,83129,83130,83132,83134,83136,83138,83140,83142],{"class":98,"line":1657},[96,83131,52386],{"class":106},[96,83133,54378],{"class":1946},[96,83135,107],{"class":106},[96,83137,81910],{"class":211},[96,83139,74228],{"class":106},[96,83141,152],{"class":102},[96,83143,73964],{"class":106},[96,83145,83146,83148,83150],{"class":98,"line":1662},[96,83147,52396],{"class":106},[96,83149,51792],{"class":51279},[96,83151,51286],{"class":106},[96,83153,83154,83156,83158],{"class":98,"line":1676},[96,83155,51764],{"class":106},[96,83157,51779],{"class":51279},[96,83159,51286],{"class":106},[96,83161,83162],{"class":98,"line":1681},[96,83163,2383],{"emptyLinePlaceholder":23},[96,83165,83166,83168,83170],{"class":98,"line":1710},[96,83167,51764],{"class":106},[96,83169,50614],{"class":51279},[96,83171,51286],{"class":106},[21982,83173,83175],{"id":83174},"_41054-number","4.10.5.4 Number",[14,83177,83178],{},[1445,83179],{"alt":18,"src":83180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[14,83182,83183],{},"整数也可以进行toFixed来保留小数",[14,83185,83186],{},"比如：",[14,83188,83189],{},"const price=10",[14,83191,83192],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[21982,83194,83196],{"id":83195},"_41055-购物车展示","4.10.5.5 购物车展示",[14,83198,83199],{},[1445,83200],{"alt":18,"src":83201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[87,83203,83205],{"className":50612,"code":83204,"language":50614,"meta":18,"style":18},"\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",[93,83206,83207,83217,83231,83235,83243,83257,83277,83289,83297,83303,83313,83323,83333,83337,83341,83347,83359,83373,83377,83381,83387,83399,83415,83425,83441,83445,83449,83455,83465,83475,83479,83483,83491,83503,83515,83527,83531,83535,83543,83555,83559,83563,83574,83584,83596,83608,83618,83622,83626,83634,83643,83655,83665,83675,83679,83683,83691,83700,83707,83717,83729,83733,83737,83746,83756,83767,83779,83791,83795,83799,83808,83818,83829,83833,83837,83843,83855,83867,83877,83887,83905,83917,83921,83925,83934,83946,83956,83966,83978,83982,83990,83998,84002,84010,84024,84032,84046,84074,84082,84090,84100,84104,84112,84120,84129,84137,84146,84156,84160,84164,84172,84180,84189,84197,84205,84218,84222,84226,84234,84242,84251,84259,84267,84282,84286,84290,84298,84306,84315,84323,84331,84345,84353,84357,84361,84366,84392,84397,84434,84439,84462,84467,84521,84526,84562,84566,84572,84577,84586,84600,84609,84628,84637,84647,84652,84657,84670,84675,84729,84755,84763,84771,84775],{"__ignoreMap":18},[96,83208,83209,83211,83213,83215],{"class":98,"line":99},[96,83210,51276],{"class":106},[96,83212,51280],{"class":51279},[96,83214,51283],{"class":1946},[96,83216,51286],{"class":106},[96,83218,83219,83221,83223,83225,83227,83229],{"class":98,"line":19},[96,83220,1017],{"class":106},[96,83222,50614],{"class":51279},[96,83224,51295],{"class":1946},[96,83226,152],{"class":106},[96,83228,51300],{"class":211},[96,83230,51286],{"class":106},[96,83232,83233],{"class":98,"line":1162},[96,83234,2383],{"emptyLinePlaceholder":23},[96,83236,83237,83239,83241],{"class":98,"line":1177},[96,83238,1017],{"class":106},[96,83240,51313],{"class":51279},[96,83242,51286],{"class":106},[96,83244,83245,83247,83249,83251,83253,83255],{"class":98,"line":1183},[96,83246,52123],{"class":106},[96,83248,51323],{"class":51279},[96,83250,51326],{"class":1946},[96,83252,152],{"class":106},[96,83254,51331],{"class":211},[96,83256,51286],{"class":106},[96,83258,83259,83261,83263,83265,83267,83269,83271,83273,83275],{"class":98,"line":1197},[96,83260,52123],{"class":106},[96,83262,51323],{"class":51279},[96,83264,14904],{"class":1946},[96,83266,152],{"class":106},[96,83268,51370],{"class":211},[96,83270,51350],{"class":1946},[96,83272,152],{"class":106},[96,83274,51377],{"class":211},[96,83276,51286],{"class":106},[96,83278,83279,83281,83283,83285,83287],{"class":98,"line":1203},[96,83280,52123],{"class":106},[96,83282,51386],{"class":51279},[96,83284,51389],{"class":106},[96,83286,51386],{"class":51279},[96,83288,51286],{"class":106},[96,83290,83291,83293,83295],{"class":98,"line":1294},[96,83292,52123],{"class":106},[96,83294,5110],{"class":51279},[96,83296,51286],{"class":106},[96,83298,83299,83301],{"class":98,"line":1300},[96,83300,6387],{"class":51279},[96,83302,15556],{"class":106},[96,83304,83305,83307,83309,83311],{"class":98,"line":1312},[96,83306,54674],{"class":155},[96,83308,51416],{"class":106},[96,83310,298],{"class":155},[96,83312,1273],{"class":106},[96,83314,83315,83317,83319,83321],{"class":98,"line":1595},[96,83316,54685],{"class":155},[96,83318,51416],{"class":106},[96,83320,298],{"class":155},[96,83322,1273],{"class":106},[96,83324,83325,83327,83329,83331],{"class":98,"line":1600},[96,83326,72575],{"class":155},[96,83328,51416],{"class":106},[96,83330,60484],{"class":155},[96,83332,1273],{"class":106},[96,83334,83335],{"class":98,"line":1606},[96,83336,2170],{"class":106},[96,83338,83339],{"class":98,"line":1611},[96,83340,2383],{"emptyLinePlaceholder":23},[96,83342,83343,83345],{"class":98,"line":1625},[96,83344,62102],{"class":1946},[96,83346,15556],{"class":106},[96,83348,83349,83351,83353,83355,83357],{"class":98,"line":1630},[96,83350,54750],{"class":155},[96,83352,51416],{"class":106},[96,83354,78553],{"class":155},[96,83356,51471],{"class":102},[96,83358,1273],{"class":106},[96,83360,83361,83363,83365,83367,83369,83371],{"class":98,"line":1636},[96,83362,54685],{"class":155},[96,83364,51416],{"class":106},[96,83366,418],{"class":155},[96,83368,51471],{"class":102},[96,83370,51535],{"class":155},[96,83372,1273],{"class":106},[96,83374,83375],{"class":98,"line":1657},[96,83376,2170],{"class":106},[96,83378,83379],{"class":98,"line":1662},[96,83380,2383],{"emptyLinePlaceholder":23},[96,83382,83383,83385],{"class":98,"line":1676},[96,83384,78604],{"class":1946},[96,83386,15556],{"class":106},[96,83388,83389,83391,83393,83395,83397],{"class":98,"line":1681},[96,83390,54674],{"class":155},[96,83392,51416],{"class":106},[96,83394,682],{"class":155},[96,83396,51471],{"class":102},[96,83398,1273],{"class":106},[96,83400,83401,83403,83405,83407,83409,83411,83413],{"class":98,"line":1710},[96,83402,61839],{"class":155},[96,83404,51416],{"class":106},[96,83406,28100],{"class":155},[96,83408,78659],{"class":155},[96,83410,78662],{"class":155},[96,83412,802],{"class":102},[96,83414,1273],{"class":106},[96,83416,83417,83419,83421,83423],{"class":98,"line":1715},[96,83418,54988],{"class":155},[96,83420,51416],{"class":106},[96,83422,51456],{"class":155},[96,83424,1273],{"class":106},[96,83426,83427,83429,83431,83433,83435,83437,83439],{"class":98,"line":1732},[96,83428,61956],{"class":155},[96,83430,51416],{"class":106},[96,83432,324],{"class":155},[96,83434,51471],{"class":102},[96,83436,51500],{"class":155},[96,83438,62223],{"class":155},[96,83440,1273],{"class":106},[96,83442,83443],{"class":98,"line":1737},[96,83444,2170],{"class":106},[96,83446,83447],{"class":98,"line":1742},[96,83448,2383],{"emptyLinePlaceholder":23},[96,83450,83451,83453],{"class":98,"line":1747},[96,83452,78722],{"class":1946},[96,83454,15556],{"class":106},[96,83456,83457,83459,83461,83463],{"class":98,"line":1761},[96,83458,62004],{"class":155},[96,83460,51416],{"class":106},[96,83462,62009],{"class":155},[96,83464,1273],{"class":106},[96,83466,83467,83469,83471,83473],{"class":98,"line":1766},[96,83468,54863],{"class":155},[96,83470,51416],{"class":106},[96,83472,61797],{"class":155},[96,83474,1273],{"class":106},[96,83476,83477],{"class":98,"line":2560},[96,83478,2170],{"class":106},[96,83480,83481],{"class":98,"line":2574},[96,83482,2383],{"emptyLinePlaceholder":23},[96,83484,83485,83487,83489],{"class":98,"line":2582},[96,83486,78604],{"class":1946},[96,83488,55594],{"class":51279},[96,83490,15556],{"class":106},[96,83492,83493,83495,83497,83499,83501],{"class":98,"line":2587},[96,83494,54750],{"class":155},[96,83496,51416],{"class":106},[96,83498,719],{"class":155},[96,83500,51471],{"class":102},[96,83502,1273],{"class":106},[96,83504,83505,83507,83509,83511,83513],{"class":98,"line":2593},[96,83506,54764],{"class":155},[96,83508,51416],{"class":106},[96,83510,719],{"class":155},[96,83512,51471],{"class":102},[96,83514,1273],{"class":106},[96,83516,83517,83519,83521,83523,83525],{"class":98,"line":2599},[96,83518,61729],{"class":155},[96,83520,51416],{"class":106},[96,83522,426],{"class":155},[96,83524,51471],{"class":102},[96,83526,1273],{"class":106},[96,83528,83529],{"class":98,"line":2604},[96,83530,2170],{"class":106},[96,83532,83533],{"class":98,"line":7932},[96,83534,2383],{"emptyLinePlaceholder":23},[96,83536,83537,83539,83541],{"class":98,"line":7956},[96,83538,78604],{"class":1946},[96,83540,62283],{"class":1946},[96,83542,15556],{"class":106},[96,83544,83545,83547,83549,83551,83553],{"class":98,"line":7961},[96,83546,54750],{"class":155},[96,83548,51416],{"class":106},[96,83550,1705],{"class":155},[96,83552,51471],{"class":102},[96,83554,1273],{"class":106},[96,83556,83557],{"class":98,"line":7967},[96,83558,2170],{"class":106},[96,83560,83561],{"class":98,"line":7994},[96,83562,2383],{"emptyLinePlaceholder":23},[96,83564,83565,83567,83569,83572],{"class":98,"line":7999},[96,83566,78604],{"class":1946},[96,83568,62283],{"class":1946},[96,83570,83571],{"class":1946}," .tag",[96,83573,15556],{"class":106},[96,83575,83576,83578,83580,83582],{"class":98,"line":8005},[96,83577,54988],{"class":155},[96,83579,51416],{"class":106},[96,83581,60848],{"class":155},[96,83583,1273],{"class":106},[96,83585,83586,83588,83590,83592,83594],{"class":98,"line":8017},[96,83587,54674],{"class":155},[96,83589,51416],{"class":106},[96,83591,184],{"class":155},[96,83593,51471],{"class":102},[96,83595,1273],{"class":106},[96,83597,83598,83600,83602,83604,83606],{"class":98,"line":8029},[96,83599,54901],{"class":155},[96,83601,51416],{"class":106},[96,83603,605],{"class":155},[96,83605,51471],{"class":102},[96,83607,1273],{"class":106},[96,83609,83610,83612,83614,83616],{"class":98,"line":8041},[96,83611,57395],{"class":155},[96,83613,51416],{"class":106},[96,83615,62049],{"class":155},[96,83617,1273],{"class":106},[96,83619,83620],{"class":98,"line":9700},[96,83621,2170],{"class":106},[96,83623,83624],{"class":98,"line":9725},[96,83625,2383],{"emptyLinePlaceholder":23},[96,83627,83628,83630,83632],{"class":98,"line":9748},[96,83629,78604],{"class":1946},[96,83631,78896],{"class":1946},[96,83633,31445],{"class":106},[96,83635,83636,83638,83641],{"class":98,"line":9772},[96,83637,78604],{"class":1946},[96,83639,83640],{"class":1946}," .sub-total",[96,83642,15556],{"class":106},[96,83644,83645,83647,83649,83651,83653],{"class":98,"line":9777},[96,83646,54901],{"class":155},[96,83648,51416],{"class":106},[96,83650,757],{"class":155},[96,83652,51471],{"class":102},[96,83654,1273],{"class":106},[96,83656,83657,83659,83661,83663],{"class":98,"line":9782},[96,83658,57395],{"class":155},[96,83660,51416],{"class":106},[96,83662,78919],{"class":155},[96,83664,1273],{"class":106},[96,83666,83667,83669,83671,83673],{"class":98,"line":9787},[96,83668,61816],{"class":155},[96,83670,51416],{"class":106},[96,83672,324],{"class":155},[96,83674,1273],{"class":106},[96,83676,83677],{"class":98,"line":9796},[96,83678,2170],{"class":106},[96,83680,83681],{"class":98,"line":9801},[96,83682,2383],{"emptyLinePlaceholder":23},[96,83684,83685,83687,83689],{"class":98,"line":9807},[96,83686,78604],{"class":1946},[96,83688,78936],{"class":1946},[96,83690,31445],{"class":106},[96,83692,83693,83695,83698],{"class":98,"line":9828},[96,83694,78604],{"class":1946},[96,83696,83697],{"class":1946}," .sub-total::before",[96,83699,31445],{"class":106},[96,83701,83702,83705],{"class":98,"line":9834},[96,83703,83704],{"class":1946},"    .amount::before",[96,83706,15556],{"class":106},[96,83708,83709,83711,83713,83715],{"class":98,"line":9848},[96,83710,78943],{"class":155},[96,83712,51416],{"class":106},[96,83714,78948],{"class":211},[96,83716,1273],{"class":106},[96,83718,83719,83721,83723,83725,83727],{"class":98,"line":9854},[96,83720,54901],{"class":155},[96,83722,51416],{"class":106},[96,83724,605],{"class":155},[96,83726,51471],{"class":102},[96,83728,1273],{"class":106},[96,83730,83731],{"class":98,"line":9881},[96,83732,2170],{"class":106},[96,83734,83735],{"class":98,"line":9890},[96,83736,2383],{"emptyLinePlaceholder":23},[96,83738,83739,83741,83744],{"class":98,"line":9896},[96,83740,78604],{"class":1946},[96,83742,83743],{"class":1946}," .spec",[96,83745,15556],{"class":106},[96,83747,83748,83750,83752,83754],{"class":98,"line":9904},[96,83749,61816],{"class":155},[96,83751,51416],{"class":106},[96,83753,184],{"class":155},[96,83755,1273],{"class":106},[96,83757,83758,83760,83762,83765],{"class":98,"line":9909},[96,83759,57395],{"class":155},[96,83761,51416],{"class":106},[96,83763,83764],{"class":155},"#888",[96,83766,1273],{"class":106},[96,83768,83769,83771,83773,83775,83777],{"class":98,"line":16588},[96,83770,54901],{"class":155},[96,83772,51416],{"class":106},[96,83774,656],{"class":155},[96,83776,51471],{"class":102},[96,83778,1273],{"class":106},[96,83780,83781,83783,83785,83787,83789],{"class":98,"line":16594},[96,83782,61979],{"class":155},[96,83784,51416],{"class":106},[96,83786,807],{"class":155},[96,83788,51471],{"class":102},[96,83790,1273],{"class":106},[96,83792,83793],{"class":98,"line":16617},[96,83794,2170],{"class":106},[96,83796,83797],{"class":98,"line":16623},[96,83798,2383],{"emptyLinePlaceholder":23},[96,83800,83801,83803,83806],{"class":98,"line":16646},[96,83802,78604],{"class":1946},[96,83804,83805],{"class":1946}," .count",[96,83807,15556],{"class":106},[96,83809,83810,83812,83814,83816],{"class":98,"line":16660},[96,83811,61816],{"class":155},[96,83813,51416],{"class":106},[96,83815,324],{"class":155},[96,83817,1273],{"class":106},[96,83819,83820,83822,83824,83827],{"class":98,"line":16680},[96,83821,57395],{"class":155},[96,83823,51416],{"class":106},[96,83825,83826],{"class":155},"#aaa",[96,83828,1273],{"class":106},[96,83830,83831],{"class":98,"line":16686},[96,83832,2170],{"class":106},[96,83834,83835],{"class":98,"line":16697},[96,83836,2383],{"emptyLinePlaceholder":23},[96,83838,83839,83841],{"class":98,"line":16720},[96,83840,72454],{"class":1946},[96,83842,15556],{"class":106},[96,83844,83845,83847,83849,83851,83853],{"class":98,"line":16742},[96,83846,54750],{"class":155},[96,83848,51416],{"class":106},[96,83850,78553],{"class":155},[96,83852,51471],{"class":102},[96,83854,1273],{"class":106},[96,83856,83857,83859,83861,83863,83865],{"class":98,"line":16747},[96,83858,54685],{"class":155},[96,83860,51416],{"class":106},[96,83862,298],{"class":155},[96,83864,51535],{"class":155},[96,83866,1273],{"class":106},[96,83868,83869,83871,83873,83875],{"class":98,"line":16753},[96,83870,54988],{"class":155},[96,83872,51416],{"class":106},[96,83874,51456],{"class":155},[96,83876,1273],{"class":106},[96,83878,83879,83881,83883,83885],{"class":98,"line":16767},[96,83880,54999],{"class":155},[96,83882,51416],{"class":106},[96,83884,51559],{"class":155},[96,83886,1273],{"class":106},[96,83888,83889,83892,83894,83896,83898,83900,83903],{"class":98,"line":16780},[96,83890,83891],{"class":155},"      border-top",[96,83893,51416],{"class":106},[96,83895,324],{"class":155},[96,83897,51471],{"class":102},[96,83899,51500],{"class":155},[96,83901,83902],{"class":155}," #4e4e4e",[96,83904,1273],{"class":106},[96,83906,83907,83909,83911,83913,83915],{"class":98,"line":16785},[96,83908,54674],{"class":155},[96,83910,51416],{"class":106},[96,83912,807],{"class":155},[96,83914,51471],{"class":102},[96,83916,1273],{"class":106},[96,83918,83919],{"class":98,"line":16799},[96,83920,2170],{"class":106},[96,83922,83923],{"class":98,"line":16804},[96,83924,2383],{"emptyLinePlaceholder":23},[96,83926,83927,83929,83932],{"class":98,"line":16810},[96,83928,72454],{"class":1946},[96,83930,83931],{"class":1946}," .amount",[96,83933,15556],{"class":106},[96,83935,83936,83938,83940,83942,83944],{"class":98,"line":16815},[96,83937,54901],{"class":155},[96,83939,51416],{"class":106},[96,83941,757],{"class":155},[96,83943,51471],{"class":102},[96,83945,1273],{"class":106},[96,83947,83948,83950,83952,83954],{"class":98,"line":16829},[96,83949,57395],{"class":155},[96,83951,51416],{"class":106},[96,83953,78919],{"class":155},[96,83955,1273],{"class":106},[96,83957,83958,83960,83962,83964],{"class":98,"line":16834},[96,83959,62313],{"class":155},[96,83961,51416],{"class":106},[96,83963,51468],{"class":155},[96,83965,1273],{"class":106},[96,83967,83968,83970,83972,83974,83976],{"class":98,"line":16839},[96,83969,61729],{"class":155},[96,83971,51416],{"class":106},[96,83973,763],{"class":155},[96,83975,51471],{"class":102},[96,83977,1273],{"class":106},[96,83979,83980],{"class":98,"line":16853},[96,83981,2170],{"class":106},[96,83983,83984,83986,83988],{"class":98,"line":16865},[96,83985,52396],{"class":106},[96,83987,5110],{"class":51279},[96,83989,51286],{"class":106},[96,83991,83992,83994,83996],{"class":98,"line":16870},[96,83993,51764],{"class":106},[96,83995,51313],{"class":51279},[96,83997,51286],{"class":106},[96,83999,84000],{"class":98,"line":16883},[96,84001,2383],{"emptyLinePlaceholder":23},[96,84003,84004,84006,84008],{"class":98,"line":16888},[96,84005,1017],{"class":106},[96,84007,51779],{"class":51279},[96,84009,51286],{"class":106},[96,84011,84012,84014,84016,84018,84020,84022],{"class":98,"line":16893},[96,84013,52123],{"class":106},[96,84015,51590],{"class":51279},[96,84017,53465],{"class":1946},[96,84019,152],{"class":106},[96,84021,62587],{"class":211},[96,84023,51286],{"class":106},[96,84025,84026,84028,84030],{"class":98,"line":16898},[96,84027,52396],{"class":106},[96,84029,51590],{"class":51279},[96,84031,51286],{"class":106},[96,84033,84034,84036,84038,84040,84042,84044],{"class":98,"line":16911},[96,84035,52123],{"class":106},[96,84037,51590],{"class":51279},[96,84039,53465],{"class":1946},[96,84041,152],{"class":106},[96,84043,62559],{"class":211},[96,84045,51286],{"class":106},[96,84047,84048,84050,84052,84055,84057,84059,84061,84064,84066,84068,84070,84072],{"class":98,"line":16916},[96,84049,51320],{"class":106},[96,84051,51590],{"class":51279},[96,84053,84054],{"class":106},">合计：\u003C",[96,84056,96],{"class":51279},[96,84058,53465],{"class":1946},[96,84060,152],{"class":106},[96,84062,84063],{"class":211},"\"amount\"",[96,84065,55293],{"class":106},[96,84067,96],{"class":51279},[96,84069,55293],{"class":106},[96,84071,51590],{"class":51279},[96,84073,51286],{"class":106},[96,84075,84076,84078,84080],{"class":98,"line":32612},[96,84077,52396],{"class":106},[96,84079,51590],{"class":51279},[96,84081,51286],{"class":106},[96,84083,84084,84086,84088],{"class":98,"line":32618},[96,84085,52123],{"class":106},[96,84087,51792],{"class":51279},[96,84089,51286],{"class":106},[96,84091,84092,84094,84096,84098],{"class":98,"line":32624},[96,84093,11205],{"class":102},[96,84095,79356],{"class":155},[96,84097,13548],{"class":102},[96,84099,55426],{"class":106},[96,84101,84102],{"class":98,"line":32630},[96,84103,79365],{"class":106},[96,84105,84106,84108,84110],{"class":98,"line":32636},[96,84107,79370],{"class":106},[96,84109,79373],{"class":211},[96,84111,31445],{"class":106},[96,84113,84114,84116,84118],{"class":98,"line":32647},[96,84115,79380],{"class":106},[96,84117,79383],{"class":211},[96,84119,31445],{"class":106},[96,84121,84122,84124,84127],{"class":98,"line":32653},[96,84123,79390],{"class":106},[96,84125,84126],{"class":155},"289.9",[96,84128,31445],{"class":106},[96,84130,84131,84133,84135],{"class":98,"line":32673},[96,84132,79400],{"class":106},[96,84134,79403],{"class":211},[96,84136,31445],{"class":106},[96,84138,84139,84142,84144],{"class":98,"line":32679},[96,84140,84141],{"class":106},"        count: ",[96,84143,184],{"class":155},[96,84145,31445],{"class":106},[96,84147,84148,84151,84154],{"class":98,"line":32690},[96,84149,84150],{"class":106},"        spec: { color: ",[96,84152,84153],{"class":211},"'白色'",[96,84155,55583],{"class":106},[96,84157,84158],{"class":98,"line":32696},[96,84159,77871],{"class":106},[96,84161,84162],{"class":98,"line":32702},[96,84163,79365],{"class":106},[96,84165,84166,84168,84170],{"class":98,"line":32708},[96,84167,79370],{"class":106},[96,84169,79464],{"class":211},[96,84171,31445],{"class":106},[96,84173,84174,84176,84178],{"class":98,"line":32714},[96,84175,79380],{"class":106},[96,84177,79473],{"class":211},[96,84179,31445],{"class":106},[96,84181,84182,84184,84187],{"class":98,"line":32720},[96,84183,79390],{"class":106},[96,84185,84186],{"class":155},"109.8",[96,84188,31445],{"class":106},[96,84190,84191,84193,84195],{"class":98,"line":32726},[96,84192,79400],{"class":106},[96,84194,79491],{"class":211},[96,84196,31445],{"class":106},[96,84198,84199,84201,84203],{"class":98,"line":32732},[96,84200,84141],{"class":106},[96,84202,178],{"class":155},[96,84204,31445],{"class":106},[96,84206,84207,84210,84212,84214,84216],{"class":98,"line":32752},[96,84208,84209],{"class":106},"        spec: { size: ",[96,84211,81882],{"class":211},[96,84213,55443],{"class":106},[96,84215,81887],{"class":211},[96,84217,55583],{"class":106},[96,84219,84220],{"class":98,"line":32758},[96,84221,77871],{"class":106},[96,84223,84224],{"class":98,"line":32774},[96,84225,79365],{"class":106},[96,84227,84228,84230,84232],{"class":98,"line":32780},[96,84229,79370],{"class":106},[96,84231,79508],{"class":211},[96,84233,31445],{"class":106},[96,84235,84236,84238,84240],{"class":98,"line":32794},[96,84237,79380],{"class":106},[96,84239,79517],{"class":211},[96,84241,31445],{"class":106},[96,84243,84244,84246,84249],{"class":98,"line":32800},[96,84245,79390],{"class":106},[96,84247,84248],{"class":155},"488",[96,84250,31445],{"class":106},[96,84252,84253,84255,84257],{"class":98,"line":32815},[96,84254,79400],{"class":106},[96,84256,79535],{"class":211},[96,84258,31445],{"class":106},[96,84260,84261,84263,84265],{"class":98,"line":32821},[96,84262,84141],{"class":106},[96,84264,324],{"class":155},[96,84266,31445],{"class":106},[96,84268,84269,84271,84274,84277,84280],{"class":98,"line":32830},[96,84270,84150],{"class":106},[96,84272,84273],{"class":211},"'青色'",[96,84275,84276],{"class":106},", sum: ",[96,84278,84279],{"class":211},"'一大四小'",[96,84281,55583],{"class":106},[96,84283,84284],{"class":98,"line":32836},[96,84285,77871],{"class":106},[96,84287,84288],{"class":98,"line":32845},[96,84289,79365],{"class":106},[96,84291,84292,84294,84296],{"class":98,"line":32851},[96,84293,79370],{"class":106},[96,84295,79552],{"class":211},[96,84297,31445],{"class":106},[96,84299,84300,84302,84304],{"class":98,"line":32857},[96,84301,79380],{"class":106},[96,84303,79561],{"class":211},[96,84305,31445],{"class":106},[96,84307,84308,84310,84313],{"class":98,"line":32866},[96,84309,79390],{"class":106},[96,84311,84312],{"class":155},"139",[96,84314,31445],{"class":106},[96,84316,84317,84319,84321],{"class":98,"line":32872},[96,84318,79400],{"class":106},[96,84320,79579],{"class":211},[96,84322,31445],{"class":106},[96,84324,84325,84327,84329],{"class":98,"line":32883},[96,84326,84141],{"class":106},[96,84328,324],{"class":155},[96,84330,31445],{"class":106},[96,84332,84333,84335,84338,84340,84343],{"class":98,"line":32889},[96,84334,84209],{"class":106},[96,84336,84337],{"class":211},"'小号'",[96,84339,55443],{"class":106},[96,84341,84342],{"class":211},"'紫色'",[96,84344,55449],{"class":106},[96,84346,84347,84350],{"class":98,"line":32908},[96,84348,84349],{"class":106},"        gift: ",[96,84351,84352],{"class":211},"'50g茶叶,清洗球'\n",[96,84354,84355],{"class":98,"line":32914},[96,84356,52377],{"class":106},[96,84358,84359],{"class":98,"line":32925},[96,84360,53088],{"class":106},[96,84362,84363],{"class":98,"line":32931},[96,84364,84365],{"class":165},"    \u002F\u002F  1.根据数据渲染页面\n",[96,84367,84368,84370,84372,84374,84376,84378,84380,84382,84384,84386,84388,84390],{"class":98,"line":32951},[96,84369,52386],{"class":106},[96,84371,54378],{"class":1946},[96,84373,107],{"class":106},[96,84375,79880],{"class":211},[96,84377,74228],{"class":106},[96,84379,152],{"class":102},[96,84381,80027],{"class":106},[96,84383,74023],{"class":1946},[96,84385,107],{"class":106},[96,84387,79774],{"class":5200},[96,84389,79777],{"class":102},[96,84391,15556],{"class":106},[96,84393,84394],{"class":98,"line":32967},[96,84395,84396],{"class":165},"      \u002F\u002F 对象解构\n",[96,84398,84399,84401,84403,84405,84407,84409,84411,84414,84416,84418,84420,84423,84425,84428,84430,84432],{"class":98,"line":32973},[96,84400,58207],{"class":102},[96,84402,79786],{"class":106},[96,84404,79799],{"class":155},[96,84406,12419],{"class":106},[96,84408,79789],{"class":155},[96,84410,12419],{"class":106},[96,84412,84413],{"class":155},"count",[96,84415,12419],{"class":106},[96,84417,79794],{"class":155},[96,84419,12419],{"class":106},[96,84421,84422],{"class":155},"spec",[96,84424,12419],{"class":106},[96,84426,84427],{"class":155},"gift",[96,84429,79802],{"class":106},[96,84431,152],{"class":102},[96,84433,79807],{"class":106},[96,84435,84436],{"class":98,"line":32987},[96,84437,84438],{"class":165},"      \u002F\u002F 规格文字模块处理\n",[96,84440,84441,84443,84446,84448,84450,84452,84454,84456,84458,84460],{"class":98,"line":32993},[96,84442,58207],{"class":102},[96,84444,84445],{"class":155}," text",[96,84447,13548],{"class":102},[96,84449,81917],{"class":106},[96,84451,81920],{"class":1946},[96,84453,81923],{"class":106},[96,84455,74202],{"class":1946},[96,84457,107],{"class":106},[96,84459,81930],{"class":211},[96,84461,113],{"class":106},[96,84463,84464],{"class":98,"line":32999},[96,84465,84466],{"class":165},"      \u002F\u002F 处理赠品模块\n",[96,84468,84469,84471,84473,84475,84478,84480,84482,84484,84486,84489,84491,84493,84495,84497,84499,84502,84504,84507,84509,84511,84513,84515,84517,84519],{"class":98,"line":33010},[96,84470,58207],{"class":102},[96,84472,73898],{"class":155},[96,84474,13548],{"class":102},[96,84476,84477],{"class":106}," gift ",[96,84479,1093],{"class":102},[96,84481,83091],{"class":106},[96,84483,83094],{"class":1946},[96,84485,107],{"class":106},[96,84487,84488],{"class":211},"','",[96,84490,30805],{"class":106},[96,84492,74023],{"class":1946},[96,84494,107],{"class":106},[96,84496,79774],{"class":5200},[96,84498,79777],{"class":102},[96,84500,84501],{"class":211}," `\u003Cspan class=\"tag\">【赠品】${",[96,84503,79774],{"class":106},[96,84505,84506],{"class":211},"}\u003C\u002Fspan>`",[96,84508,30805],{"class":106},[96,84510,74202],{"class":1946},[96,84512,107],{"class":106},[96,84514,74207],{"class":211},[96,84516,13698],{"class":106},[96,84518,966],{"class":102},[96,84520,70083],{"class":211},[96,84522,84523],{"class":98,"line":33016},[96,84524,84525],{"class":165},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[96,84527,84528,84530,84533,84535,84538,84540,84542,84544,84547,84549,84551,84553,84556,84558,84560],{"class":98,"line":33022},[96,84529,58207],{"class":102},[96,84531,84532],{"class":155}," subtotal",[96,84534,13548],{"class":102},[96,84536,84537],{"class":106}," ((price ",[96,84539,562],{"class":102},[96,84541,5738],{"class":155},[96,84543,6502],{"class":102},[96,84545,84546],{"class":106}," count) ",[96,84548,691],{"class":102},[96,84550,5738],{"class":155},[96,84552,30805],{"class":106},[96,84554,84555],{"class":1946},"toFixed",[96,84557,107],{"class":106},[96,84559,184],{"class":155},[96,84561,113],{"class":106},[96,84563,84564],{"class":98,"line":33032},[96,84565,2383],{"emptyLinePlaceholder":23},[96,84567,84568,84570],{"class":98,"line":33038},[96,84569,73961],{"class":102},[96,84571,70147],{"class":211},[96,84573,84574],{"class":98,"line":33049},[96,84575,84576],{"class":211},"        \u003Cdiv class=\"item\">\n",[96,84578,84579,84582,84584],{"class":98,"line":33055},[96,84580,84581],{"class":211},"          \u003Cimg src=\"${",[96,84583,79799],{"class":106},[96,84585,79831],{"class":211},[96,84587,84588,84591,84593,84596,84598],{"class":98,"line":33065},[96,84589,84590],{"class":211},"          \u003Cp class=\"name\">${",[96,84592,79789],{"class":106},[96,84594,84595],{"class":211},"}${",[96,84597,1282],{"class":106},[96,84599,79841],{"class":211},[96,84601,84602,84605,84607],{"class":98,"line":33070},[96,84603,84604],{"class":211},"          \u003Cp class=\"spec\">${",[96,84606,5171],{"class":106},[96,84608,79841],{"class":211},[96,84610,84611,84614,84616,84618,84620,84622,84624,84626],{"class":98,"line":33076},[96,84612,84613],{"class":211},"          \u003Cp class=\"price\">${",[96,84615,79794],{"class":106},[96,84617,665],{"class":211},[96,84619,84555],{"class":1946},[96,84621,107],{"class":211},[96,84623,184],{"class":155},[96,84625,536],{"class":211},[96,84627,79841],{"class":211},[96,84629,84630,84633,84635],{"class":98,"line":33125},[96,84631,84632],{"class":211},"          \u003Cp class=\"count\">x${",[96,84634,84413],{"class":106},[96,84636,79841],{"class":211},[96,84638,84639,84642,84645],{"class":98,"line":33172},[96,84640,84641],{"class":211},"          \u003Cp class=\"sub-total\">${",[96,84643,84644],{"class":106},"subtotal",[96,84646,79841],{"class":211},[96,84648,84649],{"class":98,"line":33177},[96,84650,84651],{"class":211},"        \u003C\u002Fdiv> \n",[96,84653,84654],{"class":98,"line":33183},[96,84655,84656],{"class":211},"             `\n",[96,84658,84659,84662,84664,84666,84668],{"class":98,"line":33202},[96,84660,84661],{"class":106},"    }).",[96,84663,74202],{"class":1946},[96,84665,107],{"class":106},[96,84667,74207],{"class":211},[96,84669,113],{"class":106},[96,84671,84672],{"class":98,"line":33208},[96,84673,84674],{"class":165},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[96,84676,84677,84679,84681,84683,84685,84688,84690,84693,84695,84697,84699,84702,84705,84707,84710,84712,84714,84716,84719,84721,84723,84725,84727],{"class":98,"line":33228},[96,84678,11205],{"class":102},[96,84680,62764],{"class":155},[96,84682,13548],{"class":102},[96,84684,80027],{"class":106},[96,84686,84687],{"class":1946},"reduce",[96,84689,2359],{"class":106},[96,84691,84692],{"class":5200},"prev",[96,84694,12419],{"class":106},[96,84696,79774],{"class":5200},[96,84698,13698],{"class":106},[96,84700,84701],{"class":102},"=>",[96,84703,84704],{"class":106}," prev ",[96,84706,588],{"class":102},[96,84708,84709],{"class":106}," (item.price ",[96,84711,562],{"class":102},[96,84713,5738],{"class":155},[96,84715,6502],{"class":102},[96,84717,84718],{"class":106}," item.count) ",[96,84720,691],{"class":102},[96,84722,5738],{"class":155},[96,84724,12419],{"class":106},[96,84726,298],{"class":155},[96,84728,113],{"class":106},[96,84730,84731,84733,84735,84737,84740,84742,84744,84747,84749,84751,84753],{"class":98,"line":33234},[96,84732,52386],{"class":106},[96,84734,54378],{"class":1946},[96,84736,107],{"class":106},[96,84738,84739],{"class":211},"'.amount'",[96,84741,74228],{"class":106},[96,84743,152],{"class":102},[96,84745,84746],{"class":106}," total.",[96,84748,84555],{"class":1946},[96,84750,107],{"class":106},[96,84752,184],{"class":155},[96,84754,113],{"class":106},[96,84756,84757,84759,84761],{"class":98,"line":33240},[96,84758,52396],{"class":106},[96,84760,51792],{"class":51279},[96,84762,51286],{"class":106},[96,84764,84765,84767,84769],{"class":98,"line":33250},[96,84766,51764],{"class":106},[96,84768,51779],{"class":51279},[96,84770,51286],{"class":106},[96,84772,84773],{"class":98,"line":33255},[96,84774,2383],{"emptyLinePlaceholder":23},[96,84776,84777,84779,84781],{"class":98,"line":33261},[96,84778,51764],{"class":106},[96,84780,50614],{"class":51279},[96,84782,51286],{"class":106},[38,84784,84786],{"id":84785},"_411-编程思想","4.11 编程思想",[67,84788,84790],{"id":84789},"_4111-面向过程介绍","4.11.1 面向过程介绍",[14,84792,84793,84796],{},[256,84794,84795],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[14,84798,84799],{},"调用就可以了",[14,84801,84802],{},[1445,84803],{"alt":18,"src":84804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[67,84806,84808],{"id":84807},"_4112-面向对象","4.11.2 面向对象",[14,84810,84811],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[14,84813,84814],{},[1445,84815],{"alt":18,"src":84816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[14,84818,84819],{},"面向对象的特性：",[1114,84821,84822,84825,84828],{},[53,84823,84824],{},"封装性",[53,84826,84827],{},"继承性",[53,84829,84830],{},"多态性",[67,84832,84834],{"id":84833},"_4113-两者比较","4.11.3 两者比较",[14,84836,84837],{},[1445,84838],{"alt":18,"src":84839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[38,84841,84843],{"id":84842},"_412-构造函数回顾","4.12 构造函数回顾",[14,84845,84846],{},[1445,84847],{"alt":18,"src":84848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[14,84850,84851],{},[1445,84852],{"alt":18,"src":84853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[14,84855,84856],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[14,84858,84859],{},[1445,84860],{"alt":18,"src":84861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[38,84863,84865],{"id":84864},"_413-原型","4.13 原型",[67,84867,84869],{"id":84868},"_4131-原型对象的认识","4.13.1 原型对象的认识",[14,84871,84872],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[14,84874,84875],{},[1445,84876],{"alt":18,"src":84877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[14,84879,84880],{},[1445,84881],{"alt":18,"src":84882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[14,84884,84885],{},"原型是构造函数的属性，它也是一个对象",[14,84887,84888],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[14,84890,84891],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[87,84893,84895],{"className":53046,"code":84894,"language":53048,"meta":18,"style":18},"\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",[93,84896,84897,84905,84910,84918,84923,84928,84933,84938,84943,84947,84951,84955,84960,84965,84969,84974,84979,84984,84989,84994,84998,85006],{"__ignoreMap":18},[96,84898,84899,84901,84903],{"class":98,"line":99},[96,84900,1017],{"class":106},[96,84902,51779],{"class":51279},[96,84904,51286],{"class":106},[96,84906,84907],{"class":98,"line":19},[96,84908,84909],{"class":165},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[96,84911,84912,84914,84916],{"class":98,"line":1162},[96,84913,52123],{"class":106},[96,84915,51792],{"class":51279},[96,84917,51286],{"class":106},[96,84919,84920],{"class":98,"line":1177},[96,84921,84922],{"class":106},"    function Star(uname, age) {\n",[96,84924,84925],{"class":98,"line":1183},[96,84926,84927],{"class":106},"      this.uname = uname,\n",[96,84929,84930],{"class":98,"line":1197},[96,84931,84932],{"class":106},"        this.age = age\n",[96,84934,84935],{"class":98,"line":1203},[96,84936,84937],{"class":106},"      \u002F\u002F this.sing = function () {\n",[96,84939,84940],{"class":98,"line":1294},[96,84941,84942],{"class":106},"      \u002F\u002F   console.log('唱歌')\n",[96,84944,84945],{"class":98,"line":1300},[96,84946,2383],{"emptyLinePlaceholder":23},[96,84948,84949],{"class":98,"line":1312},[96,84950,60016],{"class":106},[96,84952,84953],{"class":98,"line":1595},[96,84954,2170],{"class":106},[96,84956,84957],{"class":98,"line":1600},[96,84958,84959],{"class":106},"    Star.prototype.sing = function () {\n",[96,84961,84962],{"class":98,"line":1606},[96,84963,84964],{"class":106},"      console.log('唱歌')\n",[96,84966,84967],{"class":98,"line":1611},[96,84968,2170],{"class":106},[96,84970,84971],{"class":98,"line":1625},[96,84972,84973],{"class":106},"    \u002F\u002F console.dir(Star.prototype)\n",[96,84975,84976],{"class":98,"line":1630},[96,84977,84978],{"class":106},"    const pink = new Star('pink', 18)\n",[96,84980,84981],{"class":98,"line":1636},[96,84982,84983],{"class":106},"    const red = new Star('red', 20)\n",[96,84985,84986],{"class":98,"line":1657},[96,84987,84988],{"class":106},"    pink.sing()\n",[96,84990,84991],{"class":98,"line":1662},[96,84992,84993],{"class":106},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[96,84995,84996],{"class":98,"line":1676},[96,84997,2383],{"emptyLinePlaceholder":23},[96,84999,85000,85002,85004],{"class":98,"line":1681},[96,85001,52396],{"class":106},[96,85003,51792],{"class":51279},[96,85005,51286],{"class":106},[96,85007,85008,85010,85012],{"class":98,"line":1710},[96,85009,51764],{"class":106},[96,85011,51779],{"class":51279},[96,85013,51286],{"class":106},[14,85015,85016],{},[1445,85017],{"alt":18,"src":85018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[87,85020,85022],{"className":53046,"code":85021,"language":53048,"meta":18,"style":18},"\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",[93,85023,85024,85032,85040,85045,85050,85055,85060,85064,85069,85074,85079,85083,85088,85092,85096,85101,85105,85113],{"__ignoreMap":18},[96,85025,85026,85028,85030],{"class":98,"line":99},[96,85027,1017],{"class":106},[96,85029,51779],{"class":51279},[96,85031,51286],{"class":106},[96,85033,85034,85036,85038],{"class":98,"line":19},[96,85035,52123],{"class":106},[96,85037,51792],{"class":51279},[96,85039,51286],{"class":106},[96,85041,85042],{"class":98,"line":1162},[96,85043,85044],{"class":106},"    let that\n",[96,85046,85047],{"class":98,"line":1177},[96,85048,85049],{"class":106},"    function Star(uname) {\n",[96,85051,85052],{"class":98,"line":1183},[96,85053,85054],{"class":106},"      this.uname = uname\n",[96,85056,85057],{"class":98,"line":1197},[96,85058,85059],{"class":106},"      that = this\n",[96,85061,85062],{"class":98,"line":1203},[96,85063,2170],{"class":106},[96,85065,85066],{"class":98,"line":1294},[96,85067,85068],{"class":106},"    \u002F\u002F 实例对象是 ldh\n",[96,85070,85071],{"class":98,"line":1300},[96,85072,85073],{"class":106},"    const ldh = new Star('刘德华')\n",[96,85075,85076],{"class":98,"line":1312},[96,85077,85078],{"class":106},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[96,85080,85081],{"class":98,"line":1595},[96,85082,2383],{"emptyLinePlaceholder":23},[96,85084,85085],{"class":98,"line":1600},[96,85086,85087],{"class":106},"    Star.sing = function () {\n",[96,85089,85090],{"class":98,"line":1606},[96,85091,84964],{"class":106},[96,85093,85094],{"class":98,"line":1611},[96,85095,2170],{"class":106},[96,85097,85098],{"class":98,"line":1625},[96,85099,85100],{"class":106},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[96,85102,85103],{"class":98,"line":1630},[96,85104,2383],{"emptyLinePlaceholder":23},[96,85106,85107,85109,85111],{"class":98,"line":1636},[96,85108,52396],{"class":106},[96,85110,51792],{"class":51279},[96,85112,51286],{"class":106},[96,85114,85115,85117,85119],{"class":98,"line":1657},[96,85116,51764],{"class":106},[96,85118,51779],{"class":51279},[96,85120,51286],{"class":106},[14,85122,85123],{},"构造函数的this指向的是实例对象；",[14,85125,85126],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[67,85128,85130],{"id":85129},"_4132-数组扩展方法","4.13.2 数组扩展方法",[14,85132,85133],{},[1445,85134],{"alt":18,"src":85135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[87,85137,85139],{"className":53046,"code":85138,"language":53048,"meta":18,"style":18},"\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",[93,85140,85141,85149,85157,85162,85167,85172,85177,85182,85187,85192,85197,85202,85207,85211,85216,85221,85226,85231,85235,85240,85245,85250,85255,85259,85264,85269,85274,85279,85283,85288,85292,85300],{"__ignoreMap":18},[96,85142,85143,85145,85147],{"class":98,"line":99},[96,85144,1017],{"class":106},[96,85146,51779],{"class":51279},[96,85148,51286],{"class":106},[96,85150,85151,85153,85155],{"class":98,"line":19},[96,85152,52123],{"class":106},[96,85154,51792],{"class":51279},[96,85156,51286],{"class":106},[96,85158,85159],{"class":98,"line":1162},[96,85160,85161],{"class":106},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[96,85163,85164],{"class":98,"line":1177},[96,85165,85166],{"class":106},"    const arr = [1, 2, 3]\n",[96,85168,85169],{"class":98,"line":1183},[96,85170,85171],{"class":106},"    \u002F\u002F 自己定义数组的扩展方法\n",[96,85173,85174],{"class":98,"line":1197},[96,85175,85176],{"class":106},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[96,85178,85179],{"class":98,"line":1203},[96,85180,85181],{"class":106},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[96,85183,85184],{"class":98,"line":1294},[96,85185,85186],{"class":106},"    \u002F\u002F ①.最大值\n",[96,85188,85189],{"class":98,"line":1300},[96,85190,85191],{"class":106},"    Array.prototype.max = function () {\n",[96,85193,85194],{"class":98,"line":1312},[96,85195,85196],{"class":106},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[96,85198,85199],{"class":98,"line":1595},[96,85200,85201],{"class":106},"      return Math.max(...this)\n",[96,85203,85204],{"class":98,"line":1600},[96,85205,85206],{"class":106},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[96,85208,85209],{"class":98,"line":1606},[96,85210,2170],{"class":106},[96,85212,85213],{"class":98,"line":1611},[96,85214,85215],{"class":106},"    console.log(arr.max())\n",[96,85217,85218],{"class":98,"line":1625},[96,85219,85220],{"class":106},"    \u002F\u002F ②最小值\n",[96,85222,85223],{"class":98,"line":1630},[96,85224,85225],{"class":106},"    Array.prototype.min = function () {\n",[96,85227,85228],{"class":98,"line":1636},[96,85229,85230],{"class":106},"      return Math.min(...this)\n",[96,85232,85233],{"class":98,"line":1657},[96,85234,2170],{"class":106},[96,85236,85237],{"class":98,"line":1662},[96,85238,85239],{"class":106},"    console.log(arr.min())\n",[96,85241,85242],{"class":98,"line":1676},[96,85243,85244],{"class":106},"    \u002F\u002F③求和\n",[96,85246,85247],{"class":98,"line":1681},[96,85248,85249],{"class":106},"    Array.prototype.sum = function () {\n",[96,85251,85252],{"class":98,"line":1710},[96,85253,85254],{"class":106},"      return this.reduce((prev, current) => prev + current, 0)\n",[96,85256,85257],{"class":98,"line":1715},[96,85258,2170],{"class":106},[96,85260,85261],{"class":98,"line":1732},[96,85262,85263],{"class":106},"    console.log(arr.sum())\n",[96,85265,85266],{"class":98,"line":1737},[96,85267,85268],{"class":106},"    \u002F\u002F ③排序\n",[96,85270,85271],{"class":98,"line":1742},[96,85272,85273],{"class":106},"    Array.prototype.rever = function () {\n",[96,85275,85276],{"class":98,"line":1747},[96,85277,85278],{"class":106},"      return this.reverse()\n",[96,85280,85281],{"class":98,"line":1761},[96,85282,2170],{"class":106},[96,85284,85285],{"class":98,"line":1766},[96,85286,85287],{"class":106},"    console.log(arr.rever())\n",[96,85289,85290],{"class":98,"line":2560},[96,85291,2383],{"emptyLinePlaceholder":23},[96,85293,85294,85296,85298],{"class":98,"line":2574},[96,85295,52396],{"class":106},[96,85297,51792],{"class":51279},[96,85299,51286],{"class":106},[96,85301,85302,85304,85306],{"class":98,"line":2582},[96,85303,51764],{"class":106},[96,85305,51779],{"class":51279},[96,85307,51286],{"class":106},[14,85309,85310],{},[1445,85311],{"alt":18,"src":85312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[67,85314,85316],{"id":85315},"_4133-constructor-属性","4.13.3 constructor 属性",[14,85318,85319],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[14,85321,85322],{},[1445,85323],{"alt":18,"src":85324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[87,85326,85328],{"className":53046,"code":85327,"language":53048,"meta":18,"style":18},"\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",[93,85329,85330,85338,85346,85351,85356,85360,85365,85370,85375,85383],{"__ignoreMap":18},[96,85331,85332,85334,85336],{"class":98,"line":99},[96,85333,1017],{"class":106},[96,85335,51779],{"class":51279},[96,85337,51286],{"class":106},[96,85339,85340,85342,85344],{"class":98,"line":19},[96,85341,52123],{"class":106},[96,85343,51792],{"class":51279},[96,85345,51286],{"class":106},[96,85347,85348],{"class":98,"line":1162},[96,85349,85350],{"class":106},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[96,85352,85353],{"class":98,"line":1177},[96,85354,85355],{"class":106},"    function Star() {\n",[96,85357,85358],{"class":98,"line":1183},[96,85359,2170],{"class":106},[96,85361,85362],{"class":98,"line":1197},[96,85363,85364],{"class":106},"    const ldh = new Star()\n",[96,85366,85367],{"class":98,"line":1203},[96,85368,85369],{"class":106},"    console.log(Star.prototype)\n",[96,85371,85372],{"class":98,"line":1294},[96,85373,85374],{"class":106},"    console.log(Star.prototype.constructor === Star)\n",[96,85376,85377,85379,85381],{"class":98,"line":1300},[96,85378,52396],{"class":106},[96,85380,51792],{"class":51279},[96,85382,51286],{"class":106},[96,85384,85385,85387,85389],{"class":98,"line":1312},[96,85386,51764],{"class":106},[96,85388,51779],{"class":51279},[96,85390,51286],{"class":106},[14,85392,85393],{},[1445,85394],{"alt":18,"src":85395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[14,85397,85398],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[87,85400,85402],{"className":53046,"code":85401,"language":53048,"meta":18,"style":18},"  \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",[93,85403,85404,85412,85416,85420,85424,85429,85434,85439,85443,85448,85453,85458,85463,85468,85473,85477,85481,85486,85491,85496,85500,85505,85510,85514,85518,85522],{"__ignoreMap":18},[96,85405,85406,85408,85410],{"class":98,"line":99},[96,85407,52123],{"class":106},[96,85409,51792],{"class":51279},[96,85411,51286],{"class":106},[96,85413,85414],{"class":98,"line":19},[96,85415,85350],{"class":106},[96,85417,85418],{"class":98,"line":1162},[96,85419,85355],{"class":106},[96,85421,85422],{"class":98,"line":1177},[96,85423,2170],{"class":106},[96,85425,85426],{"class":98,"line":1183},[96,85427,85428],{"class":106},"    \u002F\u002F const ldh = new Star()\n",[96,85430,85431],{"class":98,"line":1197},[96,85432,85433],{"class":106},"    \u002F\u002F console.log(Star.prototype)\n",[96,85435,85436],{"class":98,"line":1203},[96,85437,85438],{"class":106},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[96,85440,85441],{"class":98,"line":1294},[96,85442,2383],{"emptyLinePlaceholder":23},[96,85444,85445],{"class":98,"line":1300},[96,85446,85447],{"class":106},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[96,85449,85450],{"class":98,"line":1312},[96,85451,85452],{"class":106},"    \u002F\u002F Star.prototype.sing = function () {\n",[96,85454,85455],{"class":98,"line":1595},[96,85456,85457],{"class":106},"    \u002F\u002F   console.log('唱歌')\n",[96,85459,85460],{"class":98,"line":1600},[96,85461,85462],{"class":106},"    \u002F\u002F }\n",[96,85464,85465],{"class":98,"line":1606},[96,85466,85467],{"class":106},"    \u002F\u002F Star.prototype.dance = function () {\n",[96,85469,85470],{"class":98,"line":1611},[96,85471,85472],{"class":106},"    \u002F\u002F   console.log('跳舞')\n",[96,85474,85475],{"class":98,"line":1625},[96,85476,85462],{"class":106},[96,85478,85479],{"class":98,"line":1630},[96,85480,85369],{"class":106},[96,85482,85483],{"class":98,"line":1636},[96,85484,85485],{"class":106},"    Star.prototype = {\n",[96,85487,85488],{"class":98,"line":1657},[96,85489,85490],{"class":106},"      sing: function () {\n",[96,85492,85493],{"class":98,"line":1662},[96,85494,85495],{"class":106},"        console.log('唱歌')\n",[96,85497,85498],{"class":98,"line":1676},[96,85499,77871],{"class":106},[96,85501,85502],{"class":98,"line":1681},[96,85503,85504],{"class":106},"      dance: function () {\n",[96,85506,85507],{"class":98,"line":1710},[96,85508,85509],{"class":106},"        console.log('跳舞')\n",[96,85511,85512],{"class":98,"line":1715},[96,85513,52377],{"class":106},[96,85515,85516],{"class":98,"line":1732},[96,85517,2170],{"class":106},[96,85519,85520],{"class":98,"line":1737},[96,85521,85369],{"class":106},[96,85523,85524,85526,85528],{"class":98,"line":1742},[96,85525,52396],{"class":106},[96,85527,51792],{"class":51279},[96,85529,51286],{"class":106},[14,85531,85532],{},"进行输出结果后会发现：",[14,85534,85535],{},[1445,85536],{"alt":18,"src":85537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[14,85539,85540],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[14,85542,85543],{},"所以，要重新指回创造这个原型对象的构造函数",[87,85545,85547],{"className":71192,"code":85546,"language":71194,"meta":18,"style":18},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[93,85548,85549,85563,85568,85573,85584,85597,85602,85613,85627,85631],{"__ignoreMap":18},[96,85550,85551,85554,85556,85559,85561],{"class":98,"line":99},[96,85552,85553],{"class":155},"Star",[96,85555,665],{"class":106},[96,85557,85558],{"class":155},"prototype",[96,85560,13548],{"class":102},[96,85562,15556],{"class":106},[96,85564,85565],{"class":98,"line":19},[96,85566,85567],{"class":165},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[96,85569,85570],{"class":98,"line":1162},[96,85571,85572],{"class":106},"  constructor: Star,\n",[96,85574,85575,85578,85580,85582],{"class":98,"line":1177},[96,85576,85577],{"class":1946},"  sing",[96,85579,51416],{"class":106},[96,85581,54428],{"class":102},[96,85583,54431],{"class":106},[96,85585,85586,85588,85590,85592,85595],{"class":98,"line":1183},[96,85587,73732],{"class":106},[96,85589,58226],{"class":1946},[96,85591,107],{"class":106},[96,85593,85594],{"class":211},"'唱歌'",[96,85596,113],{"class":106},[96,85598,85599],{"class":98,"line":1197},[96,85600,85601],{"class":106},"   },\n",[96,85603,85604,85607,85609,85611],{"class":98,"line":1203},[96,85605,85606],{"class":1946},"   dance",[96,85608,51416],{"class":106},[96,85610,54428],{"class":102},[96,85612,54431],{"class":106},[96,85614,85615,85618,85620,85622,85625],{"class":98,"line":1294},[96,85616,85617],{"class":106},"     console.",[96,85619,58226],{"class":1946},[96,85621,107],{"class":106},[96,85623,85624],{"class":211},"'跳舞'",[96,85626,113],{"class":106},[96,85628,85629],{"class":98,"line":1300},[96,85630,4292],{"class":106},[96,85632,85633],{"class":98,"line":1312},[96,85634,1548],{"class":106},[14,85636,85637],{},[1445,85638],{"alt":18,"src":85639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[14,85641,85642],{},"总结1：",[14,85644,85645],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[14,85647,85648],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[14,85650,85651],{},"constructor指的是他的来源",[14,85653,85654],{},[1445,85655],{"alt":18,"src":85656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[14,85658,85659],{},[1445,85660],{"alt":18,"src":85661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[14,85663,85664],{},"总结2：",[14,85666,85667],{},[1445,85668],{"alt":18,"src":85669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[14,85671,85672],{},[1445,85673],{"alt":18,"src":85674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[14,85676,85677],{},[1445,85678],{"alt":18,"src":85679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[67,85681,85683],{"id":85682},"_4134-对象原型","4.13.4 对象原型",[14,85685,85686],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[14,85688,85689],{},"对象原型就是__proto__这个属性",[14,85691,85692],{},[1445,85693],{"alt":18,"src":85694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[14,85696,85697],{},[1445,85698],{"alt":18,"src":85699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[14,85701,85702],{},[1445,85703],{"alt":18,"src":85704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[14,85706,85707],{},[1445,85708],{"alt":18,"src":85709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[87,85711,85713],{"className":53046,"code":85712,"language":53048,"meta":18,"style":18},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[93,85714,85715,85723,85731,85735,85739,85743,85748,85756],{"__ignoreMap":18},[96,85716,85717,85719,85721],{"class":98,"line":99},[96,85718,1017],{"class":106},[96,85720,51779],{"class":51279},[96,85722,51286],{"class":106},[96,85724,85725,85727,85729],{"class":98,"line":19},[96,85726,52123],{"class":106},[96,85728,51792],{"class":51279},[96,85730,51286],{"class":106},[96,85732,85733],{"class":98,"line":1162},[96,85734,85355],{"class":106},[96,85736,85737],{"class":98,"line":1177},[96,85738,2170],{"class":106},[96,85740,85741],{"class":98,"line":1183},[96,85742,85364],{"class":106},[96,85744,85745],{"class":98,"line":1197},[96,85746,85747],{"class":106},"    console.log(ldh)\n",[96,85749,85750,85752,85754],{"class":98,"line":1203},[96,85751,52396],{"class":106},[96,85753,51792],{"class":51279},[96,85755,51286],{"class":106},[96,85757,85758,85760,85762],{"class":98,"line":1294},[96,85759,51764],{"class":106},[96,85761,51779],{"class":51279},[96,85763,51286],{"class":106},[14,85765,85766],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[14,85768,85769],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[14,85771,85772],{},[1445,85773],{"alt":18,"src":85774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[14,85776,85777],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[14,85779,85780],{},"对象原型指向原型对象",[14,85782,85783],{},[1445,85784],{"alt":18,"src":85785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[14,85787,85788],{},[1445,85789],{"alt":18,"src":85790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[14,85792,85793],{},[1445,85794],{"alt":18,"src":85795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[67,85797,85799],{"id":85798},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[14,85801,85802],{},[1445,85803],{"alt":18,"src":85804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[50,85806,85807,85810,85813,85816],{},[53,85808,85809],{},"构造函数通过new的形式实例化得到实例对象",[53,85811,85812],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[53,85814,85815],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[53,85817,85818],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[14,85820,85821],{},[1445,85822],{"alt":18,"src":85823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[14,85825,85826],{},"题目梳理：",[14,85828,85829],{},[1445,85830],{"alt":18,"src":85831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[67,85833,85835],{"id":85834},"_4136-原型继承","4.13.6 原型继承",[14,85837,85838],{},[1445,85839],{"alt":18,"src":85840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[14,85842,85843],{},[1445,85844],{"alt":18,"src":85845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[14,85847,85848],{},[1445,85849],{"alt":18,"src":85850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[14,85852,85853],{},[1445,85854],{"alt":18,"src":85855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[14,85857,85858],{},[1445,85859],{"alt":18,"src":85860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[14,85862,85863],{},[1445,85864],{"alt":18,"src":85865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[14,85867,85868],{},[1445,85869],{"alt":18,"src":85870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[14,85872,85873],{},[1445,85874],{"alt":18,"src":85875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[14,85877,85878],{},"回顾：构造函数每次new得到对象都是不同的",[67,85880,85882],{"id":85881},"_4137-原型链","4.13.7 原型链",[14,85884,85885],{},[1445,85886],{"alt":18,"src":85887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[14,85889,85890],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[14,85892,85893],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[14,85895,85896],{},"大哥是Object",[14,85898,85899],{},[1445,85900],{"alt":18,"src":85901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[14,85903,85904],{},[1445,85905],{"alt":18,"src":85906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[14,85908,85909],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[14,85911,85912],{},"万物皆对象",[67,85914,85916],{"id":85915},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[14,85918,85919],{},"模态框",[14,85921,85922],{},"以后遇见这个效果直接使用这个就行",[14,85924,85925],{},[1445,85926],{"alt":18,"src":85927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[14,85929,85930],{},[1445,85931],{"alt":18,"src":85932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[14,85934,85935],{},[1445,85936],{"alt":18,"src":85937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[14,85939,85940],{},[1445,85941],{"alt":18,"src":85942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[14,85944,85945],{},"补充知识点：",[50,85947,85948],{},[53,85949,85950],{},"append()",[14,85952,85953],{},[1445,85954],{"alt":18,"src":85955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[87,85957,85959],{"className":50612,"code":85958,"language":50614,"meta":18,"style":18},"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",[93,85960,85961,85966,85971,85976,85980,85984,85988,85993,85998,86003,86007],{"__ignoreMap":18},[96,85962,85963],{"class":98,"line":99},[96,85964,85965],{"class":106},"append(param1)\n",[96,85967,85968],{"class":98,"line":19},[96,85969,85970],{"class":106},"append(param1, param2)\n",[96,85972,85973],{"class":98,"line":1162},[96,85974,85975],{"class":106},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[96,85977,85978],{"class":98,"line":1177},[96,85979,2383],{"emptyLinePlaceholder":23},[96,85981,85982],{"class":98,"line":1183},[96,85983,2383],{"emptyLinePlaceholder":23},[96,85985,85986],{"class":98,"line":1197},[96,85987,2383],{"emptyLinePlaceholder":23},[96,85989,85990],{"class":98,"line":1203},[96,85991,85992],{"class":106},"let div = document.createElement(\"div\");\n",[96,85994,85995],{"class":98,"line":1294},[96,85996,85997],{"class":106},"let p = document.createElement(\"p\");\n",[96,85999,86000],{"class":98,"line":1300},[96,86001,86002],{"class":106},"div.append(p);\n",[96,86004,86005],{"class":98,"line":1312},[96,86006,2383],{"emptyLinePlaceholder":23},[96,86008,86009,86012,86014],{"class":98,"line":1595},[96,86010,86011],{"class":106},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[96,86013,14],{"class":51279},[96,86015,86016],{"class":106},"> ]\n",[50,86018,86019],{"start":19},[53,86020,86021],{},"remove()",[14,86023,86024],{},"自己删自己",[14,86026,86027],{},[1445,86028],{"alt":18,"src":86029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[87,86031,86033],{"className":50612,"code":86032,"language":50614,"meta":18,"style":18},"\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",[93,86034,86035,86045,86059,86063,86071,86085,86105,86117,86125,86132,86144,86157,86192,86204,86215,86227,86239,86251,86278,86288,86292,86296,86305,86317,86331,86341,86353,86357,86361,86371,86382,86392,86402,86415,86428,86438,86442,86446,86455,86465,86477,86481,86485,86494,86504,86514,86526,86530,86534,86544,86560,86571,86581,86591,86603,86615,86627,86631,86635,86648,86659,86663,86671,86679,86683,86691,86711,86731,86739,86744,86770,86775,86780,86799,86804,86816,86821,86832,86842,86852,86857,86862,86866,86871,86876,86881,86901,86906,86926,86931,86945,86950,86955,86960,86976,86980,86985,87014,87019,87024,87029,87040,87044,87048,87052,87057,87082,87087,87112,87117,87126,87130,87135,87160,87164,87189,87193,87202,87206,87211,87229,87239,87243,87251,87259,87263],{"__ignoreMap":18},[96,86036,86037,86039,86041,86043],{"class":98,"line":99},[96,86038,51276],{"class":106},[96,86040,51280],{"class":51279},[96,86042,51283],{"class":1946},[96,86044,51286],{"class":106},[96,86046,86047,86049,86051,86053,86055,86057],{"class":98,"line":19},[96,86048,1017],{"class":106},[96,86050,50614],{"class":51279},[96,86052,51295],{"class":1946},[96,86054,152],{"class":106},[96,86056,51300],{"class":211},[96,86058,51286],{"class":106},[96,86060,86061],{"class":98,"line":1162},[96,86062,2383],{"emptyLinePlaceholder":23},[96,86064,86065,86067,86069],{"class":98,"line":1177},[96,86066,1017],{"class":106},[96,86068,51313],{"class":51279},[96,86070,51286],{"class":106},[96,86072,86073,86075,86077,86079,86081,86083],{"class":98,"line":1183},[96,86074,52123],{"class":106},[96,86076,51323],{"class":51279},[96,86078,51326],{"class":1946},[96,86080,152],{"class":106},[96,86082,51331],{"class":211},[96,86084,51286],{"class":106},[96,86086,86087,86089,86091,86093,86095,86097,86099,86101,86103],{"class":98,"line":1197},[96,86088,52123],{"class":106},[96,86090,51323],{"class":51279},[96,86092,14904],{"class":1946},[96,86094,152],{"class":106},[96,86096,51370],{"class":211},[96,86098,51350],{"class":1946},[96,86100,152],{"class":106},[96,86102,51377],{"class":211},[96,86104,51286],{"class":106},[96,86106,86107,86109,86111,86113,86115],{"class":98,"line":1203},[96,86108,52123],{"class":106},[96,86110,51386],{"class":51279},[96,86112,51389],{"class":106},[96,86114,51386],{"class":51279},[96,86116,51286],{"class":106},[96,86118,86119,86121,86123],{"class":98,"line":1294},[96,86120,52123],{"class":106},[96,86122,5110],{"class":51279},[96,86124,51286],{"class":106},[96,86126,86127,86130],{"class":98,"line":1300},[96,86128,86129],{"class":1946},"    .modal",[96,86131,15556],{"class":106},[96,86133,86134,86136,86138,86140,86142],{"class":98,"line":1312},[96,86135,54750],{"class":155},[96,86137,51416],{"class":106},[96,86139,3956],{"class":155},[96,86141,51471],{"class":102},[96,86143,1273],{"class":106},[96,86145,86146,86149,86151,86153,86155],{"class":98,"line":1595},[96,86147,86148],{"class":155},"      min-height",[96,86150,51416],{"class":106},[96,86152,418],{"class":155},[96,86154,51471],{"class":102},[96,86156,1273],{"class":106},[96,86158,86159,86161,86163,86165,86167,86169,86171,86173,86175,86177,86179,86181,86183,86185,86187,86190],{"class":98,"line":1600},[96,86160,78729],{"class":155},[96,86162,51416],{"class":106},[96,86164,298],{"class":155},[96,86166,4076],{"class":155},[96,86168,2021],{"class":155},[96,86170,51471],{"class":102},[96,86172,78746],{"class":155},[96,86174,107],{"class":106},[96,86176,298],{"class":155},[96,86178,12419],{"class":106},[96,86180,298],{"class":155},[96,86182,12419],{"class":106},[96,86184,298],{"class":155},[96,86186,12419],{"class":106},[96,86188,86189],{"class":155},"0.1",[96,86191,2702],{"class":106},[96,86193,86194,86196,86198,86200,86202],{"class":98,"line":1606},[96,86195,55113],{"class":155},[96,86197,51416],{"class":106},[96,86199,400],{"class":155},[96,86201,51471],{"class":102},[96,86203,1273],{"class":106},[96,86205,86206,86208,86210,86213],{"class":98,"line":1611},[96,86207,54738],{"class":155},[96,86209,51416],{"class":106},[96,86211,86212],{"class":155},"fixed",[96,86214,1273],{"class":106},[96,86216,86217,86220,86222,86225],{"class":98,"line":1625},[96,86218,86219],{"class":155},"      z-index",[96,86221,51416],{"class":106},[96,86223,86224],{"class":155},"999",[96,86226,1273],{"class":106},[96,86228,86229,86231,86233,86235,86237],{"class":98,"line":1630},[96,86230,54817],{"class":155},[96,86232,51416],{"class":106},[96,86234,763],{"class":155},[96,86236,435],{"class":102},[96,86238,1273],{"class":106},[96,86240,86241,86243,86245,86247,86249],{"class":98,"line":1636},[96,86242,54926],{"class":155},[96,86244,51416],{"class":106},[96,86246,763],{"class":155},[96,86248,435],{"class":102},[96,86250,1273],{"class":106},[96,86252,86253,86255,86257,86259,86261,86264,86266,86268,86270,86272,86274,86276],{"class":98,"line":1657},[96,86254,78770],{"class":155},[96,86256,51416],{"class":106},[96,86258,78775],{"class":155},[96,86260,107],{"class":106},[96,86262,86263],{"class":155},"-50",[96,86265,435],{"class":102},[96,86267,12419],{"class":106},[96,86269,86263],{"class":155},[96,86271,435],{"class":102},[96,86273,12419],{"class":106},[96,86275,298],{"class":155},[96,86277,2702],{"class":106},[96,86279,86280,86282,86284,86286],{"class":98,"line":1662},[96,86281,54863],{"class":155},[96,86283,51416],{"class":106},[96,86285,60821],{"class":155},[96,86287,1273],{"class":106},[96,86289,86290],{"class":98,"line":1676},[96,86291,2170],{"class":106},[96,86293,86294],{"class":98,"line":1681},[96,86295,2383],{"emptyLinePlaceholder":23},[96,86297,86298,86300,86303],{"class":98,"line":1710},[96,86299,86129],{"class":1946},[96,86301,86302],{"class":1946}," .header",[96,86304,15556],{"class":106},[96,86306,86307,86309,86311,86313,86315],{"class":98,"line":1715},[96,86308,57338],{"class":155},[96,86310,51416],{"class":106},[96,86312,508],{"class":155},[96,86314,51471],{"class":102},[96,86316,1273],{"class":106},[96,86318,86319,86321,86323,86325,86327,86329],{"class":98,"line":1732},[96,86320,54674],{"class":155},[96,86322,51416],{"class":106},[96,86324,298],{"class":155},[96,86326,2021],{"class":155},[96,86328,51471],{"class":102},[96,86330,1273],{"class":106},[96,86332,86333,86335,86337,86339],{"class":98,"line":1737},[96,86334,54738],{"class":155},[96,86336,51416],{"class":106},[96,86338,54743],{"class":155},[96,86340,1273],{"class":106},[96,86342,86343,86345,86347,86349,86351],{"class":98,"line":1742},[96,86344,54901],{"class":155},[96,86346,51416],{"class":106},[96,86348,807],{"class":155},[96,86350,51471],{"class":102},[96,86352,1273],{"class":106},[96,86354,86355],{"class":98,"line":1747},[96,86356,2170],{"class":106},[96,86358,86359],{"class":98,"line":1761},[96,86360,2383],{"emptyLinePlaceholder":23},[96,86362,86363,86365,86367,86369],{"class":98,"line":1766},[96,86364,86129],{"class":1946},[96,86366,86302],{"class":1946},[96,86368,3015],{"class":51279},[96,86370,15556],{"class":106},[96,86372,86373,86376,86378,86380],{"class":98,"line":2560},[96,86374,86375],{"class":155},"      font-style",[96,86377,51416],{"class":106},[96,86379,63820],{"class":155},[96,86381,1273],{"class":106},[96,86383,86384,86386,86388,86390],{"class":98,"line":2574},[96,86385,57395],{"class":155},[96,86387,51416],{"class":106},[96,86389,62049],{"class":155},[96,86391,1273],{"class":106},[96,86393,86394,86396,86398,86400],{"class":98,"line":2582},[96,86395,54738],{"class":155},[96,86397,51416],{"class":106},[96,86399,54810],{"class":155},[96,86401,1273],{"class":106},[96,86403,86404,86407,86409,86411,86413],{"class":98,"line":2587},[96,86405,86406],{"class":155},"      right",[96,86408,51416],{"class":106},[96,86410,682],{"class":155},[96,86412,51471],{"class":102},[96,86414,1273],{"class":106},[96,86416,86417,86419,86421,86424,86426],{"class":98,"line":2593},[96,86418,54926],{"class":155},[96,86420,51416],{"class":106},[96,86422,86423],{"class":155},"-2",[96,86425,51471],{"class":102},[96,86427,1273],{"class":106},[96,86429,86430,86432,86434,86436],{"class":98,"line":2599},[96,86431,62004],{"class":155},[96,86433,51416],{"class":106},[96,86435,62009],{"class":155},[96,86437,1273],{"class":106},[96,86439,86440],{"class":98,"line":2604},[96,86441,2170],{"class":106},[96,86443,86444],{"class":98,"line":7932},[96,86445,2383],{"emptyLinePlaceholder":23},[96,86447,86448,86450,86453],{"class":98,"line":7956},[96,86449,86129],{"class":1946},[96,86451,86452],{"class":1946}," .body",[96,86454,15556],{"class":106},[96,86456,86457,86459,86461,86463],{"class":98,"line":7961},[96,86458,57265],{"class":155},[96,86460,51416],{"class":106},[96,86462,51571],{"class":155},[96,86464,1273],{"class":106},[96,86466,86467,86469,86471,86473,86475],{"class":98,"line":7967},[96,86468,54674],{"class":155},[96,86470,51416],{"class":106},[96,86472,553],{"class":155},[96,86474,51471],{"class":102},[96,86476,1273],{"class":106},[96,86478,86479],{"class":98,"line":7994},[96,86480,2170],{"class":106},[96,86482,86483],{"class":98,"line":7999},[96,86484,2383],{"emptyLinePlaceholder":23},[96,86486,86487,86489,86492],{"class":98,"line":8005},[96,86488,86129],{"class":1946},[96,86490,86491],{"class":1946}," .footer",[96,86493,15556],{"class":106},[96,86495,86496,86498,86500,86502],{"class":98,"line":8017},[96,86497,54988],{"class":155},[96,86499,51416],{"class":106},[96,86501,51456],{"class":155},[96,86503,1273],{"class":106},[96,86505,86506,86508,86510,86512],{"class":98,"line":8029},[96,86507,54999],{"class":155},[96,86509,51416],{"class":106},[96,86511,51559],{"class":155},[96,86513,1273],{"class":106},[96,86515,86516,86518,86520,86522,86524],{"class":98,"line":8041},[96,86517,54674],{"class":155},[96,86519,51416],{"class":106},[96,86521,553],{"class":155},[96,86523,51471],{"class":102},[96,86525,1273],{"class":106},[96,86527,86528],{"class":98,"line":9700},[96,86529,2170],{"class":106},[96,86531,86532],{"class":98,"line":9725},[96,86533,2383],{"emptyLinePlaceholder":23},[96,86535,86536,86538,86540,86542],{"class":98,"line":9748},[96,86537,86129],{"class":1946},[96,86539,86491],{"class":1946},[96,86541,1381],{"class":51279},[96,86543,15556],{"class":106},[96,86545,86546,86548,86550,86552,86554,86556,86558],{"class":98,"line":9772},[96,86547,54674],{"class":155},[96,86549,51416],{"class":106},[96,86551,178],{"class":155},[96,86553,51471],{"class":102},[96,86555,2066],{"class":155},[96,86557,51471],{"class":102},[96,86559,1273],{"class":106},[96,86561,86562,86564,86566,86569],{"class":98,"line":9777},[96,86563,61700],{"class":155},[96,86565,51416],{"class":106},[96,86567,86568],{"class":155},"#ccc",[96,86570,1273],{"class":106},[96,86572,86573,86575,86577,86579],{"class":98,"line":9782},[96,86574,63949],{"class":155},[96,86576,51416],{"class":106},[96,86578,54716],{"class":155},[96,86580,1273],{"class":106},[96,86582,86583,86585,86587,86589],{"class":98,"line":9787},[96,86584,57395],{"class":155},[96,86586,51416],{"class":106},[96,86588,60821],{"class":155},[96,86590,1273],{"class":106},[96,86592,86593,86595,86597,86599,86601],{"class":98,"line":9796},[96,86594,55113],{"class":155},[96,86596,51416],{"class":106},[96,86598,184],{"class":155},[96,86600,51471],{"class":102},[96,86602,1273],{"class":106},[96,86604,86605,86607,86609,86611,86613],{"class":98,"line":9801},[96,86606,61729],{"class":155},[96,86608,51416],{"class":106},[96,86610,553],{"class":155},[96,86612,51471],{"class":102},[96,86614,1273],{"class":106},[96,86616,86617,86619,86621,86623,86625],{"class":98,"line":9807},[96,86618,54901],{"class":155},[96,86620,51416],{"class":106},[96,86622,656],{"class":155},[96,86624,51471],{"class":102},[96,86626,1273],{"class":106},[96,86628,86629],{"class":98,"line":9828},[96,86630,2170],{"class":106},[96,86632,86633],{"class":98,"line":9834},[96,86634,2383],{"emptyLinePlaceholder":23},[96,86636,86637,86639,86641,86643,86646],{"class":98,"line":9848},[96,86638,86129],{"class":1946},[96,86640,86491],{"class":1946},[96,86642,1381],{"class":51279},[96,86644,86645],{"class":1946},".submit",[96,86647,15556],{"class":106},[96,86649,86650,86652,86654,86657],{"class":98,"line":9854},[96,86651,54863],{"class":155},[96,86653,51416],{"class":106},[96,86655,86656],{"class":155},"#369",[96,86658,1273],{"class":106},[96,86660,86661],{"class":98,"line":9881},[96,86662,2170],{"class":106},[96,86664,86665,86667,86669],{"class":98,"line":9890},[96,86666,52396],{"class":106},[96,86668,5110],{"class":51279},[96,86670,51286],{"class":106},[96,86672,86673,86675,86677],{"class":98,"line":9896},[96,86674,51764],{"class":106},[96,86676,51313],{"class":51279},[96,86678,51286],{"class":106},[96,86680,86681],{"class":98,"line":9904},[96,86682,2383],{"emptyLinePlaceholder":23},[96,86684,86685,86687,86689],{"class":98,"line":9909},[96,86686,1017],{"class":106},[96,86688,51779],{"class":51279},[96,86690,51286],{"class":106},[96,86692,86693,86695,86697,86699,86701,86704,86707,86709],{"class":98,"line":16588},[96,86694,52123],{"class":106},[96,86696,53866],{"class":51279},[96,86698,14943],{"class":1946},[96,86700,152],{"class":106},[96,86702,86703],{"class":211},"\"delete\"",[96,86705,86706],{"class":106},">删除\u003C\u002F",[96,86708,53866],{"class":51279},[96,86710,51286],{"class":106},[96,86712,86713,86715,86717,86719,86721,86724,86727,86729],{"class":98,"line":16594},[96,86714,52123],{"class":106},[96,86716,53866],{"class":51279},[96,86718,14943],{"class":1946},[96,86720,152],{"class":106},[96,86722,86723],{"class":211},"\"login\"",[96,86725,86726],{"class":106},">登录\u003C\u002F",[96,86728,53866],{"class":51279},[96,86730,51286],{"class":106},[96,86732,86733,86735,86737],{"class":98,"line":16617},[96,86734,52123],{"class":106},[96,86736,51792],{"class":51279},[96,86738,51286],{"class":106},[96,86740,86741],{"class":98,"line":16623},[96,86742,86743],{"class":165},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[96,86745,86746,86748,86751,86753,86755,86757,86759,86761,86764,86766,86768],{"class":98,"line":16646},[96,86747,70063],{"class":102},[96,86749,86750],{"class":1946}," Modal",[96,86752,107],{"class":106},[96,86754,51386],{"class":5200},[96,86756,13548],{"class":102},[96,86758,69909],{"class":211},[96,86760,12419],{"class":106},[96,86762,86763],{"class":5200},"message",[96,86765,13548],{"class":102},[96,86767,69909],{"class":211},[96,86769,12426],{"class":106},[96,86771,86772],{"class":98,"line":16660},[96,86773,86774],{"class":165},"      \u002F\u002F 创建Model 模态框盒子\n",[96,86776,86777],{"class":98,"line":16680},[96,86778,86779],{"class":165},"      \u002F\u002F 1.1 创建div标签\n",[96,86781,86782,86784,86787,86789,86791,86793,86795,86797],{"class":98,"line":16686},[96,86783,70030],{"class":155},[96,86785,86786],{"class":106},".modalBox ",[96,86788,152],{"class":102},[96,86790,54375],{"class":106},[96,86792,70130],{"class":1946},[96,86794,107],{"class":106},[96,86796,81910],{"class":211},[96,86798,113],{"class":106},[96,86800,86801],{"class":98,"line":16697},[96,86802,86803],{"class":165},"      \u002F\u002F 1.2 给div 添加类名为model\n",[96,86805,86806,86808,86811,86813],{"class":98,"line":16720},[96,86807,70030],{"class":155},[96,86809,86810],{"class":106},".modalBox.className ",[96,86812,152],{"class":102},[96,86814,86815],{"class":211}," 'modal'\n",[96,86817,86818],{"class":98,"line":16742},[96,86819,86820],{"class":165},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[96,86822,86823,86825,86828,86830],{"class":98,"line":16747},[96,86824,70030],{"class":155},[96,86826,86827],{"class":106},".modalBox.innerHTML ",[96,86829,152],{"class":102},[96,86831,70147],{"class":211},[96,86833,86834,86837,86839],{"class":98,"line":16753},[96,86835,86836],{"class":211},"        \u003Cdiv class=\"header\">${",[96,86838,51386],{"class":106},[96,86840,86841],{"class":211},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[96,86843,86844,86847,86849],{"class":98,"line":16767},[96,86845,86846],{"class":211},"        \u003Cdiv class=\"body\">${",[96,86848,86763],{"class":106},[96,86850,86851],{"class":211},"}\u003C\u002Fdiv>\n",[96,86853,86854],{"class":98,"line":16780},[96,86855,86856],{"class":211},"      `\n",[96,86858,86859],{"class":98,"line":16785},[96,86860,86861],{"class":165},"      \u002F\u002F console.log(this.modalBox)\n",[96,86863,86864],{"class":98,"line":16799},[96,86865,2170],{"class":106},[96,86867,86868],{"class":98,"line":16804},[96,86869,86870],{"class":165},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[96,86872,86873],{"class":98,"line":16810},[96,86874,86875],{"class":165},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[96,86877,86878],{"class":98,"line":16815},[96,86879,86880],{"class":165},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[96,86882,86883,86886,86888,86890,86892,86895,86897,86899],{"class":98,"line":16829},[96,86884,86885],{"class":155},"    Modal",[96,86887,665],{"class":106},[96,86889,85558],{"class":155},[96,86891,665],{"class":106},[96,86893,86894],{"class":1946},"open",[96,86896,13548],{"class":102},[96,86898,58897],{"class":102},[96,86900,54431],{"class":106},[96,86902,86903],{"class":98,"line":16834},[96,86904,86905],{"class":165},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[96,86907,86908,86910,86913,86915,86917,86919,86921,86924],{"class":98,"line":16839},[96,86909,58207],{"class":102},[96,86911,86912],{"class":155}," box",[96,86914,13548],{"class":102},[96,86916,54375],{"class":106},[96,86918,54378],{"class":1946},[96,86920,107],{"class":106},[96,86922,86923],{"class":211},"'.modal'",[96,86925,113],{"class":106},[96,86927,86928],{"class":98,"line":16853},[96,86929,86930],{"class":165},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[96,86932,86933,86936,86938,86941,86943],{"class":98,"line":16865},[96,86934,86935],{"class":106},"      box ",[96,86937,1698],{"class":102},[96,86939,86940],{"class":106}," box.",[96,86942,56985],{"class":1946},[96,86944,1959],{"class":106},[96,86946,86947],{"class":98,"line":16870},[96,86948,86949],{"class":165},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[96,86951,86952],{"class":98,"line":16883},[96,86953,86954],{"class":165},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[96,86956,86957],{"class":98,"line":16888},[96,86958,86959],{"class":165},"      \u002F\u002F append可以增加对象\n",[96,86961,86962,86965,86968,86970,86973],{"class":98,"line":16893},[96,86963,86964],{"class":106},"      document.body.",[96,86966,86967],{"class":1946},"append",[96,86969,107],{"class":106},[96,86971,86972],{"class":155},"this",[96,86974,86975],{"class":106},".modalBox)\n",[96,86977,86978],{"class":98,"line":16898},[96,86979,2383],{"emptyLinePlaceholder":23},[96,86981,86982],{"class":98,"line":16911},[96,86983,86984],{"class":165},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[96,86986,86987,86989,86992,86994,86996,86999,87001,87003,87005,87007,87010,87012],{"class":98,"line":16916},[96,86988,70030],{"class":155},[96,86990,86991],{"class":106},".modalBox.",[96,86993,54378],{"class":1946},[96,86995,107],{"class":106},[96,86997,86998],{"class":211},"'i'",[96,87000,30805],{"class":106},[96,87002,57792],{"class":1946},[96,87004,107],{"class":106},[96,87006,57797],{"class":211},[96,87008,87009],{"class":106},", () ",[96,87011,84701],{"class":102},[96,87013,15556],{"class":106},[96,87015,87016],{"class":98,"line":32612},[96,87017,87018],{"class":165},"        \u002F\u002F 这个地方需要用到箭头函数\n",[96,87020,87021],{"class":98,"line":32618},[96,87022,87023],{"class":165},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[96,87025,87026],{"class":98,"line":32624},[96,87027,87028],{"class":165},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[96,87030,87031,87033,87035,87038],{"class":98,"line":32630},[96,87032,64705],{"class":155},[96,87034,665],{"class":106},[96,87036,87037],{"class":1946},"close",[96,87039,1959],{"class":106},[96,87041,87042],{"class":98,"line":32636},[96,87043,64794],{"class":106},[96,87045,87046],{"class":98,"line":32647},[96,87047,2170],{"class":106},[96,87049,87050],{"class":98,"line":32653},[96,87051,2383],{"emptyLinePlaceholder":23},[96,87053,87054],{"class":98,"line":32673},[96,87055,87056],{"class":165},"    \u002F\u002F 测试一下 点击 删除按钮\n",[96,87058,87059,87061,87063,87065,87068,87070,87072,87074,87076,87078,87080],{"class":98,"line":32679},[96,87060,52386],{"class":106},[96,87062,54378],{"class":1946},[96,87064,107],{"class":106},[96,87066,87067],{"class":211},"'#delete'",[96,87069,30805],{"class":106},[96,87071,57792],{"class":1946},[96,87073,107],{"class":106},[96,87075,57797],{"class":211},[96,87077,87009],{"class":106},[96,87079,84701],{"class":102},[96,87081,15556],{"class":106},[96,87083,87084],{"class":98,"line":32690},[96,87085,87086],{"class":165},"      \u002F\u002F 先调用Model构造函数\n",[96,87088,87089,87091,87094,87096,87098,87100,87102,87105,87107,87110],{"class":98,"line":32696},[96,87090,58207],{"class":102},[96,87092,87093],{"class":155}," del",[96,87095,13548],{"class":102},[96,87097,11562],{"class":102},[96,87099,86750],{"class":1946},[96,87101,107],{"class":106},[96,87103,87104],{"class":211},"'温馨的提示'",[96,87106,12419],{"class":106},[96,87108,87109],{"class":211},"'您没有删除权限操作'",[96,87111,113],{"class":106},[96,87113,87114],{"class":98,"line":32702},[96,87115,87116],{"class":165},"      \u002F\u002F 实例对象调用open方法\n",[96,87118,87119,87122,87124],{"class":98,"line":32708},[96,87120,87121],{"class":106},"      del.",[96,87123,86894],{"class":1946},[96,87125,1959],{"class":106},[96,87127,87128],{"class":98,"line":32714},[96,87129,33440],{"class":106},[96,87131,87132],{"class":98,"line":32720},[96,87133,87134],{"class":165},"    \u002F\u002F 测试一下 点击 登录按钮\n",[96,87136,87137,87139,87141,87143,87146,87148,87150,87152,87154,87156,87158],{"class":98,"line":32726},[96,87138,52386],{"class":106},[96,87140,54378],{"class":1946},[96,87142,107],{"class":106},[96,87144,87145],{"class":211},"'#login'",[96,87147,30805],{"class":106},[96,87149,57792],{"class":1946},[96,87151,107],{"class":106},[96,87153,57797],{"class":211},[96,87155,87009],{"class":106},[96,87157,84701],{"class":102},[96,87159,15556],{"class":106},[96,87161,87162],{"class":98,"line":32732},[96,87163,87086],{"class":165},[96,87165,87166,87168,87171,87173,87175,87177,87179,87182,87184,87187],{"class":98,"line":32752},[96,87167,58207],{"class":102},[96,87169,87170],{"class":155}," log",[96,87172,13548],{"class":102},[96,87174,11562],{"class":102},[96,87176,86750],{"class":1946},[96,87178,107],{"class":106},[96,87180,87181],{"class":211},"'友情提示'",[96,87183,12419],{"class":106},[96,87185,87186],{"class":211},"'您还没有登录呢'",[96,87188,113],{"class":106},[96,87190,87191],{"class":98,"line":32758},[96,87192,87116],{"class":165},[96,87194,87195,87198,87200],{"class":98,"line":32774},[96,87196,87197],{"class":106},"      log.",[96,87199,86894],{"class":1946},[96,87201,1959],{"class":106},[96,87203,87204],{"class":98,"line":32780},[96,87205,33440],{"class":106},[96,87207,87208],{"class":98,"line":32794},[96,87209,87210],{"class":165},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[96,87212,87213,87215,87217,87219,87221,87223,87225,87227],{"class":98,"line":32800},[96,87214,86885],{"class":155},[96,87216,665],{"class":106},[96,87218,85558],{"class":155},[96,87220,665],{"class":106},[96,87222,87037],{"class":1946},[96,87224,13548],{"class":102},[96,87226,58897],{"class":102},[96,87228,54431],{"class":106},[96,87230,87231,87233,87235,87237],{"class":98,"line":32815},[96,87232,70030],{"class":155},[96,87234,86991],{"class":106},[96,87236,56985],{"class":1946},[96,87238,1959],{"class":106},[96,87240,87241],{"class":98,"line":32821},[96,87242,2170],{"class":106},[96,87244,87245,87247,87249],{"class":98,"line":32830},[96,87246,52396],{"class":106},[96,87248,51792],{"class":51279},[96,87250,51286],{"class":106},[96,87252,87253,87255,87257],{"class":98,"line":32836},[96,87254,51764],{"class":106},[96,87256,51779],{"class":51279},[96,87258,51286],{"class":106},[96,87260,87261],{"class":98,"line":32845},[96,87262,2383],{"emptyLinePlaceholder":23},[96,87264,87265,87267,87269],{"class":98,"line":32851},[96,87266,51764],{"class":106},[96,87268,50614],{"class":51279},[96,87270,51286],{"class":106},[14,87272,87273],{},[1445,87274],{"alt":18,"src":87275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[38,87277,87279],{"id":87278},"_414-深浅拷贝","4.14 深浅拷贝",[67,87281,87283],{"id":87282},"_4141-浅拷贝","4.14.1 浅拷贝",[14,87285,87286],{},[1445,87287],{"alt":18,"src":87288},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[14,87290,87291],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[14,87293,87294],{},[1445,87295],{"alt":18,"src":87296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[14,87298,87299],{},[1445,87300],{"alt":18,"src":87301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[14,87303,87304],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[14,87306,87307],{},[1445,87308],{"alt":18,"src":87309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[14,87311,11316],{},[14,87313,87314],{},[1445,87315],{"alt":18,"src":87316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[67,87318,87320],{"id":87319},"_4142-深拷贝","4.14.2 深拷贝",[14,87322,87323],{},"深拷贝：拷贝的是对象，不是地址",[14,87325,87326],{},"常用的三种方法：",[50,87328,87329,87332,87335],{},[53,87330,87331],{},"通过递归实现深拷贝",[53,87333,87334],{},"lodash\u002FcloneDeep",[53,87336,87337],{},"通过JSON.stringify()实现",[21982,87339,87341],{"id":87340},"_41421-递归函数","4.14.2.1 递归函数",[14,87343,87344],{},[1445,87345],{"alt":18,"src":87346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[50,87348,87349],{},[53,87350,87351],{},"死递归占溢出：",[87,87353,87355],{"className":53046,"code":87354,"language":53048,"meta":18,"style":18},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[93,87356,87357,87365,87373,87377,87382,87386,87391,87399],{"__ignoreMap":18},[96,87358,87359,87361,87363],{"class":98,"line":99},[96,87360,1017],{"class":106},[96,87362,51779],{"class":51279},[96,87364,51286],{"class":106},[96,87366,87367,87369,87371],{"class":98,"line":19},[96,87368,52123],{"class":106},[96,87370,51792],{"class":51279},[96,87372,51286],{"class":106},[96,87374,87375],{"class":98,"line":1162},[96,87376,77122],{"class":106},[96,87378,87379],{"class":98,"line":1177},[96,87380,87381],{"class":106},"      fn()\n",[96,87383,87384],{"class":98,"line":1183},[96,87385,2170],{"class":106},[96,87387,87388],{"class":98,"line":1197},[96,87389,87390],{"class":106},"    fn()\n",[96,87392,87393,87395,87397],{"class":98,"line":1203},[96,87394,52396],{"class":106},[96,87396,51792],{"class":51279},[96,87398,51286],{"class":106},[96,87400,87401,87403,87405],{"class":98,"line":1294},[96,87402,51764],{"class":106},[96,87404,51779],{"class":51279},[96,87406,51286],{"class":106},[50,87408,87409],{"start":19},[53,87410,87411],{},"递归函数要加判断条件：",[14,87413,87414],{},[1445,87415],{"alt":18,"src":87416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[50,87418,87419],{"start":1162},[53,87420,87421],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[87,87423,87425],{"className":50612,"code":87424,"language":50614,"meta":18,"style":18},"\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",[93,87426,87427,87437,87451,87455,87463,87477,87497,87509,87517,87521,87529,87541,87549,87557,87582,87594,87598,87605,87613,87621,87625],{"__ignoreMap":18},[96,87428,87429,87431,87433,87435],{"class":98,"line":99},[96,87430,51276],{"class":106},[96,87432,51280],{"class":51279},[96,87434,51283],{"class":1946},[96,87436,51286],{"class":106},[96,87438,87439,87441,87443,87445,87447,87449],{"class":98,"line":19},[96,87440,1017],{"class":106},[96,87442,50614],{"class":51279},[96,87444,51295],{"class":1946},[96,87446,152],{"class":106},[96,87448,51300],{"class":211},[96,87450,51286],{"class":106},[96,87452,87453],{"class":98,"line":1162},[96,87454,2383],{"emptyLinePlaceholder":23},[96,87456,87457,87459,87461],{"class":98,"line":1177},[96,87458,1017],{"class":106},[96,87460,51313],{"class":51279},[96,87462,51286],{"class":106},[96,87464,87465,87467,87469,87471,87473,87475],{"class":98,"line":1183},[96,87466,52123],{"class":106},[96,87468,51323],{"class":51279},[96,87470,51326],{"class":1946},[96,87472,152],{"class":106},[96,87474,51331],{"class":211},[96,87476,51286],{"class":106},[96,87478,87479,87481,87483,87485,87487,87489,87491,87493,87495],{"class":98,"line":1197},[96,87480,52123],{"class":106},[96,87482,51323],{"class":51279},[96,87484,14904],{"class":1946},[96,87486,152],{"class":106},[96,87488,51370],{"class":211},[96,87490,51350],{"class":1946},[96,87492,152],{"class":106},[96,87494,51377],{"class":211},[96,87496,51286],{"class":106},[96,87498,87499,87501,87503,87505,87507],{"class":98,"line":1203},[96,87500,52123],{"class":106},[96,87502,51386],{"class":51279},[96,87504,51389],{"class":106},[96,87506,51386],{"class":51279},[96,87508,51286],{"class":106},[96,87510,87511,87513,87515],{"class":98,"line":1294},[96,87512,51764],{"class":106},[96,87514,51313],{"class":51279},[96,87516,51286],{"class":106},[96,87518,87519],{"class":98,"line":1300},[96,87520,2383],{"emptyLinePlaceholder":23},[96,87522,87523,87525,87527],{"class":98,"line":1312},[96,87524,1017],{"class":106},[96,87526,51779],{"class":51279},[96,87528,51286],{"class":106},[96,87530,87531,87533,87535,87537,87539],{"class":98,"line":1595},[96,87532,52123],{"class":106},[96,87534,51590],{"class":51279},[96,87536,55293],{"class":106},[96,87538,51590],{"class":51279},[96,87540,51286],{"class":106},[96,87542,87543,87545,87547],{"class":98,"line":1600},[96,87544,52123],{"class":106},[96,87546,51792],{"class":51279},[96,87548,51286],{"class":106},[96,87550,87551,87553,87555],{"class":98,"line":1606},[96,87552,70063],{"class":102},[96,87554,73752],{"class":1946},[96,87556,10837],{"class":106},[96,87558,87559,87561,87563,87565,87567,87569,87571,87573,87575,87577,87580],{"class":98,"line":1611},[96,87560,55750],{"class":106},[96,87562,54378],{"class":1946},[96,87564,107],{"class":106},[96,87566,81910],{"class":211},[96,87568,74228],{"class":106},[96,87570,152],{"class":102},[96,87572,11562],{"class":102},[96,87574,73768],{"class":1946},[96,87576,17245],{"class":106},[96,87578,87579],{"class":1946},"toLocaleString",[96,87581,1959],{"class":106},[96,87583,87584,87587,87590,87592],{"class":98,"line":1625},[96,87585,87586],{"class":1946},"      setTimeout",[96,87588,87589],{"class":106},"(getTime, ",[96,87591,6394],{"class":155},[96,87593,113],{"class":106},[96,87595,87596],{"class":98,"line":1630},[96,87597,2170],{"class":106},[96,87599,87600,87603],{"class":98,"line":1636},[96,87601,87602],{"class":1946},"    getTime",[96,87604,1959],{"class":106},[96,87606,87607,87609,87611],{"class":98,"line":1657},[96,87608,52396],{"class":106},[96,87610,51792],{"class":51279},[96,87612,51286],{"class":106},[96,87614,87615,87617,87619],{"class":98,"line":1662},[96,87616,51764],{"class":106},[96,87618,51779],{"class":51279},[96,87620,51286],{"class":106},[96,87622,87623],{"class":98,"line":1676},[96,87624,2383],{"emptyLinePlaceholder":23},[96,87626,87627,87629,87631],{"class":98,"line":1681},[96,87628,51764],{"class":106},[96,87630,50614],{"class":51279},[96,87632,51286],{"class":106},[14,87634,87635],{},[1445,87636],{"alt":18,"src":87637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[50,87639,87640],{"start":1177},[53,87641,87331],{},[14,87643,87644],{},[1445,87645],{"alt":18,"src":87646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[14,87648,87649],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[14,87651,39168],{},[14,87653,87654],{},"这个是简易版的递归函数深拷贝",[14,87656,87657],{},"一定要注意先数组再对象，因为万物皆可对象",[87,87659,87661],{"className":50612,"code":87660,"language":50614,"meta":18,"style":18},"\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",[93,87662,87663,87673,87687,87691,87699,87713,87733,87745,87753,87757,87765,87773,87783,87792,87800,87816,87820,87828,87832,87836,87848,87853,87872,87888,87893,87898,87903,87918,87923,87928,87937,87945,87962,87970,87976,87984,87989,87994,88003,88007,88011,88015,88026,88035,88045,88059,88069,88077,88085,88093,88097],{"__ignoreMap":18},[96,87664,87665,87667,87669,87671],{"class":98,"line":99},[96,87666,51276],{"class":106},[96,87668,51280],{"class":51279},[96,87670,51283],{"class":1946},[96,87672,51286],{"class":106},[96,87674,87675,87677,87679,87681,87683,87685],{"class":98,"line":19},[96,87676,1017],{"class":106},[96,87678,50614],{"class":51279},[96,87680,51295],{"class":1946},[96,87682,152],{"class":106},[96,87684,51300],{"class":211},[96,87686,51286],{"class":106},[96,87688,87689],{"class":98,"line":1162},[96,87690,2383],{"emptyLinePlaceholder":23},[96,87692,87693,87695,87697],{"class":98,"line":1177},[96,87694,1017],{"class":106},[96,87696,51313],{"class":51279},[96,87698,51286],{"class":106},[96,87700,87701,87703,87705,87707,87709,87711],{"class":98,"line":1183},[96,87702,52123],{"class":106},[96,87704,51323],{"class":51279},[96,87706,51326],{"class":1946},[96,87708,152],{"class":106},[96,87710,51331],{"class":211},[96,87712,51286],{"class":106},[96,87714,87715,87717,87719,87721,87723,87725,87727,87729,87731],{"class":98,"line":1197},[96,87716,52123],{"class":106},[96,87718,51323],{"class":51279},[96,87720,14904],{"class":1946},[96,87722,152],{"class":106},[96,87724,51370],{"class":211},[96,87726,51350],{"class":1946},[96,87728,152],{"class":106},[96,87730,51377],{"class":211},[96,87732,51286],{"class":106},[96,87734,87735,87737,87739,87741,87743],{"class":98,"line":1203},[96,87736,52123],{"class":106},[96,87738,51386],{"class":51279},[96,87740,51389],{"class":106},[96,87742,51386],{"class":51279},[96,87744,51286],{"class":106},[96,87746,87747,87749,87751],{"class":98,"line":1294},[96,87748,51764],{"class":106},[96,87750,51313],{"class":51279},[96,87752,51286],{"class":106},[96,87754,87755],{"class":98,"line":1300},[96,87756,2383],{"emptyLinePlaceholder":23},[96,87758,87759,87761,87763],{"class":98,"line":1312},[96,87760,1017],{"class":106},[96,87762,51779],{"class":51279},[96,87764,51286],{"class":106},[96,87766,87767,87769,87771],{"class":98,"line":1595},[96,87768,52123],{"class":106},[96,87770,51792],{"class":51279},[96,87772,51286],{"class":106},[96,87774,87775,87777,87779,87781],{"class":98,"line":1600},[96,87776,11205],{"class":102},[96,87778,69950],{"class":155},[96,87780,13548],{"class":102},[96,87782,15556],{"class":106},[96,87784,87785,87787,87790],{"class":98,"line":1606},[96,87786,71595],{"class":106},[96,87788,87789],{"class":211},"'pink'",[96,87791,31445],{"class":106},[96,87793,87794,87796,87798],{"class":98,"line":1611},[96,87795,71605],{"class":106},[96,87797,757],{"class":155},[96,87799,31445],{"class":106},[96,87801,87802,87805,87808,87810,87813],{"class":98,"line":1625},[96,87803,87804],{"class":106},"      hobby: [",[96,87806,87807],{"class":211},"'乒乓球'",[96,87809,12419],{"class":106},[96,87811,87812],{"class":211},"'足球'",[96,87814,87815],{"class":106},"],\n",[96,87817,87818],{"class":98,"line":1630},[96,87819,77851],{"class":106},[96,87821,87822,87825],{"class":98,"line":1636},[96,87823,87824],{"class":106},"        baby: ",[96,87826,87827],{"class":211},"'小pink'\n",[96,87829,87830],{"class":98,"line":1657},[96,87831,52377],{"class":106},[96,87833,87834],{"class":98,"line":1662},[96,87835,2170],{"class":106},[96,87837,87838,87840,87843,87845],{"class":98,"line":1676},[96,87839,11205],{"class":102},[96,87841,87842],{"class":155}," o",[96,87844,13548],{"class":102},[96,87846,87847],{"class":106}," {}\n",[96,87849,87850],{"class":98,"line":1681},[96,87851,87852],{"class":165},"    \u002F\u002F 拷贝函数\n",[96,87854,87855,87857,87860,87862,87865,87867,87870],{"class":98,"line":1710},[96,87856,70063],{"class":102},[96,87858,87859],{"class":1946}," deepCopy",[96,87861,107],{"class":106},[96,87863,87864],{"class":5200},"newObj",[96,87866,12419],{"class":106},[96,87868,87869],{"class":5200},"oldObj",[96,87871,12426],{"class":106},[96,87873,87874,87876,87878,87880,87883,87885],{"class":98,"line":1715},[96,87875,52263],{"class":102},[96,87877,1641],{"class":106},[96,87879,51826],{"class":102},[96,87881,87882],{"class":106}," k ",[96,87884,26022],{"class":102},[96,87886,87887],{"class":106}," oldObj) {\n",[96,87889,87890],{"class":98,"line":1732},[96,87891,87892],{"class":165},"        \u002F\u002F 处理数组的问题\n",[96,87894,87895],{"class":98,"line":1737},[96,87896,87897],{"class":165},"        \u002F\u002F 判断是否属于数组\n",[96,87899,87900],{"class":98,"line":1742},[96,87901,87902],{"class":165},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[96,87904,87905,87907,87910,87913,87916],{"class":98,"line":1747},[96,87906,2480],{"class":102},[96,87908,87909],{"class":106}," (oldObj[k] ",[96,87911,87912],{"class":102},"instanceof",[96,87914,87915],{"class":1946}," Array",[96,87917,12426],{"class":106},[96,87919,87920],{"class":98,"line":1761},[96,87921,87922],{"class":165},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[96,87924,87925],{"class":98,"line":1766},[96,87926,87927],{"class":165},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[96,87929,87930,87933,87935],{"class":98,"line":2560},[96,87931,87932],{"class":106},"          newObj[k] ",[96,87934,152],{"class":102},[96,87936,51817],{"class":106},[96,87938,87939,87942],{"class":98,"line":2574},[96,87940,87941],{"class":1946},"          deepCopy",[96,87943,87944],{"class":106},"(newObj[k], oldObj[k])\n",[96,87946,87947,87949,87951,87953,87955,87957,87960],{"class":98,"line":2582},[96,87948,80059],{"class":106},[96,87950,1684],{"class":102},[96,87952,1687],{"class":102},[96,87954,87909],{"class":106},[96,87956,87912],{"class":102},[96,87958,87959],{"class":1946}," Object",[96,87961,12426],{"class":106},[96,87963,87964,87966,87968],{"class":98,"line":2587},[96,87965,87932],{"class":106},[96,87967,152],{"class":102},[96,87969,87847],{"class":106},[96,87971,87972,87974],{"class":98,"line":2593},[96,87973,87941],{"class":1946},[96,87975,87944],{"class":106},[96,87977,87978,87980,87982],{"class":98,"line":2599},[96,87979,80059],{"class":106},[96,87981,1684],{"class":102},[96,87983,15556],{"class":106},[96,87985,87986],{"class":98,"line":2604},[96,87987,87988],{"class":165},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[96,87990,87991],{"class":98,"line":7932},[96,87992,87993],{"class":165},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[96,87995,87996,87998,88000],{"class":98,"line":7956},[96,87997,87932],{"class":106},[96,87999,152],{"class":102},[96,88001,88002],{"class":106}," oldObj[k]\n",[96,88004,88005],{"class":98,"line":7961},[96,88006,2512],{"class":106},[96,88008,88009],{"class":98,"line":7967},[96,88010,52377],{"class":106},[96,88012,88013],{"class":98,"line":7994},[96,88014,2170],{"class":106},[96,88016,88017,88020,88023],{"class":98,"line":7999},[96,88018,88019],{"class":1946},"    deepCopy",[96,88021,88022],{"class":106},"(o, obj) ",[96,88024,88025],{"class":165},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[96,88027,88028,88030,88032],{"class":98,"line":8005},[96,88029,73732],{"class":106},[96,88031,58226],{"class":1946},[96,88033,88034],{"class":106},"(o)\n",[96,88036,88037,88040,88042],{"class":98,"line":8017},[96,88038,88039],{"class":106},"    o.age ",[96,88041,152],{"class":102},[96,88043,88044],{"class":155}," 20\n",[96,88046,88047,88050,88052,88054,88056],{"class":98,"line":8029},[96,88048,88049],{"class":106},"    o.hobby[",[96,88051,298],{"class":155},[96,88053,4426],{"class":106},[96,88055,152],{"class":102},[96,88057,88058],{"class":211}," '篮球'\n",[96,88060,88061,88064,88066],{"class":98,"line":8041},[96,88062,88063],{"class":106},"    o.family ",[96,88065,152],{"class":102},[96,88067,88068],{"class":211}," '老pink'\n",[96,88070,88071,88073,88075],{"class":98,"line":9700},[96,88072,73732],{"class":106},[96,88074,58226],{"class":1946},[96,88076,70015],{"class":106},[96,88078,88079,88081,88083],{"class":98,"line":9725},[96,88080,52396],{"class":106},[96,88082,51792],{"class":51279},[96,88084,51286],{"class":106},[96,88086,88087,88089,88091],{"class":98,"line":9748},[96,88088,51764],{"class":106},[96,88090,51779],{"class":51279},[96,88092,51286],{"class":106},[96,88094,88095],{"class":98,"line":9772},[96,88096,2383],{"emptyLinePlaceholder":23},[96,88098,88099,88101,88103],{"class":98,"line":9777},[96,88100,51764],{"class":106},[96,88102,50614],{"class":51279},[96,88104,51286],{"class":106},[14,88106,88107],{},[1445,88108],{"alt":18,"src":88109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[21982,88111,88113,88114],{"id":88112},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[256,88115,88116],{},"js库lodash里面cloneDeep内部实现了深拷贝",[14,88118,88119],{},[345,88120,88121],{"href":88121,"rel":88122},"https:\u002F\u002Fwww.lodashjs.com\u002F",[23850],[14,88124,88125],{},"lodash里边的方法都要加上一个下划线_",[14,88127,88128],{},"_.cloneDeep()",[87,88130,88132],{"className":50612,"code":88131,"language":50614,"meta":18,"style":18},"\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",[93,88133,88134,88144,88158,88162,88170,88184,88204,88216,88224,88228,88236,88241,88260,88268,88278,88286,88294,88306,88310,88316,88320,88324,88340,88348,88357,88365,88373,88381,88385],{"__ignoreMap":18},[96,88135,88136,88138,88140,88142],{"class":98,"line":99},[96,88137,51276],{"class":106},[96,88139,51280],{"class":51279},[96,88141,51283],{"class":1946},[96,88143,51286],{"class":106},[96,88145,88146,88148,88150,88152,88154,88156],{"class":98,"line":19},[96,88147,1017],{"class":106},[96,88149,50614],{"class":51279},[96,88151,51295],{"class":1946},[96,88153,152],{"class":106},[96,88155,51300],{"class":211},[96,88157,51286],{"class":106},[96,88159,88160],{"class":98,"line":1162},[96,88161,2383],{"emptyLinePlaceholder":23},[96,88163,88164,88166,88168],{"class":98,"line":1177},[96,88165,1017],{"class":106},[96,88167,51313],{"class":51279},[96,88169,51286],{"class":106},[96,88171,88172,88174,88176,88178,88180,88182],{"class":98,"line":1183},[96,88173,52123],{"class":106},[96,88175,51323],{"class":51279},[96,88177,51326],{"class":1946},[96,88179,152],{"class":106},[96,88181,51331],{"class":211},[96,88183,51286],{"class":106},[96,88185,88186,88188,88190,88192,88194,88196,88198,88200,88202],{"class":98,"line":1197},[96,88187,52123],{"class":106},[96,88189,51323],{"class":51279},[96,88191,14904],{"class":1946},[96,88193,152],{"class":106},[96,88195,51370],{"class":211},[96,88197,51350],{"class":1946},[96,88199,152],{"class":106},[96,88201,51377],{"class":211},[96,88203,51286],{"class":106},[96,88205,88206,88208,88210,88212,88214],{"class":98,"line":1203},[96,88207,52123],{"class":106},[96,88209,51386],{"class":51279},[96,88211,51389],{"class":106},[96,88213,51386],{"class":51279},[96,88215,51286],{"class":106},[96,88217,88218,88220,88222],{"class":98,"line":1294},[96,88219,51764],{"class":106},[96,88221,51313],{"class":51279},[96,88223,51286],{"class":106},[96,88225,88226],{"class":98,"line":1300},[96,88227,2383],{"emptyLinePlaceholder":23},[96,88229,88230,88232,88234],{"class":98,"line":1312},[96,88231,1017],{"class":106},[96,88233,51779],{"class":51279},[96,88235,51286],{"class":106},[96,88237,88238],{"class":98,"line":1595},[96,88239,88240],{"class":165},"  \u003C!-- 先引用这个库 -->\n",[96,88242,88243,88245,88247,88249,88251,88254,88256,88258],{"class":98,"line":1600},[96,88244,52123],{"class":106},[96,88246,51792],{"class":51279},[96,88248,55218],{"class":1946},[96,88250,152],{"class":106},[96,88252,88253],{"class":211},"\"lodash.min.js\"",[96,88255,55293],{"class":106},[96,88257,51792],{"class":51279},[96,88259,51286],{"class":106},[96,88261,88262,88264,88266],{"class":98,"line":1606},[96,88263,52123],{"class":106},[96,88265,51792],{"class":51279},[96,88267,51286],{"class":106},[96,88269,88270,88272,88274,88276],{"class":98,"line":1611},[96,88271,11205],{"class":102},[96,88273,69950],{"class":155},[96,88275,13548],{"class":102},[96,88277,15556],{"class":106},[96,88279,88280,88282,88284],{"class":98,"line":1625},[96,88281,71595],{"class":106},[96,88283,87789],{"class":211},[96,88285,31445],{"class":106},[96,88287,88288,88290,88292],{"class":98,"line":1630},[96,88289,71605],{"class":106},[96,88291,757],{"class":155},[96,88293,31445],{"class":106},[96,88295,88296,88298,88300,88302,88304],{"class":98,"line":1636},[96,88297,87804],{"class":106},[96,88299,87807],{"class":211},[96,88301,12419],{"class":106},[96,88303,87812],{"class":211},[96,88305,87815],{"class":106},[96,88307,88308],{"class":98,"line":1657},[96,88309,77851],{"class":106},[96,88311,88312,88314],{"class":98,"line":1662},[96,88313,87824],{"class":106},[96,88315,87827],{"class":211},[96,88317,88318],{"class":98,"line":1676},[96,88319,52377],{"class":106},[96,88321,88322],{"class":98,"line":1681},[96,88323,2170],{"class":106},[96,88325,88326,88328,88330,88332,88335,88338],{"class":98,"line":1710},[96,88327,11205],{"class":102},[96,88329,87842],{"class":155},[96,88331,13548],{"class":102},[96,88333,88334],{"class":106}," _.",[96,88336,88337],{"class":1946},"cloneDeep",[96,88339,70015],{"class":106},[96,88341,88342,88344,88346],{"class":98,"line":1715},[96,88343,73732],{"class":106},[96,88345,58226],{"class":1946},[96,88347,88034],{"class":106},[96,88349,88350,88353,88355],{"class":98,"line":1732},[96,88351,88352],{"class":106},"    o.family.baby ",[96,88354,152],{"class":102},[96,88356,88068],{"class":211},[96,88358,88359,88361,88363],{"class":98,"line":1737},[96,88360,73732],{"class":106},[96,88362,58226],{"class":1946},[96,88364,70015],{"class":106},[96,88366,88367,88369,88371],{"class":98,"line":1742},[96,88368,52396],{"class":106},[96,88370,51792],{"class":51279},[96,88372,51286],{"class":106},[96,88374,88375,88377,88379],{"class":98,"line":1747},[96,88376,51764],{"class":106},[96,88378,51779],{"class":51279},[96,88380,51286],{"class":106},[96,88382,88383],{"class":98,"line":1761},[96,88384,2383],{"emptyLinePlaceholder":23},[96,88386,88387,88389,88391],{"class":98,"line":1766},[96,88388,51764],{"class":106},[96,88390,50614],{"class":51279},[96,88392,51286],{"class":106},[14,88394,88395],{},[1445,88396],{"alt":18,"src":88397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[21982,88399,88401],{"id":88400},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[87,88403,88405],{"className":50612,"code":88404,"language":50614,"meta":18,"style":18},"\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",[93,88406,88407,88417,88431,88435,88443,88457,88477,88489,88497,88501,88509,88517,88527,88535,88543,88555,88559,88565,88569,88573,88578,88583,88588,88614,88622,88631,88639,88647,88655,88659],{"__ignoreMap":18},[96,88408,88409,88411,88413,88415],{"class":98,"line":99},[96,88410,51276],{"class":106},[96,88412,51280],{"class":51279},[96,88414,51283],{"class":1946},[96,88416,51286],{"class":106},[96,88418,88419,88421,88423,88425,88427,88429],{"class":98,"line":19},[96,88420,1017],{"class":106},[96,88422,50614],{"class":51279},[96,88424,51295],{"class":1946},[96,88426,152],{"class":106},[96,88428,51300],{"class":211},[96,88430,51286],{"class":106},[96,88432,88433],{"class":98,"line":1162},[96,88434,2383],{"emptyLinePlaceholder":23},[96,88436,88437,88439,88441],{"class":98,"line":1177},[96,88438,1017],{"class":106},[96,88440,51313],{"class":51279},[96,88442,51286],{"class":106},[96,88444,88445,88447,88449,88451,88453,88455],{"class":98,"line":1183},[96,88446,52123],{"class":106},[96,88448,51323],{"class":51279},[96,88450,51326],{"class":1946},[96,88452,152],{"class":106},[96,88454,51331],{"class":211},[96,88456,51286],{"class":106},[96,88458,88459,88461,88463,88465,88467,88469,88471,88473,88475],{"class":98,"line":1197},[96,88460,52123],{"class":106},[96,88462,51323],{"class":51279},[96,88464,14904],{"class":1946},[96,88466,152],{"class":106},[96,88468,51370],{"class":211},[96,88470,51350],{"class":1946},[96,88472,152],{"class":106},[96,88474,51377],{"class":211},[96,88476,51286],{"class":106},[96,88478,88479,88481,88483,88485,88487],{"class":98,"line":1203},[96,88480,52123],{"class":106},[96,88482,51386],{"class":51279},[96,88484,51389],{"class":106},[96,88486,51386],{"class":51279},[96,88488,51286],{"class":106},[96,88490,88491,88493,88495],{"class":98,"line":1294},[96,88492,51764],{"class":106},[96,88494,51313],{"class":51279},[96,88496,51286],{"class":106},[96,88498,88499],{"class":98,"line":1300},[96,88500,2383],{"emptyLinePlaceholder":23},[96,88502,88503,88505,88507],{"class":98,"line":1312},[96,88504,1017],{"class":106},[96,88506,51779],{"class":51279},[96,88508,51286],{"class":106},[96,88510,88511,88513,88515],{"class":98,"line":1595},[96,88512,52123],{"class":106},[96,88514,51792],{"class":51279},[96,88516,51286],{"class":106},[96,88518,88519,88521,88523,88525],{"class":98,"line":1600},[96,88520,11205],{"class":102},[96,88522,69950],{"class":155},[96,88524,13548],{"class":102},[96,88526,15556],{"class":106},[96,88528,88529,88531,88533],{"class":98,"line":1606},[96,88530,71595],{"class":106},[96,88532,87789],{"class":211},[96,88534,31445],{"class":106},[96,88536,88537,88539,88541],{"class":98,"line":1611},[96,88538,71605],{"class":106},[96,88540,757],{"class":155},[96,88542,31445],{"class":106},[96,88544,88545,88547,88549,88551,88553],{"class":98,"line":1625},[96,88546,87804],{"class":106},[96,88548,87807],{"class":211},[96,88550,12419],{"class":106},[96,88552,87812],{"class":211},[96,88554,87815],{"class":106},[96,88556,88557],{"class":98,"line":1630},[96,88558,77851],{"class":106},[96,88560,88561,88563],{"class":98,"line":1636},[96,88562,87824],{"class":106},[96,88564,87827],{"class":211},[96,88566,88567],{"class":98,"line":1657},[96,88568,52377],{"class":106},[96,88570,88571],{"class":98,"line":1662},[96,88572,2170],{"class":106},[96,88574,88575],{"class":98,"line":1676},[96,88576,88577],{"class":165},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[96,88579,88580],{"class":98,"line":1681},[96,88581,88582],{"class":165},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[96,88584,88585],{"class":98,"line":1710},[96,88586,88587],{"class":165},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[96,88589,88590,88592,88594,88596,88599,88601,88604,88606,88608,88610,88612],{"class":98,"line":1715},[96,88591,11205],{"class":102},[96,88593,87842],{"class":155},[96,88595,13548],{"class":102},[96,88597,88598],{"class":155}," JSON",[96,88600,665],{"class":106},[96,88602,88603],{"class":1946},"parse",[96,88605,107],{"class":106},[96,88607,71643],{"class":155},[96,88609,665],{"class":106},[96,88611,71648],{"class":1946},[96,88613,71651],{"class":106},[96,88615,88616,88618,88620],{"class":98,"line":1732},[96,88617,73732],{"class":106},[96,88619,58226],{"class":1946},[96,88621,88034],{"class":106},[96,88623,88624,88626,88628],{"class":98,"line":1737},[96,88625,88352],{"class":106},[96,88627,152],{"class":102},[96,88629,88630],{"class":211}," '123'\n",[96,88632,88633,88635,88637],{"class":98,"line":1742},[96,88634,73732],{"class":106},[96,88636,58226],{"class":1946},[96,88638,70015],{"class":106},[96,88640,88641,88643,88645],{"class":98,"line":1747},[96,88642,52396],{"class":106},[96,88644,51792],{"class":51279},[96,88646,51286],{"class":106},[96,88648,88649,88651,88653],{"class":98,"line":1761},[96,88650,51764],{"class":106},[96,88652,51779],{"class":51279},[96,88654,51286],{"class":106},[96,88656,88657],{"class":98,"line":1766},[96,88658,2383],{"emptyLinePlaceholder":23},[96,88660,88661,88663,88665],{"class":98,"line":2560},[96,88662,51764],{"class":106},[96,88664,50614],{"class":51279},[96,88666,51286],{"class":106},[14,88668,88669],{},[1445,88670],{"alt":18,"src":88671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[38,88673,88675],{"id":88674},"_415-异常处理","4.15 异常处理",[50,88677,88678],{},[53,88679,88680],{},"throw抛异常",[14,88682,88683],{},[1445,88684],{"alt":18,"src":88685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[50,88687,88688],{"start":19},[53,88689,88690],{},"try\u002Fcatch 捕获错误信息",[14,88692,88693],{},[1445,88694],{"alt":18,"src":88695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[87,88697,88699],{"className":50612,"code":88698,"language":50614,"meta":18,"style":18},"\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",[93,88700,88701,88711,88725,88729,88737,88751,88771,88783,88791,88795,88803,88815,88823,88832,88839,88844,88863,88872,88883,88888,88898,88903,88908,88913,88930,88934,88939,88946,88958,88962,88974,88978,88982,88987,88992,88999,89007,89015,89019],{"__ignoreMap":18},[96,88702,88703,88705,88707,88709],{"class":98,"line":99},[96,88704,51276],{"class":106},[96,88706,51280],{"class":51279},[96,88708,51283],{"class":1946},[96,88710,51286],{"class":106},[96,88712,88713,88715,88717,88719,88721,88723],{"class":98,"line":19},[96,88714,1017],{"class":106},[96,88716,50614],{"class":51279},[96,88718,51295],{"class":1946},[96,88720,152],{"class":106},[96,88722,51300],{"class":211},[96,88724,51286],{"class":106},[96,88726,88727],{"class":98,"line":1162},[96,88728,2383],{"emptyLinePlaceholder":23},[96,88730,88731,88733,88735],{"class":98,"line":1177},[96,88732,1017],{"class":106},[96,88734,51313],{"class":51279},[96,88736,51286],{"class":106},[96,88738,88739,88741,88743,88745,88747,88749],{"class":98,"line":1183},[96,88740,52123],{"class":106},[96,88742,51323],{"class":51279},[96,88744,51326],{"class":1946},[96,88746,152],{"class":106},[96,88748,51331],{"class":211},[96,88750,51286],{"class":106},[96,88752,88753,88755,88757,88759,88761,88763,88765,88767,88769],{"class":98,"line":1197},[96,88754,52123],{"class":106},[96,88756,51323],{"class":51279},[96,88758,14904],{"class":1946},[96,88760,152],{"class":106},[96,88762,51370],{"class":211},[96,88764,51350],{"class":1946},[96,88766,152],{"class":106},[96,88768,51377],{"class":211},[96,88770,51286],{"class":106},[96,88772,88773,88775,88777,88779,88781],{"class":98,"line":1203},[96,88774,52123],{"class":106},[96,88776,51386],{"class":51279},[96,88778,51389],{"class":106},[96,88780,51386],{"class":51279},[96,88782,51286],{"class":106},[96,88784,88785,88787,88789],{"class":98,"line":1294},[96,88786,51764],{"class":106},[96,88788,51313],{"class":51279},[96,88790,51286],{"class":106},[96,88792,88793],{"class":98,"line":1300},[96,88794,2383],{"emptyLinePlaceholder":23},[96,88796,88797,88799,88801],{"class":98,"line":1312},[96,88798,1017],{"class":106},[96,88800,51779],{"class":51279},[96,88802,51286],{"class":106},[96,88804,88805,88807,88809,88811,88813],{"class":98,"line":1595},[96,88806,52123],{"class":106},[96,88808,14],{"class":51279},[96,88810,53473],{"class":106},[96,88812,14],{"class":51279},[96,88814,51286],{"class":106},[96,88816,88817,88819,88821],{"class":98,"line":1600},[96,88818,52123],{"class":106},[96,88820,51792],{"class":51279},[96,88822,51286],{"class":106},[96,88824,88825,88827,88830],{"class":98,"line":1606},[96,88826,70063],{"class":102},[96,88828,88829],{"class":1946}," fn",[96,88831,10837],{"class":106},[96,88833,88834,88837],{"class":98,"line":1611},[96,88835,88836],{"class":102},"      try",[96,88838,15556],{"class":106},[96,88840,88841],{"class":98,"line":1625},[96,88842,88843],{"class":165},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[96,88845,88846,88848,88850,88852,88854,88856,88858,88861],{"class":98,"line":1630},[96,88847,61249],{"class":102},[96,88849,6809],{"class":155},[96,88851,13548],{"class":102},[96,88853,54375],{"class":106},[96,88855,54378],{"class":1946},[96,88857,107],{"class":106},[96,88859,88860],{"class":211},"'.p'",[96,88862,113],{"class":106},[96,88864,88865,88868,88870],{"class":98,"line":1636},[96,88866,88867],{"class":106},"        p.style.color ",[96,88869,152],{"class":102},[96,88871,67030],{"class":211},[96,88873,88874,88877,88880],{"class":98,"line":1657},[96,88875,88876],{"class":106},"      } ",[96,88878,88879],{"class":102},"catch",[96,88881,88882],{"class":106}," (err) {\n",[96,88884,88885],{"class":98,"line":1662},[96,88886,88887],{"class":165},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[96,88889,88890,88893,88895],{"class":98,"line":1676},[96,88891,88892],{"class":106},"        console.",[96,88894,58226],{"class":1946},[96,88896,88897],{"class":106},"(err.message)\n",[96,88899,88900],{"class":98,"line":1681},[96,88901,88902],{"class":165},"        \u002F\u002F 想要中断程序，需要加return\n",[96,88904,88905],{"class":98,"line":1710},[96,88906,88907],{"class":165},"        \u002F\u002F return\n",[96,88909,88910],{"class":98,"line":1715},[96,88911,88912],{"class":165},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[96,88914,88915,88918,88920,88923,88925,88928],{"class":98,"line":1732},[96,88916,88917],{"class":102},"        throw",[96,88919,11562],{"class":102},[96,88921,88922],{"class":1946}," Error",[96,88924,107],{"class":106},[96,88926,88927],{"class":211},"'你看看，选择器错误了吧'",[96,88929,113],{"class":106},[96,88931,88932],{"class":98,"line":1737},[96,88933,52377],{"class":106},[96,88935,88936],{"class":98,"line":1742},[96,88937,88938],{"class":165},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[96,88940,88941,88944],{"class":98,"line":1747},[96,88942,88943],{"class":102},"      finally",[96,88945,15556],{"class":106},[96,88947,88948,88951,88953,88956],{"class":98,"line":1761},[96,88949,88950],{"class":1946},"        alert",[96,88952,107],{"class":106},[96,88954,88955],{"class":211},"'弹出对话框'",[96,88957,113],{"class":106},[96,88959,88960],{"class":98,"line":1766},[96,88961,52377],{"class":106},[96,88963,88964,88966,88968,88970,88972],{"class":98,"line":2560},[96,88965,58223],{"class":106},[96,88967,58226],{"class":1946},[96,88969,107],{"class":106},[96,88971,579],{"class":155},[96,88973,113],{"class":106},[96,88975,88976],{"class":98,"line":2574},[96,88977,2383],{"emptyLinePlaceholder":23},[96,88979,88980],{"class":98,"line":2582},[96,88981,2170],{"class":106},[96,88983,88984],{"class":98,"line":2587},[96,88985,88986],{"class":165},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[96,88988,88989],{"class":98,"line":2593},[96,88990,88991],{"class":165},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[96,88993,88994,88997],{"class":98,"line":2599},[96,88995,88996],{"class":1946},"    fn",[96,88998,1959],{"class":106},[96,89000,89001,89003,89005],{"class":98,"line":2604},[96,89002,52396],{"class":106},[96,89004,51792],{"class":51279},[96,89006,51286],{"class":106},[96,89008,89009,89011,89013],{"class":98,"line":7932},[96,89010,51764],{"class":106},[96,89012,51779],{"class":51279},[96,89014,51286],{"class":106},[96,89016,89017],{"class":98,"line":7956},[96,89018,2383],{"emptyLinePlaceholder":23},[96,89020,89021,89023,89025],{"class":98,"line":7961},[96,89022,51764],{"class":106},[96,89024,50614],{"class":51279},[96,89026,51286],{"class":106},[14,89028,89029],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[50,89031,89032],{"start":1162},[53,89033,89034],{},"debugger",[14,89036,89037],{},[1445,89038],{"alt":18,"src":89039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[14,89041,89042],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[38,89044,89046],{"id":89045},"_416-处理this","4.16 处理this",[67,89048,89050],{"id":89049},"_4161-this的指向","4.16.1 this的指向",[50,89052,89053],{},[53,89054,89055],{},"普通函数的this",[14,89057,89058],{},[1445,89059],{"alt":18,"src":89060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[50,89062,89063],{"start":19},[53,89064,89065],{},"箭头函数的this",[14,89067,89068],{},[1445,89069],{"alt":18,"src":89070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[14,89072,89073],{},[1445,89074],{"alt":18,"src":89075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[14,89077,89078],{},[1445,89079],{"alt":18,"src":89080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[67,89082,89084],{"id":89083},"_4162-this的改变","4.16.2 this的改变",[14,89086,89087],{},"call() apply() bind()",[50,89089,89090],{},[53,89091,89092],{},"call()",[14,89094,89095],{},[1445,89096],{"alt":18,"src":89097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[14,89099,89100],{},"两个作用：①调用函数；②改变this指向",[87,89102,89104],{"className":53046,"code":89103,"language":53048,"meta":18,"style":18},"\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",[93,89105,89106,89114,89122,89126,89131,89135,89140,89145,89150,89154,89159,89167],{"__ignoreMap":18},[96,89107,89108,89110,89112],{"class":98,"line":99},[96,89109,1017],{"class":106},[96,89111,51779],{"class":51279},[96,89113,51286],{"class":106},[96,89115,89116,89118,89120],{"class":98,"line":19},[96,89117,52123],{"class":106},[96,89119,51792],{"class":51279},[96,89121,51286],{"class":106},[96,89123,89124],{"class":98,"line":1162},[96,89125,71502],{"class":106},[96,89127,89128],{"class":98,"line":1177},[96,89129,89130],{"class":106},"      uname: 'pink'\n",[96,89132,89133],{"class":98,"line":1183},[96,89134,2170],{"class":106},[96,89136,89137],{"class":98,"line":1197},[96,89138,89139],{"class":106},"    function fn(x, y) {\n",[96,89141,89142],{"class":98,"line":1203},[96,89143,89144],{"class":106},"      console.log(this)  \u002F\u002Fwindow\n",[96,89146,89147],{"class":98,"line":1294},[96,89148,89149],{"class":106},"      console.log(x + y)\n",[96,89151,89152],{"class":98,"line":1300},[96,89153,2170],{"class":106},[96,89155,89156],{"class":98,"line":1312},[96,89157,89158],{"class":106},"    fn.call(obj, 1, 2)\n",[96,89160,89161,89163,89165],{"class":98,"line":1595},[96,89162,52396],{"class":106},[96,89164,51792],{"class":51279},[96,89166,51286],{"class":106},[96,89168,89169,89171,89173],{"class":98,"line":1600},[96,89170,51764],{"class":106},[96,89172,51779],{"class":51279},[96,89174,51286],{"class":106},[14,89176,89177],{},[1445,89178],{"alt":18,"src":89179},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[50,89181,89182],{"start":19},[53,89183,89184],{},"apply()",[14,89186,89187],{},[1445,89188],{"alt":18,"src":89189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[14,89191,89100],{},[14,89193,89194],{},"call传递的是普通参数，而apply必须传递的是数组",[87,89196,89198],{"className":50612,"code":89197,"language":50614,"meta":18,"style":18},"\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",[93,89199,89200,89210,89224,89228,89236,89250,89270,89282,89290,89294,89302,89310,89320,89327,89331,89336,89352,89364,89378,89382,89387,89406,89411,89415,89420,89425,89433,89438,89460,89465,89481,89497,89509,89513,89518,89537,89545,89553,89557],{"__ignoreMap":18},[96,89201,89202,89204,89206,89208],{"class":98,"line":99},[96,89203,51276],{"class":106},[96,89205,51280],{"class":51279},[96,89207,51283],{"class":1946},[96,89209,51286],{"class":106},[96,89211,89212,89214,89216,89218,89220,89222],{"class":98,"line":19},[96,89213,1017],{"class":106},[96,89215,50614],{"class":51279},[96,89217,51295],{"class":1946},[96,89219,152],{"class":106},[96,89221,51300],{"class":211},[96,89223,51286],{"class":106},[96,89225,89226],{"class":98,"line":1162},[96,89227,2383],{"emptyLinePlaceholder":23},[96,89229,89230,89232,89234],{"class":98,"line":1177},[96,89231,1017],{"class":106},[96,89233,51313],{"class":51279},[96,89235,51286],{"class":106},[96,89237,89238,89240,89242,89244,89246,89248],{"class":98,"line":1183},[96,89239,52123],{"class":106},[96,89241,51323],{"class":51279},[96,89243,51326],{"class":1946},[96,89245,152],{"class":106},[96,89247,51331],{"class":211},[96,89249,51286],{"class":106},[96,89251,89252,89254,89256,89258,89260,89262,89264,89266,89268],{"class":98,"line":1197},[96,89253,52123],{"class":106},[96,89255,51323],{"class":51279},[96,89257,14904],{"class":1946},[96,89259,152],{"class":106},[96,89261,51370],{"class":211},[96,89263,51350],{"class":1946},[96,89265,152],{"class":106},[96,89267,51377],{"class":211},[96,89269,51286],{"class":106},[96,89271,89272,89274,89276,89278,89280],{"class":98,"line":1203},[96,89273,52123],{"class":106},[96,89275,51386],{"class":51279},[96,89277,51389],{"class":106},[96,89279,51386],{"class":51279},[96,89281,51286],{"class":106},[96,89283,89284,89286,89288],{"class":98,"line":1294},[96,89285,51764],{"class":106},[96,89287,51313],{"class":51279},[96,89289,51286],{"class":106},[96,89291,89292],{"class":98,"line":1300},[96,89293,2383],{"emptyLinePlaceholder":23},[96,89295,89296,89298,89300],{"class":98,"line":1312},[96,89297,1017],{"class":106},[96,89299,51779],{"class":51279},[96,89301,51286],{"class":106},[96,89303,89304,89306,89308],{"class":98,"line":1595},[96,89305,52123],{"class":106},[96,89307,51792],{"class":51279},[96,89309,51286],{"class":106},[96,89311,89312,89314,89316,89318],{"class":98,"line":1600},[96,89313,11205],{"class":102},[96,89315,69950],{"class":155},[96,89317,13548],{"class":102},[96,89319,15556],{"class":106},[96,89321,89322,89324],{"class":98,"line":1606},[96,89323,71605],{"class":106},[96,89325,89326],{"class":155},"18\n",[96,89328,89329],{"class":98,"line":1611},[96,89330,2170],{"class":106},[96,89332,89333],{"class":98,"line":1625},[96,89334,89335],{"class":165},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[96,89337,89338,89340,89342,89344,89346,89348,89350],{"class":98,"line":1630},[96,89339,70063],{"class":102},[96,89341,88829],{"class":1946},[96,89343,107],{"class":106},[96,89345,927],{"class":5200},[96,89347,12419],{"class":106},[96,89349,952],{"class":5200},[96,89351,12426],{"class":106},[96,89353,89354,89356,89358,89360,89362],{"class":98,"line":1636},[96,89355,58223],{"class":106},[96,89357,58226],{"class":1946},[96,89359,107],{"class":106},[96,89361,86972],{"class":155},[96,89363,113],{"class":106},[96,89365,89366,89368,89370,89373,89375],{"class":98,"line":1657},[96,89367,58223],{"class":106},[96,89369,58226],{"class":1946},[96,89371,89372],{"class":106},"(x ",[96,89374,588],{"class":102},[96,89376,89377],{"class":106}," y)\n",[96,89379,89380],{"class":98,"line":1662},[96,89381,2170],{"class":106},[96,89383,89384],{"class":98,"line":1676},[96,89385,89386],{"class":165},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[96,89388,89389,89392,89395,89398,89400,89402,89404],{"class":98,"line":1681},[96,89390,89391],{"class":106},"    fn.",[96,89393,89394],{"class":1946},"apply",[96,89396,89397],{"class":106},"(obj, [",[96,89399,324],{"class":155},[96,89401,12419],{"class":106},[96,89403,184],{"class":155},[96,89405,4640],{"class":106},[96,89407,89408],{"class":98,"line":1710},[96,89409,89410],{"class":165},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[96,89412,89413],{"class":98,"line":1715},[96,89414,2383],{"emptyLinePlaceholder":23},[96,89416,89417],{"class":98,"line":1732},[96,89418,89419],{"class":165},"    \u002F\u002F 使用场景：求数组最大值\n",[96,89421,89422],{"class":98,"line":1737},[96,89423,89424],{"class":165},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[96,89426,89427,89430],{"class":98,"line":1742},[96,89428,89429],{"class":165},"    \u002F\u002F console.log(max)",[96,89431,89432],{"class":165},"   \u002F\u002F3\n",[96,89434,89435],{"class":98,"line":1747},[96,89436,89437],{"class":165},"    \u002F\u002F 指向空或者Math都是可以的\n",[96,89439,89440,89442,89444,89446,89448,89450,89452,89454,89456,89458],{"class":98,"line":1761},[96,89441,11205],{"class":102},[96,89443,57674],{"class":155},[96,89445,13548],{"class":102},[96,89447,52205],{"class":106},[96,89449,418],{"class":155},[96,89451,12419],{"class":106},[96,89453,611],{"class":155},[96,89455,12419],{"class":106},[96,89457,642],{"class":155},[96,89459,33225],{"class":106},[96,89461,89462],{"class":98,"line":1766},[96,89463,89464],{"class":165},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[96,89466,89467,89469,89471,89473,89476,89478],{"class":98,"line":2560},[96,89468,11205],{"class":102},[96,89470,5935],{"class":155},[96,89472,13548],{"class":102},[96,89474,89475],{"class":106}," Math.max.",[96,89477,89394],{"class":1946},[96,89479,89480],{"class":106},"(Math, arr)\n",[96,89482,89483,89485,89488,89490,89493,89495],{"class":98,"line":2574},[96,89484,11205],{"class":102},[96,89486,89487],{"class":155}," min",[96,89489,13548],{"class":102},[96,89491,89492],{"class":106}," Math.min.",[96,89494,89394],{"class":1946},[96,89496,89480],{"class":106},[96,89498,89499,89501,89503,89506],{"class":98,"line":2582},[96,89500,73732],{"class":106},[96,89502,58226],{"class":1946},[96,89504,89505],{"class":106},"(max, min)     ",[96,89507,89508],{"class":165},"\u002F\u002F100,4\n",[96,89510,89511],{"class":98,"line":2587},[96,89512,2383],{"emptyLinePlaceholder":23},[96,89514,89515],{"class":98,"line":2593},[96,89516,89517],{"class":165},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[96,89519,89520,89522,89524,89527,89529,89531,89534],{"class":98,"line":2599},[96,89521,73732],{"class":106},[96,89523,58226],{"class":1946},[96,89525,89526],{"class":106},"(Max.",[96,89528,5999],{"class":1946},[96,89530,107],{"class":106},[96,89532,89533],{"class":102},"...",[96,89535,89536],{"class":106},"arr))\n",[96,89538,89539,89541,89543],{"class":98,"line":2604},[96,89540,52396],{"class":106},[96,89542,51792],{"class":51279},[96,89544,51286],{"class":106},[96,89546,89547,89549,89551],{"class":98,"line":7932},[96,89548,51764],{"class":106},[96,89550,51779],{"class":51279},[96,89552,51286],{"class":106},[96,89554,89555],{"class":98,"line":7956},[96,89556,2383],{"emptyLinePlaceholder":23},[96,89558,89559,89561,89563],{"class":98,"line":7961},[96,89560,51764],{"class":106},[96,89562,50614],{"class":51279},[96,89564,51286],{"class":106},[14,89566,89567],{},[1445,89568],{"alt":18,"src":89569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[50,89571,89572],{"start":1162},[53,89573,89574],{},"bind()",[14,89576,89577],{},[1445,89578],{"alt":18,"src":89579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[14,89581,89582],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[14,89584,89585],{},"bind的语法跟call很相似",[87,89587,89589],{"className":53046,"code":89588,"language":53048,"meta":18,"style":18},"\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",[93,89590,89591,89599,89607,89611,89616,89620,89624,89629,89633,89638,89643,89648,89653,89658,89663,89668,89672,89680],{"__ignoreMap":18},[96,89592,89593,89595,89597],{"class":98,"line":99},[96,89594,1017],{"class":106},[96,89596,51779],{"class":51279},[96,89598,51286],{"class":106},[96,89600,89601,89603,89605],{"class":98,"line":19},[96,89602,52123],{"class":106},[96,89604,51792],{"class":51279},[96,89606,51286],{"class":106},[96,89608,89609],{"class":98,"line":1162},[96,89610,71502],{"class":106},[96,89612,89613],{"class":98,"line":1177},[96,89614,89615],{"class":106},"      age: 18\n",[96,89617,89618],{"class":98,"line":1183},[96,89619,2170],{"class":106},[96,89621,89622],{"class":98,"line":1197},[96,89623,77122],{"class":106},[96,89625,89626],{"class":98,"line":1203},[96,89627,89628],{"class":106},"      console.log(this)\n",[96,89630,89631],{"class":98,"line":1294},[96,89632,2170],{"class":106},[96,89634,89635],{"class":98,"line":1300},[96,89636,89637],{"class":106},"    \u002F\u002F 1.bind 不会调用函数\n",[96,89639,89640],{"class":98,"line":1312},[96,89641,89642],{"class":106},"    \u002F\u002F 2.bind能改变this的指向\n",[96,89644,89645],{"class":98,"line":1595},[96,89646,89647],{"class":106},"    fn.bind()\n",[96,89649,89650],{"class":98,"line":1600},[96,89651,89652],{"class":106},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[96,89654,89655],{"class":98,"line":1606},[96,89656,89657],{"class":106},"    const fun = fn.bind(obj)\n",[96,89659,89660],{"class":98,"line":1611},[96,89661,89662],{"class":106},"    \u002F\u002F console.log(fun)\n",[96,89664,89665],{"class":98,"line":1625},[96,89666,89667],{"class":106},"    \u002F\u002F 调用,查看this的指向\n",[96,89669,89670],{"class":98,"line":1630},[96,89671,52630],{"class":106},[96,89673,89674,89676,89678],{"class":98,"line":1636},[96,89675,52396],{"class":106},[96,89677,51792],{"class":51279},[96,89679,51286],{"class":106},[96,89681,89682,89684,89686],{"class":98,"line":1657},[96,89683,51764],{"class":106},[96,89685,51779],{"class":51279},[96,89687,51286],{"class":106},[14,89689,89690],{},[1445,89691],{"alt":18,"src":89692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[50,89694,89695],{"start":1177},[53,89696,89697],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[87,89699,89701],{"className":53046,"code":89700,"language":53048,"meta":18,"style":18},"\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",[93,89702,89703,89711,89724,89732,89737,89741,89746,89751,89756,89761,89766,89771,89776,89781,89785,89793],{"__ignoreMap":18},[96,89704,89705,89707,89709],{"class":98,"line":99},[96,89706,1017],{"class":106},[96,89708,51779],{"class":51279},[96,89710,51286],{"class":106},[96,89712,89713,89715,89717,89720,89722],{"class":98,"line":19},[96,89714,52123],{"class":106},[96,89716,53866],{"class":51279},[96,89718,89719],{"class":106},">禁用\u003C\u002F",[96,89721,53866],{"class":51279},[96,89723,51286],{"class":106},[96,89725,89726,89728,89730],{"class":98,"line":1162},[96,89727,52123],{"class":106},[96,89729,51792],{"class":51279},[96,89731,51286],{"class":106},[96,89733,89734],{"class":98,"line":1177},[96,89735,89736],{"class":106},"    const btn = document.querySelector('button')\n",[96,89738,89739],{"class":98,"line":1183},[96,89740,58995],{"class":106},[96,89742,89743],{"class":98,"line":1197},[96,89744,89745],{"class":106},"      this.disabled = true\n",[96,89747,89748],{"class":98,"line":1203},[96,89749,89750],{"class":106},"      \u002F\u002F 定时器是window进行调用的\n",[96,89752,89753],{"class":98,"line":1294},[96,89754,89755],{"class":106},"      setTimeout(function () {\n",[96,89757,89758],{"class":98,"line":1300},[96,89759,89760],{"class":106},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[96,89762,89763],{"class":98,"line":1312},[96,89764,89765],{"class":106},"        this.disabled = false\n",[96,89767,89768],{"class":98,"line":1595},[96,89769,89770],{"class":106},"      }.bind(this), 2000)\n",[96,89772,89773],{"class":98,"line":1600},[96,89774,89775],{"class":106},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[96,89777,89778],{"class":98,"line":1606},[96,89779,89780],{"class":106},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[96,89782,89783],{"class":98,"line":1611},[96,89784,33440],{"class":106},[96,89786,89787,89789,89791],{"class":98,"line":1625},[96,89788,52396],{"class":106},[96,89790,51792],{"class":51279},[96,89792,51286],{"class":106},[96,89794,89795,89797,89799],{"class":98,"line":1630},[96,89796,51764],{"class":106},[96,89798,51779],{"class":51279},[96,89800,51286],{"class":106},[50,89802,89803],{"start":1183},[53,89804,21937],{},[14,89806,89807],{},[1445,89808],{"alt":18,"src":89809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[38,89811,89813],{"id":89812},"_417-性能优化","4.17 性能优化",[67,89815,89817],{"id":89816},"_4171-防抖","4.17.1 防抖",[14,89819,89820],{},[1445,89821],{"alt":18,"src":89822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[14,89824,89825],{},[256,89826,89827],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[14,89829,89830],{},"防抖实现方式：",[1114,89832,89833],{},[53,89834,89835],{},"lodash 提供了防抖处理",[14,89837,89838],{},"_.debounce(func,[wait=0],[options={}])",[14,89840,89841],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[87,89843,89845],{"className":50612,"code":89844,"language":50614,"meta":18,"style":18},"\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",[93,89846,89847,89857,89871,89875,89883,89897,89917,89929,89937,89943,89953,89965,89977,89988,90000,90010,90020,90033,90037,90045,90053,90057,90065,90083,90101,90109,90128,90138,90147,90158,90163,90167,90172,90177,90182,90207,90215,90223,90227],{"__ignoreMap":18},[96,89848,89849,89851,89853,89855],{"class":98,"line":99},[96,89850,51276],{"class":106},[96,89852,51280],{"class":51279},[96,89854,51283],{"class":1946},[96,89856,51286],{"class":106},[96,89858,89859,89861,89863,89865,89867,89869],{"class":98,"line":19},[96,89860,1017],{"class":106},[96,89862,50614],{"class":51279},[96,89864,51295],{"class":1946},[96,89866,152],{"class":106},[96,89868,51300],{"class":211},[96,89870,51286],{"class":106},[96,89872,89873],{"class":98,"line":1162},[96,89874,2383],{"emptyLinePlaceholder":23},[96,89876,89877,89879,89881],{"class":98,"line":1177},[96,89878,1017],{"class":106},[96,89880,51313],{"class":51279},[96,89882,51286],{"class":106},[96,89884,89885,89887,89889,89891,89893,89895],{"class":98,"line":1183},[96,89886,52123],{"class":106},[96,89888,51323],{"class":51279},[96,89890,51326],{"class":1946},[96,89892,152],{"class":106},[96,89894,51331],{"class":211},[96,89896,51286],{"class":106},[96,89898,89899,89901,89903,89905,89907,89909,89911,89913,89915],{"class":98,"line":1197},[96,89900,52123],{"class":106},[96,89902,51323],{"class":51279},[96,89904,14904],{"class":1946},[96,89906,152],{"class":106},[96,89908,51370],{"class":211},[96,89910,51350],{"class":1946},[96,89912,152],{"class":106},[96,89914,51377],{"class":211},[96,89916,51286],{"class":106},[96,89918,89919,89921,89923,89925,89927],{"class":98,"line":1203},[96,89920,52123],{"class":106},[96,89922,51386],{"class":51279},[96,89924,51389],{"class":106},[96,89926,51386],{"class":51279},[96,89928,51286],{"class":106},[96,89930,89931,89933,89935],{"class":98,"line":1294},[96,89932,52123],{"class":106},[96,89934,5110],{"class":51279},[96,89936,51286],{"class":106},[96,89938,89939,89941],{"class":98,"line":1300},[96,89940,54731],{"class":1946},[96,89942,15556],{"class":106},[96,89944,89945,89947,89949,89951],{"class":98,"line":1312},[96,89946,72575],{"class":155},[96,89948,51416],{"class":106},[96,89950,60484],{"class":155},[96,89952,1273],{"class":106},[96,89954,89955,89957,89959,89961,89963],{"class":98,"line":1595},[96,89956,54750],{"class":155},[96,89958,51416],{"class":106},[96,89960,1705],{"class":155},[96,89962,51471],{"class":102},[96,89964,1273],{"class":106},[96,89966,89967,89969,89971,89973,89975],{"class":98,"line":1600},[96,89968,54764],{"class":155},[96,89970,51416],{"class":106},[96,89972,1705],{"class":155},[96,89974,51471],{"class":102},[96,89976,1273],{"class":106},[96,89978,89979,89981,89983,89986],{"class":98,"line":1606},[96,89980,54863],{"class":155},[96,89982,51416],{"class":106},[96,89984,89985],{"class":155},"gray",[96,89987,1273],{"class":106},[96,89989,89990,89992,89994,89996,89998],{"class":98,"line":1611},[96,89991,54901],{"class":155},[96,89993,51416],{"class":106},[96,89995,932],{"class":155},[96,89997,51471],{"class":102},[96,89999,1273],{"class":106},[96,90001,90002,90004,90006,90008],{"class":98,"line":1625},[96,90003,57395],{"class":155},[96,90005,51416],{"class":106},[96,90007,60821],{"class":155},[96,90009,1273],{"class":106},[96,90011,90012,90014,90016,90018],{"class":98,"line":1630},[96,90013,57265],{"class":155},[96,90015,51416],{"class":106},[96,90017,51571],{"class":155},[96,90019,1273],{"class":106},[96,90021,90022,90025,90027,90029,90031],{"class":98,"line":1636},[96,90023,90024],{"class":155},"      padding-top",[96,90026,51416],{"class":106},[96,90028,426],{"class":155},[96,90030,51471],{"class":102},[96,90032,1273],{"class":106},[96,90034,90035],{"class":98,"line":1657},[96,90036,2170],{"class":106},[96,90038,90039,90041,90043],{"class":98,"line":1662},[96,90040,52396],{"class":106},[96,90042,5110],{"class":51279},[96,90044,51286],{"class":106},[96,90046,90047,90049,90051],{"class":98,"line":1676},[96,90048,51764],{"class":106},[96,90050,51313],{"class":51279},[96,90052,51286],{"class":106},[96,90054,90055],{"class":98,"line":1681},[96,90056,2383],{"emptyLinePlaceholder":23},[96,90058,90059,90061,90063],{"class":98,"line":1710},[96,90060,1017],{"class":106},[96,90062,51779],{"class":51279},[96,90064,51286],{"class":106},[96,90066,90067,90069,90071,90073,90075,90077,90079,90081],{"class":98,"line":1715},[96,90068,52123],{"class":106},[96,90070,51590],{"class":51279},[96,90072,53465],{"class":1946},[96,90074,152],{"class":106},[96,90076,53470],{"class":211},[96,90078,55293],{"class":106},[96,90080,51590],{"class":51279},[96,90082,51286],{"class":106},[96,90084,90085,90087,90089,90091,90093,90095,90097,90099],{"class":98,"line":1732},[96,90086,52123],{"class":106},[96,90088,51792],{"class":51279},[96,90090,55218],{"class":1946},[96,90092,152],{"class":106},[96,90094,88253],{"class":211},[96,90096,55293],{"class":106},[96,90098,51792],{"class":51279},[96,90100,51286],{"class":106},[96,90102,90103,90105,90107],{"class":98,"line":1737},[96,90104,52123],{"class":106},[96,90106,51792],{"class":51279},[96,90108,51286],{"class":106},[96,90110,90111,90113,90115,90117,90119,90121,90123,90126],{"class":98,"line":1742},[96,90112,11205],{"class":102},[96,90114,86912],{"class":155},[96,90116,13548],{"class":102},[96,90118,54375],{"class":106},[96,90120,54378],{"class":1946},[96,90122,107],{"class":106},[96,90124,90125],{"class":211},"'.box'",[96,90127,113],{"class":106},[96,90129,90130,90132,90134,90136],{"class":98,"line":1747},[96,90131,52198],{"class":102},[96,90133,9422],{"class":106},[96,90135,152],{"class":102},[96,90137,47312],{"class":155},[96,90139,90140,90142,90145],{"class":98,"line":1761},[96,90141,70063],{"class":102},[96,90143,90144],{"class":1946}," mouseMove",[96,90146,10837],{"class":106},[96,90148,90149,90152,90154,90156],{"class":98,"line":1766},[96,90150,90151],{"class":106},"      box.innerHTML ",[96,90153,152],{"class":102},[96,90155,3015],{"class":106},[96,90157,2685],{"class":102},[96,90159,90160],{"class":98,"line":2560},[96,90161,90162],{"class":165},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[96,90164,90165],{"class":98,"line":2574},[96,90166,2170],{"class":106},[96,90168,90169],{"class":98,"line":2582},[96,90170,90171],{"class":165},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[96,90173,90174],{"class":98,"line":2587},[96,90175,90176],{"class":165},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[96,90178,90179],{"class":98,"line":2593},[96,90180,90181],{"class":165},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[96,90183,90184,90187,90189,90191,90194,90197,90200,90203,90205],{"class":98,"line":2599},[96,90185,90186],{"class":106},"    box.",[96,90188,57792],{"class":1946},[96,90190,107],{"class":106},[96,90192,90193],{"class":211},"'mousemove'",[96,90195,90196],{"class":106},", _.",[96,90198,90199],{"class":1946},"debounce",[96,90201,90202],{"class":106},"(mouseMove, ",[96,90204,65053],{"class":155},[96,90206,30476],{"class":106},[96,90208,90209,90211,90213],{"class":98,"line":2604},[96,90210,52396],{"class":106},[96,90212,51792],{"class":51279},[96,90214,51286],{"class":106},[96,90216,90217,90219,90221],{"class":98,"line":7932},[96,90218,51764],{"class":106},[96,90220,51779],{"class":51279},[96,90222,51286],{"class":106},[96,90224,90225],{"class":98,"line":7956},[96,90226,2383],{"emptyLinePlaceholder":23},[96,90228,90229,90231,90233],{"class":98,"line":7961},[96,90230,51764],{"class":106},[96,90232,50614],{"class":51279},[96,90234,51286],{"class":106},[1114,90236,90237],{},[53,90238,90239],{},"手写一个防抖函数来处理",[14,90241,90242],{},"防抖的核心就是利用定时器来实现的：",[14,90244,90245],{},"①声明一个定时器变量",[14,90247,90248],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[14,90250,90251],{},"③如果没有定时器则开启定时器，记得存到变量里面",[87,90253,90255],{"className":50612,"code":90254,"language":50614,"meta":18,"style":18},"\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",[93,90256,90257,90267,90281,90285,90293,90307,90327,90339,90347,90353,90363,90375,90387,90397,90409,90419,90429,90441,90445,90453,90461,90465,90473,90491,90509,90517,90535,90545,90553,90563,90567,90571,90575,90580,90585,90590,90595,90600,90605,90623,90630,90635,90643,90648,90661,90677,90687,90692,90696,90700,90720,90724,90729,90734,90739,90744,90752,90760,90764],{"__ignoreMap":18},[96,90258,90259,90261,90263,90265],{"class":98,"line":99},[96,90260,51276],{"class":106},[96,90262,51280],{"class":51279},[96,90264,51283],{"class":1946},[96,90266,51286],{"class":106},[96,90268,90269,90271,90273,90275,90277,90279],{"class":98,"line":19},[96,90270,1017],{"class":106},[96,90272,50614],{"class":51279},[96,90274,51295],{"class":1946},[96,90276,152],{"class":106},[96,90278,51300],{"class":211},[96,90280,51286],{"class":106},[96,90282,90283],{"class":98,"line":1162},[96,90284,2383],{"emptyLinePlaceholder":23},[96,90286,90287,90289,90291],{"class":98,"line":1177},[96,90288,1017],{"class":106},[96,90290,51313],{"class":51279},[96,90292,51286],{"class":106},[96,90294,90295,90297,90299,90301,90303,90305],{"class":98,"line":1183},[96,90296,52123],{"class":106},[96,90298,51323],{"class":51279},[96,90300,51326],{"class":1946},[96,90302,152],{"class":106},[96,90304,51331],{"class":211},[96,90306,51286],{"class":106},[96,90308,90309,90311,90313,90315,90317,90319,90321,90323,90325],{"class":98,"line":1197},[96,90310,52123],{"class":106},[96,90312,51323],{"class":51279},[96,90314,14904],{"class":1946},[96,90316,152],{"class":106},[96,90318,51370],{"class":211},[96,90320,51350],{"class":1946},[96,90322,152],{"class":106},[96,90324,51377],{"class":211},[96,90326,51286],{"class":106},[96,90328,90329,90331,90333,90335,90337],{"class":98,"line":1203},[96,90330,52123],{"class":106},[96,90332,51386],{"class":51279},[96,90334,51389],{"class":106},[96,90336,51386],{"class":51279},[96,90338,51286],{"class":106},[96,90340,90341,90343,90345],{"class":98,"line":1294},[96,90342,52123],{"class":106},[96,90344,5110],{"class":51279},[96,90346,51286],{"class":106},[96,90348,90349,90351],{"class":98,"line":1300},[96,90350,54731],{"class":1946},[96,90352,15556],{"class":106},[96,90354,90355,90357,90359,90361],{"class":98,"line":1312},[96,90356,72575],{"class":155},[96,90358,51416],{"class":106},[96,90360,60484],{"class":155},[96,90362,1273],{"class":106},[96,90364,90365,90367,90369,90371,90373],{"class":98,"line":1595},[96,90366,54750],{"class":155},[96,90368,51416],{"class":106},[96,90370,1705],{"class":155},[96,90372,51471],{"class":102},[96,90374,1273],{"class":106},[96,90376,90377,90379,90381,90383,90385],{"class":98,"line":1600},[96,90378,54764],{"class":155},[96,90380,51416],{"class":106},[96,90382,1705],{"class":155},[96,90384,51471],{"class":102},[96,90386,1273],{"class":106},[96,90388,90389,90391,90393,90395],{"class":98,"line":1606},[96,90390,54863],{"class":155},[96,90392,51416],{"class":106},[96,90394,89985],{"class":155},[96,90396,1273],{"class":106},[96,90398,90399,90401,90403,90405,90407],{"class":98,"line":1611},[96,90400,54901],{"class":155},[96,90402,51416],{"class":106},[96,90404,932],{"class":155},[96,90406,51471],{"class":102},[96,90408,1273],{"class":106},[96,90410,90411,90413,90415,90417],{"class":98,"line":1625},[96,90412,57395],{"class":155},[96,90414,51416],{"class":106},[96,90416,60821],{"class":155},[96,90418,1273],{"class":106},[96,90420,90421,90423,90425,90427],{"class":98,"line":1630},[96,90422,57265],{"class":155},[96,90424,51416],{"class":106},[96,90426,51571],{"class":155},[96,90428,1273],{"class":106},[96,90430,90431,90433,90435,90437,90439],{"class":98,"line":1636},[96,90432,90024],{"class":155},[96,90434,51416],{"class":106},[96,90436,426],{"class":155},[96,90438,51471],{"class":102},[96,90440,1273],{"class":106},[96,90442,90443],{"class":98,"line":1657},[96,90444,2170],{"class":106},[96,90446,90447,90449,90451],{"class":98,"line":1662},[96,90448,52396],{"class":106},[96,90450,5110],{"class":51279},[96,90452,51286],{"class":106},[96,90454,90455,90457,90459],{"class":98,"line":1676},[96,90456,51764],{"class":106},[96,90458,51313],{"class":51279},[96,90460,51286],{"class":106},[96,90462,90463],{"class":98,"line":1681},[96,90464,2383],{"emptyLinePlaceholder":23},[96,90466,90467,90469,90471],{"class":98,"line":1710},[96,90468,1017],{"class":106},[96,90470,51779],{"class":51279},[96,90472,51286],{"class":106},[96,90474,90475,90477,90479,90481,90483,90485,90487,90489],{"class":98,"line":1715},[96,90476,52123],{"class":106},[96,90478,51590],{"class":51279},[96,90480,53465],{"class":1946},[96,90482,152],{"class":106},[96,90484,53470],{"class":211},[96,90486,55293],{"class":106},[96,90488,51590],{"class":51279},[96,90490,51286],{"class":106},[96,90492,90493,90495,90497,90499,90501,90503,90505,90507],{"class":98,"line":1732},[96,90494,52123],{"class":106},[96,90496,51792],{"class":51279},[96,90498,55218],{"class":1946},[96,90500,152],{"class":106},[96,90502,88253],{"class":211},[96,90504,55293],{"class":106},[96,90506,51792],{"class":51279},[96,90508,51286],{"class":106},[96,90510,90511,90513,90515],{"class":98,"line":1737},[96,90512,52123],{"class":106},[96,90514,51792],{"class":51279},[96,90516,51286],{"class":106},[96,90518,90519,90521,90523,90525,90527,90529,90531,90533],{"class":98,"line":1742},[96,90520,11205],{"class":102},[96,90522,86912],{"class":155},[96,90524,13548],{"class":102},[96,90526,54375],{"class":106},[96,90528,54378],{"class":1946},[96,90530,107],{"class":106},[96,90532,90125],{"class":211},[96,90534,113],{"class":106},[96,90536,90537,90539,90541,90543],{"class":98,"line":1747},[96,90538,52198],{"class":102},[96,90540,9422],{"class":106},[96,90542,152],{"class":102},[96,90544,47312],{"class":155},[96,90546,90547,90549,90551],{"class":98,"line":1761},[96,90548,70063],{"class":102},[96,90550,90144],{"class":1946},[96,90552,10837],{"class":106},[96,90554,90555,90557,90559,90561],{"class":98,"line":1766},[96,90556,90151],{"class":106},[96,90558,152],{"class":102},[96,90560,3015],{"class":106},[96,90562,2685],{"class":102},[96,90564,90565],{"class":98,"line":2560},[96,90566,90162],{"class":165},[96,90568,90569],{"class":98,"line":2574},[96,90570,2170],{"class":106},[96,90572,90573],{"class":98,"line":2582},[96,90574,90171],{"class":165},[96,90576,90577],{"class":98,"line":2587},[96,90578,90579],{"class":165},"    \u002F\u002F 手写防抖函数\n",[96,90581,90582],{"class":98,"line":2593},[96,90583,90584],{"class":165},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[96,90586,90587],{"class":98,"line":2599},[96,90588,90589],{"class":165},"    \u002F\u002F 1.声明定时器变量\n",[96,90591,90592],{"class":98,"line":2604},[96,90593,90594],{"class":165},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[96,90596,90597],{"class":98,"line":7932},[96,90598,90599],{"class":165},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[96,90601,90602],{"class":98,"line":7956},[96,90603,90604],{"class":165},"    \u002F\u002F 4.定时器里面写函数调用\n",[96,90606,90607,90609,90612,90614,90617,90619,90621],{"class":98,"line":7961},[96,90608,70063],{"class":102},[96,90610,90611],{"class":1946}," debounce",[96,90613,107],{"class":106},[96,90615,90616],{"class":5200},"fn",[96,90618,12419],{"class":106},[96,90620,827],{"class":5200},[96,90622,12426],{"class":106},[96,90624,90625,90627],{"class":98,"line":7967},[96,90626,79751],{"class":102},[96,90628,90629],{"class":106}," timer\n",[96,90631,90632],{"class":98,"line":7994},[96,90633,90634],{"class":165},"      \u002F\u002F return 返回一个匿名函数\n",[96,90636,90637,90639,90641],{"class":98,"line":7999},[96,90638,73961],{"class":102},[96,90640,58897],{"class":102},[96,90642,54431],{"class":106},[96,90644,90645],{"class":98,"line":8005},[96,90646,90647],{"class":165},"        \u002F\u002F 这里边写第二三四步\n",[96,90649,90650,90652,90655,90658],{"class":98,"line":8017},[96,90651,2480],{"class":102},[96,90653,90654],{"class":106}," (timer) ",[96,90656,90657],{"class":1946},"clearTimeout",[96,90659,90660],{"class":106},"(timer)\n",[96,90662,90663,90666,90668,90671,90673,90675],{"class":98,"line":8029},[96,90664,90665],{"class":106},"        timer ",[96,90667,152],{"class":102},[96,90669,90670],{"class":1946}," setTimeout",[96,90672,107],{"class":106},[96,90674,54428],{"class":102},[96,90676,54431],{"class":106},[96,90678,90679,90682,90684],{"class":98,"line":8041},[96,90680,90681],{"class":1946},"          fn",[96,90683,13034],{"class":106},[96,90685,90686],{"class":165},"\u002F\u002F加小括号调用fn }, t)\n",[96,90688,90689],{"class":98,"line":9700},[96,90690,90691],{"class":106},"        }, t)\n",[96,90693,90694],{"class":98,"line":9725},[96,90695,52377],{"class":106},[96,90697,90698],{"class":98,"line":9748},[96,90699,2170],{"class":106},[96,90701,90702,90704,90706,90708,90710,90712,90714,90716,90718],{"class":98,"line":9772},[96,90703,90186],{"class":106},[96,90705,57792],{"class":1946},[96,90707,107],{"class":106},[96,90709,90193],{"class":211},[96,90711,12419],{"class":106},[96,90713,90199],{"class":1946},[96,90715,90202],{"class":106},[96,90717,65053],{"class":155},[96,90719,30476],{"class":106},[96,90721,90722],{"class":98,"line":9777},[96,90723,2383],{"emptyLinePlaceholder":23},[96,90725,90726],{"class":98,"line":9782},[96,90727,90728],{"class":165},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[96,90730,90731],{"class":98,"line":9787},[96,90732,90733],{"class":165},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[96,90735,90736],{"class":98,"line":9796},[96,90737,90738],{"class":165},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[96,90740,90741],{"class":98,"line":9801},[96,90742,90743],{"class":165},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[96,90745,90746,90748,90750],{"class":98,"line":9807},[96,90747,52396],{"class":106},[96,90749,51792],{"class":51279},[96,90751,51286],{"class":106},[96,90753,90754,90756,90758],{"class":98,"line":9828},[96,90755,51764],{"class":106},[96,90757,51779],{"class":51279},[96,90759,51286],{"class":106},[96,90761,90762],{"class":98,"line":9834},[96,90763,2383],{"emptyLinePlaceholder":23},[96,90765,90766,90768,90770],{"class":98,"line":9848},[96,90767,51764],{"class":106},[96,90769,50614],{"class":51279},[96,90771,51286],{"class":106},[67,90773,90775],{"id":90774},"_4172-节流","4.17.2 节流",[14,90777,90778],{},[1445,90779],{"alt":18,"src":90780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[14,90782,90783],{},[1445,90784],{"alt":18,"src":90785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[14,90787,90788],{},[256,90789,90790],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[14,90792,90793],{},"实现方式：",[1114,90795,90796],{},[53,90797,90798],{},"lodash 提供的节流函数来处理",[14,90800,90801],{},"_.throttle(func,[wait=0],[options=])",[14,90803,90804],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[87,90806,90808],{"className":50612,"code":90807,"language":50614,"meta":18,"style":18},"\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",[93,90809,90810,90820,90834,90838,90846,90860,90880,90892,90900,90906,90916,90928,90940,90950,90962,90972,90982,90994,90998,91006,91014,91018,91026,91044,91062,91070,91088,91098,91106,91116,91120,91124,91128,91133,91138,91159,91167,91175,91179],{"__ignoreMap":18},[96,90811,90812,90814,90816,90818],{"class":98,"line":99},[96,90813,51276],{"class":106},[96,90815,51280],{"class":51279},[96,90817,51283],{"class":1946},[96,90819,51286],{"class":106},[96,90821,90822,90824,90826,90828,90830,90832],{"class":98,"line":19},[96,90823,1017],{"class":106},[96,90825,50614],{"class":51279},[96,90827,51295],{"class":1946},[96,90829,152],{"class":106},[96,90831,51300],{"class":211},[96,90833,51286],{"class":106},[96,90835,90836],{"class":98,"line":1162},[96,90837,2383],{"emptyLinePlaceholder":23},[96,90839,90840,90842,90844],{"class":98,"line":1177},[96,90841,1017],{"class":106},[96,90843,51313],{"class":51279},[96,90845,51286],{"class":106},[96,90847,90848,90850,90852,90854,90856,90858],{"class":98,"line":1183},[96,90849,52123],{"class":106},[96,90851,51323],{"class":51279},[96,90853,51326],{"class":1946},[96,90855,152],{"class":106},[96,90857,51331],{"class":211},[96,90859,51286],{"class":106},[96,90861,90862,90864,90866,90868,90870,90872,90874,90876,90878],{"class":98,"line":1197},[96,90863,52123],{"class":106},[96,90865,51323],{"class":51279},[96,90867,14904],{"class":1946},[96,90869,152],{"class":106},[96,90871,51370],{"class":211},[96,90873,51350],{"class":1946},[96,90875,152],{"class":106},[96,90877,51377],{"class":211},[96,90879,51286],{"class":106},[96,90881,90882,90884,90886,90888,90890],{"class":98,"line":1203},[96,90883,52123],{"class":106},[96,90885,51386],{"class":51279},[96,90887,51389],{"class":106},[96,90889,51386],{"class":51279},[96,90891,51286],{"class":106},[96,90893,90894,90896,90898],{"class":98,"line":1294},[96,90895,52123],{"class":106},[96,90897,5110],{"class":51279},[96,90899,51286],{"class":106},[96,90901,90902,90904],{"class":98,"line":1300},[96,90903,54731],{"class":1946},[96,90905,15556],{"class":106},[96,90907,90908,90910,90912,90914],{"class":98,"line":1312},[96,90909,72575],{"class":155},[96,90911,51416],{"class":106},[96,90913,60484],{"class":155},[96,90915,1273],{"class":106},[96,90917,90918,90920,90922,90924,90926],{"class":98,"line":1595},[96,90919,54750],{"class":155},[96,90921,51416],{"class":106},[96,90923,1705],{"class":155},[96,90925,51471],{"class":102},[96,90927,1273],{"class":106},[96,90929,90930,90932,90934,90936,90938],{"class":98,"line":1600},[96,90931,54764],{"class":155},[96,90933,51416],{"class":106},[96,90935,1705],{"class":155},[96,90937,51471],{"class":102},[96,90939,1273],{"class":106},[96,90941,90942,90944,90946,90948],{"class":98,"line":1606},[96,90943,54863],{"class":155},[96,90945,51416],{"class":106},[96,90947,89985],{"class":155},[96,90949,1273],{"class":106},[96,90951,90952,90954,90956,90958,90960],{"class":98,"line":1611},[96,90953,54901],{"class":155},[96,90955,51416],{"class":106},[96,90957,932],{"class":155},[96,90959,51471],{"class":102},[96,90961,1273],{"class":106},[96,90963,90964,90966,90968,90970],{"class":98,"line":1625},[96,90965,57395],{"class":155},[96,90967,51416],{"class":106},[96,90969,60821],{"class":155},[96,90971,1273],{"class":106},[96,90973,90974,90976,90978,90980],{"class":98,"line":1630},[96,90975,57265],{"class":155},[96,90977,51416],{"class":106},[96,90979,51571],{"class":155},[96,90981,1273],{"class":106},[96,90983,90984,90986,90988,90990,90992],{"class":98,"line":1636},[96,90985,90024],{"class":155},[96,90987,51416],{"class":106},[96,90989,426],{"class":155},[96,90991,51471],{"class":102},[96,90993,1273],{"class":106},[96,90995,90996],{"class":98,"line":1657},[96,90997,2170],{"class":106},[96,90999,91000,91002,91004],{"class":98,"line":1662},[96,91001,52396],{"class":106},[96,91003,5110],{"class":51279},[96,91005,51286],{"class":106},[96,91007,91008,91010,91012],{"class":98,"line":1676},[96,91009,51764],{"class":106},[96,91011,51313],{"class":51279},[96,91013,51286],{"class":106},[96,91015,91016],{"class":98,"line":1681},[96,91017,2383],{"emptyLinePlaceholder":23},[96,91019,91020,91022,91024],{"class":98,"line":1710},[96,91021,1017],{"class":106},[96,91023,51779],{"class":51279},[96,91025,51286],{"class":106},[96,91027,91028,91030,91032,91034,91036,91038,91040,91042],{"class":98,"line":1715},[96,91029,52123],{"class":106},[96,91031,51590],{"class":51279},[96,91033,53465],{"class":1946},[96,91035,152],{"class":106},[96,91037,53470],{"class":211},[96,91039,55293],{"class":106},[96,91041,51590],{"class":51279},[96,91043,51286],{"class":106},[96,91045,91046,91048,91050,91052,91054,91056,91058,91060],{"class":98,"line":1732},[96,91047,52123],{"class":106},[96,91049,51792],{"class":51279},[96,91051,55218],{"class":1946},[96,91053,152],{"class":106},[96,91055,88253],{"class":211},[96,91057,55293],{"class":106},[96,91059,51792],{"class":51279},[96,91061,51286],{"class":106},[96,91063,91064,91066,91068],{"class":98,"line":1737},[96,91065,52123],{"class":106},[96,91067,51792],{"class":51279},[96,91069,51286],{"class":106},[96,91071,91072,91074,91076,91078,91080,91082,91084,91086],{"class":98,"line":1742},[96,91073,11205],{"class":102},[96,91075,86912],{"class":155},[96,91077,13548],{"class":102},[96,91079,54375],{"class":106},[96,91081,54378],{"class":1946},[96,91083,107],{"class":106},[96,91085,90125],{"class":211},[96,91087,113],{"class":106},[96,91089,91090,91092,91094,91096],{"class":98,"line":1747},[96,91091,52198],{"class":102},[96,91093,9422],{"class":106},[96,91095,152],{"class":102},[96,91097,47312],{"class":155},[96,91099,91100,91102,91104],{"class":98,"line":1761},[96,91101,70063],{"class":102},[96,91103,90144],{"class":1946},[96,91105,10837],{"class":106},[96,91107,91108,91110,91112,91114],{"class":98,"line":1766},[96,91109,90151],{"class":106},[96,91111,152],{"class":102},[96,91113,3015],{"class":106},[96,91115,2685],{"class":102},[96,91117,91118],{"class":98,"line":2560},[96,91119,90162],{"class":165},[96,91121,91122],{"class":98,"line":2574},[96,91123,2170],{"class":106},[96,91125,91126],{"class":98,"line":2582},[96,91127,90171],{"class":165},[96,91129,91130],{"class":98,"line":2587},[96,91131,91132],{"class":165},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[96,91134,91135],{"class":98,"line":2593},[96,91136,91137],{"class":165},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[96,91139,91140,91142,91144,91146,91148,91150,91153,91155,91157],{"class":98,"line":2599},[96,91141,90186],{"class":106},[96,91143,57792],{"class":1946},[96,91145,107],{"class":106},[96,91147,90193],{"class":211},[96,91149,90196],{"class":106},[96,91151,91152],{"class":1946},"throttle",[96,91154,90202],{"class":106},[96,91156,65053],{"class":155},[96,91158,30476],{"class":106},[96,91160,91161,91163,91165],{"class":98,"line":2604},[96,91162,52396],{"class":106},[96,91164,51792],{"class":51279},[96,91166,51286],{"class":106},[96,91168,91169,91171,91173],{"class":98,"line":7932},[96,91170,51764],{"class":106},[96,91172,51779],{"class":51279},[96,91174,51286],{"class":106},[96,91176,91177],{"class":98,"line":7956},[96,91178,2383],{"emptyLinePlaceholder":23},[96,91180,91181,91183,91185],{"class":98,"line":7961},[96,91182,51764],{"class":106},[96,91184,50614],{"class":51279},[96,91186,51286],{"class":106},[1114,91188,91189],{},[53,91190,91191],{},"手写一个节流函数来处理",[14,91193,70931],{},[14,91195,90245],{},[14,91197,91198],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[14,91200,91201],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[87,91203,91205],{"className":50612,"code":91204,"language":50614,"meta":18,"style":18},"\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",[93,91206,91207,91217,91231,91235,91243,91257,91277,91289,91297,91303,91313,91325,91337,91347,91359,91369,91379,91391,91395,91403,91411,91415,91423,91441,91459,91467,91485,91495,91503,91513,91517,91521,91525,91530,91535,91540,91545,91550,91555,91572,91578,91586,91597,91612,91619,91624,91629,91639,91644,91649,91654,91658,91662,91666,91686,91694,91702,91706],{"__ignoreMap":18},[96,91208,91209,91211,91213,91215],{"class":98,"line":99},[96,91210,51276],{"class":106},[96,91212,51280],{"class":51279},[96,91214,51283],{"class":1946},[96,91216,51286],{"class":106},[96,91218,91219,91221,91223,91225,91227,91229],{"class":98,"line":19},[96,91220,1017],{"class":106},[96,91222,50614],{"class":51279},[96,91224,51295],{"class":1946},[96,91226,152],{"class":106},[96,91228,51300],{"class":211},[96,91230,51286],{"class":106},[96,91232,91233],{"class":98,"line":1162},[96,91234,2383],{"emptyLinePlaceholder":23},[96,91236,91237,91239,91241],{"class":98,"line":1177},[96,91238,1017],{"class":106},[96,91240,51313],{"class":51279},[96,91242,51286],{"class":106},[96,91244,91245,91247,91249,91251,91253,91255],{"class":98,"line":1183},[96,91246,52123],{"class":106},[96,91248,51323],{"class":51279},[96,91250,51326],{"class":1946},[96,91252,152],{"class":106},[96,91254,51331],{"class":211},[96,91256,51286],{"class":106},[96,91258,91259,91261,91263,91265,91267,91269,91271,91273,91275],{"class":98,"line":1197},[96,91260,52123],{"class":106},[96,91262,51323],{"class":51279},[96,91264,14904],{"class":1946},[96,91266,152],{"class":106},[96,91268,51370],{"class":211},[96,91270,51350],{"class":1946},[96,91272,152],{"class":106},[96,91274,51377],{"class":211},[96,91276,51286],{"class":106},[96,91278,91279,91281,91283,91285,91287],{"class":98,"line":1203},[96,91280,52123],{"class":106},[96,91282,51386],{"class":51279},[96,91284,51389],{"class":106},[96,91286,51386],{"class":51279},[96,91288,51286],{"class":106},[96,91290,91291,91293,91295],{"class":98,"line":1294},[96,91292,52123],{"class":106},[96,91294,5110],{"class":51279},[96,91296,51286],{"class":106},[96,91298,91299,91301],{"class":98,"line":1300},[96,91300,54731],{"class":1946},[96,91302,15556],{"class":106},[96,91304,91305,91307,91309,91311],{"class":98,"line":1312},[96,91306,72575],{"class":155},[96,91308,51416],{"class":106},[96,91310,60484],{"class":155},[96,91312,1273],{"class":106},[96,91314,91315,91317,91319,91321,91323],{"class":98,"line":1595},[96,91316,54750],{"class":155},[96,91318,51416],{"class":106},[96,91320,1705],{"class":155},[96,91322,51471],{"class":102},[96,91324,1273],{"class":106},[96,91326,91327,91329,91331,91333,91335],{"class":98,"line":1600},[96,91328,54764],{"class":155},[96,91330,51416],{"class":106},[96,91332,1705],{"class":155},[96,91334,51471],{"class":102},[96,91336,1273],{"class":106},[96,91338,91339,91341,91343,91345],{"class":98,"line":1606},[96,91340,54863],{"class":155},[96,91342,51416],{"class":106},[96,91344,89985],{"class":155},[96,91346,1273],{"class":106},[96,91348,91349,91351,91353,91355,91357],{"class":98,"line":1611},[96,91350,54901],{"class":155},[96,91352,51416],{"class":106},[96,91354,932],{"class":155},[96,91356,51471],{"class":102},[96,91358,1273],{"class":106},[96,91360,91361,91363,91365,91367],{"class":98,"line":1625},[96,91362,57395],{"class":155},[96,91364,51416],{"class":106},[96,91366,60821],{"class":155},[96,91368,1273],{"class":106},[96,91370,91371,91373,91375,91377],{"class":98,"line":1630},[96,91372,57265],{"class":155},[96,91374,51416],{"class":106},[96,91376,51571],{"class":155},[96,91378,1273],{"class":106},[96,91380,91381,91383,91385,91387,91389],{"class":98,"line":1636},[96,91382,90024],{"class":155},[96,91384,51416],{"class":106},[96,91386,426],{"class":155},[96,91388,51471],{"class":102},[96,91390,1273],{"class":106},[96,91392,91393],{"class":98,"line":1657},[96,91394,2170],{"class":106},[96,91396,91397,91399,91401],{"class":98,"line":1662},[96,91398,52396],{"class":106},[96,91400,5110],{"class":51279},[96,91402,51286],{"class":106},[96,91404,91405,91407,91409],{"class":98,"line":1676},[96,91406,51764],{"class":106},[96,91408,51313],{"class":51279},[96,91410,51286],{"class":106},[96,91412,91413],{"class":98,"line":1681},[96,91414,2383],{"emptyLinePlaceholder":23},[96,91416,91417,91419,91421],{"class":98,"line":1710},[96,91418,1017],{"class":106},[96,91420,51779],{"class":51279},[96,91422,51286],{"class":106},[96,91424,91425,91427,91429,91431,91433,91435,91437,91439],{"class":98,"line":1715},[96,91426,52123],{"class":106},[96,91428,51590],{"class":51279},[96,91430,53465],{"class":1946},[96,91432,152],{"class":106},[96,91434,53470],{"class":211},[96,91436,55293],{"class":106},[96,91438,51590],{"class":51279},[96,91440,51286],{"class":106},[96,91442,91443,91445,91447,91449,91451,91453,91455,91457],{"class":98,"line":1732},[96,91444,52123],{"class":106},[96,91446,51792],{"class":51279},[96,91448,55218],{"class":1946},[96,91450,152],{"class":106},[96,91452,88253],{"class":211},[96,91454,55293],{"class":106},[96,91456,51792],{"class":51279},[96,91458,51286],{"class":106},[96,91460,91461,91463,91465],{"class":98,"line":1737},[96,91462,52123],{"class":106},[96,91464,51792],{"class":51279},[96,91466,51286],{"class":106},[96,91468,91469,91471,91473,91475,91477,91479,91481,91483],{"class":98,"line":1742},[96,91470,11205],{"class":102},[96,91472,86912],{"class":155},[96,91474,13548],{"class":102},[96,91476,54375],{"class":106},[96,91478,54378],{"class":1946},[96,91480,107],{"class":106},[96,91482,90125],{"class":211},[96,91484,113],{"class":106},[96,91486,91487,91489,91491,91493],{"class":98,"line":1747},[96,91488,52198],{"class":102},[96,91490,9422],{"class":106},[96,91492,152],{"class":102},[96,91494,47312],{"class":155},[96,91496,91497,91499,91501],{"class":98,"line":1761},[96,91498,70063],{"class":102},[96,91500,90144],{"class":1946},[96,91502,10837],{"class":106},[96,91504,91505,91507,91509,91511],{"class":98,"line":1766},[96,91506,90151],{"class":106},[96,91508,152],{"class":102},[96,91510,3015],{"class":106},[96,91512,2685],{"class":102},[96,91514,91515],{"class":98,"line":2560},[96,91516,90162],{"class":165},[96,91518,91519],{"class":98,"line":2574},[96,91520,2170],{"class":106},[96,91522,91523],{"class":98,"line":2582},[96,91524,90171],{"class":165},[96,91526,91527],{"class":98,"line":2587},[96,91528,91529],{"class":165},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[96,91531,91532],{"class":98,"line":2593},[96,91533,91534],{"class":165},"    \u002F\u002F 1.声明一个定时器变量\n",[96,91536,91537],{"class":98,"line":2599},[96,91538,91539],{"class":165},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[96,91541,91542],{"class":98,"line":2604},[96,91543,91544],{"class":165},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[96,91546,91547],{"class":98,"line":7932},[96,91548,91549],{"class":165},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[96,91551,91552],{"class":98,"line":7956},[96,91553,91554],{"class":165},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[96,91556,91557,91559,91562,91564,91566,91568,91570],{"class":98,"line":7961},[96,91558,70063],{"class":102},[96,91560,91561],{"class":1946}," throttle",[96,91563,107],{"class":106},[96,91565,90616],{"class":5200},[96,91567,12419],{"class":106},[96,91569,827],{"class":5200},[96,91571,12426],{"class":106},[96,91573,91574,91576],{"class":98,"line":7967},[96,91575,79751],{"class":102},[96,91577,90629],{"class":106},[96,91579,91580,91582,91584],{"class":98,"line":7994},[96,91581,73961],{"class":102},[96,91583,58897],{"class":102},[96,91585,54431],{"class":106},[96,91587,91588,91590,91592,91594],{"class":98,"line":7999},[96,91589,2480],{"class":102},[96,91591,1641],{"class":106},[96,91593,333],{"class":102},[96,91595,91596],{"class":106},"timer) {\n",[96,91598,91599,91602,91604,91606,91608,91610],{"class":98,"line":8005},[96,91600,91601],{"class":106},"          timer ",[96,91603,152],{"class":102},[96,91605,90670],{"class":1946},[96,91607,107],{"class":106},[96,91609,54428],{"class":102},[96,91611,54431],{"class":106},[96,91613,91614,91617],{"class":98,"line":8017},[96,91615,91616],{"class":1946},"            fn",[96,91618,1959],{"class":106},[96,91620,91621],{"class":98,"line":8029},[96,91622,91623],{"class":165},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[96,91625,91626],{"class":98,"line":8041},[96,91627,91628],{"class":165},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[96,91630,91631,91634,91636],{"class":98,"line":9700},[96,91632,91633],{"class":106},"            timer ",[96,91635,152],{"class":102},[96,91637,91638],{"class":155}," null\n",[96,91640,91641],{"class":98,"line":9725},[96,91642,91643],{"class":165},"            \u002F\u002F 不能用clearTimeout(timer)\n",[96,91645,91646],{"class":98,"line":9748},[96,91647,91648],{"class":165},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[96,91650,91651],{"class":98,"line":9772},[96,91652,91653],{"class":106},"          }, t)\n",[96,91655,91656],{"class":98,"line":9777},[96,91657,2512],{"class":106},[96,91659,91660],{"class":98,"line":9782},[96,91661,52377],{"class":106},[96,91663,91664],{"class":98,"line":9787},[96,91665,2170],{"class":106},[96,91667,91668,91670,91672,91674,91676,91678,91680,91682,91684],{"class":98,"line":9796},[96,91669,90186],{"class":106},[96,91671,57792],{"class":1946},[96,91673,107],{"class":106},[96,91675,90193],{"class":211},[96,91677,12419],{"class":106},[96,91679,91152],{"class":1946},[96,91681,90202],{"class":106},[96,91683,65053],{"class":155},[96,91685,30476],{"class":106},[96,91687,91688,91690,91692],{"class":98,"line":9801},[96,91689,52396],{"class":106},[96,91691,51792],{"class":51279},[96,91693,51286],{"class":106},[96,91695,91696,91698,91700],{"class":98,"line":9807},[96,91697,51764],{"class":106},[96,91699,51779],{"class":51279},[96,91701,51286],{"class":106},[96,91703,91704],{"class":98,"line":9828},[96,91705,2383],{"emptyLinePlaceholder":23},[96,91707,91708,91710,91712],{"class":98,"line":9834},[96,91709,51764],{"class":106},[96,91711,50614],{"class":51279},[96,91713,51286],{"class":106},[67,91715,91717],{"id":91716},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[87,91719,91721],{"className":53046,"code":91720,"language":53048,"meta":18,"style":18},"\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",[93,91722,91723,91731,91739,91744,91749,91754,91759,91763,91771],{"__ignoreMap":18},[96,91724,91725,91727,91729],{"class":98,"line":99},[96,91726,1017],{"class":106},[96,91728,51779],{"class":51279},[96,91730,51286],{"class":106},[96,91732,91733,91735,91737],{"class":98,"line":19},[96,91734,52123],{"class":106},[96,91736,51792],{"class":51279},[96,91738,51286],{"class":106},[96,91740,91741],{"class":98,"line":1162},[96,91742,91743],{"class":106},"    let timer = null\n",[96,91745,91746],{"class":98,"line":1177},[96,91747,91748],{"class":106},"    timer = setTimeout(() => {\n",[96,91750,91751],{"class":98,"line":1183},[96,91752,91753],{"class":106},"      clearTimeout(timer)\n",[96,91755,91756],{"class":98,"line":1197},[96,91757,91758],{"class":106},"      console.log(timer)\n",[96,91760,91761],{"class":98,"line":1203},[96,91762,60204],{"class":106},[96,91764,91765,91767,91769],{"class":98,"line":1294},[96,91766,52396],{"class":106},[96,91768,51792],{"class":51279},[96,91770,51286],{"class":106},[96,91772,91773,91775,91777],{"class":98,"line":1300},[96,91774,51764],{"class":106},[96,91776,51779],{"class":51279},[96,91778,51286],{"class":106},[14,91780,91781],{},"输出为1",[14,91783,91784],{},"在开启的定时器里边写清除定时器",[14,91786,91787],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[67,91789,91791],{"id":91790},"_4174-节流综合案例","4.17.4 节流综合案例",[14,91793,91794],{},"页面打开，可以记录上一次的视频播放位置",[14,91796,91797],{},[1445,91798],{"alt":18,"src":91799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[14,91801,91802],{},[1445,91803],{"alt":18,"src":91804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[87,91806,91808],{"className":50612,"code":91807,"language":50614,"meta":18,"style":18},"\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",[93,91809,91810,91820,91834,91838,91846,91860,91880,91900,91922,91935,91943,91949,91959,91969,91979,91983,91987,91994,92007,92019,92023,92027,92037,92049,92063,92067,92071,92078,92088,92101,92113,92123,92133,92149,92161,92165,92169,92177,92187,92199,92209,92219,92229,92233,92237,92247,92258,92262,92270,92278,92282,92290,92305,92320,92335,92356,92364,92372,92387,92409,92417,92432,92458,92484,92510,92518,92526,92545,92553,92558,92577,92582,92600,92605,92610,92618,92623,92637,92645,92650,92667,92671,92676,92698,92702,92710,92718,92722],{"__ignoreMap":18},[96,91811,91812,91814,91816,91818],{"class":98,"line":99},[96,91813,51276],{"class":106},[96,91815,51280],{"class":51279},[96,91817,51283],{"class":1946},[96,91819,51286],{"class":106},[96,91821,91822,91824,91826,91828,91830,91832],{"class":98,"line":19},[96,91823,1017],{"class":106},[96,91825,50614],{"class":51279},[96,91827,51295],{"class":1946},[96,91829,152],{"class":106},[96,91831,51300],{"class":211},[96,91833,51286],{"class":106},[96,91835,91836],{"class":98,"line":1162},[96,91837,2383],{"emptyLinePlaceholder":23},[96,91839,91840,91842,91844],{"class":98,"line":1177},[96,91841,1017],{"class":106},[96,91843,51313],{"class":51279},[96,91845,51286],{"class":106},[96,91847,91848,91850,91852,91854,91856,91858],{"class":98,"line":1183},[96,91849,52123],{"class":106},[96,91851,51323],{"class":51279},[96,91853,51326],{"class":1946},[96,91855,152],{"class":106},[96,91857,51331],{"class":211},[96,91859,59106],{"class":106},[96,91861,91862,91864,91866,91868,91870,91872,91874,91876,91878],{"class":98,"line":1197},[96,91863,52123],{"class":106},[96,91865,51323],{"class":51279},[96,91867,51342],{"class":1946},[96,91869,152],{"class":106},[96,91871,51347],{"class":211},[96,91873,51350],{"class":1946},[96,91875,152],{"class":106},[96,91877,51355],{"class":211},[96,91879,59106],{"class":106},[96,91881,91882,91884,91886,91888,91890,91892,91894,91896,91898],{"class":98,"line":1203},[96,91883,52123],{"class":106},[96,91885,51323],{"class":51279},[96,91887,14904],{"class":1946},[96,91889,152],{"class":106},[96,91891,51370],{"class":211},[96,91893,51350],{"class":1946},[96,91895,152],{"class":106},[96,91897,51377],{"class":211},[96,91899,59106],{"class":106},[96,91901,91902,91904,91906,91908,91910,91913,91915,91917,91920],{"class":98,"line":1294},[96,91903,52123],{"class":106},[96,91905,51323],{"class":51279},[96,91907,14904],{"class":1946},[96,91909,152],{"class":106},[96,91911,91912],{"class":211},"\"referrer\"",[96,91914,51350],{"class":1946},[96,91916,152],{"class":106},[96,91918,91919],{"class":211},"\"never\"",[96,91921,59106],{"class":106},[96,91923,91924,91926,91928,91931,91933],{"class":98,"line":1300},[96,91925,52123],{"class":106},[96,91927,51386],{"class":51279},[96,91929,91930],{"class":106},">综合案例\u003C\u002F",[96,91932,51386],{"class":51279},[96,91934,51286],{"class":106},[96,91936,91937,91939,91941],{"class":98,"line":1312},[96,91938,52123],{"class":106},[96,91940,5110],{"class":51279},[96,91942,51286],{"class":106},[96,91944,91945,91947],{"class":98,"line":1595},[96,91946,6387],{"class":51279},[96,91948,15556],{"class":106},[96,91950,91951,91953,91955,91957],{"class":98,"line":1600},[96,91952,54674],{"class":155},[96,91954,51416],{"class":106},[96,91956,298],{"class":155},[96,91958,1273],{"class":106},[96,91960,91961,91963,91965,91967],{"class":98,"line":1606},[96,91962,54685],{"class":155},[96,91964,51416],{"class":106},[96,91966,298],{"class":155},[96,91968,1273],{"class":106},[96,91970,91971,91973,91975,91977],{"class":98,"line":1611},[96,91972,72575],{"class":155},[96,91974,51416],{"class":106},[96,91976,60484],{"class":155},[96,91978,1273],{"class":106},[96,91980,91981],{"class":98,"line":1625},[96,91982,2170],{"class":106},[96,91984,91985],{"class":98,"line":1630},[96,91986,2383],{"emptyLinePlaceholder":23},[96,91988,91989,91992],{"class":98,"line":1636},[96,91990,91991],{"class":1946},"    .container",[96,91993,15556],{"class":106},[96,91995,91996,91998,92000,92003,92005],{"class":98,"line":1657},[96,91997,54750],{"class":155},[96,91999,51416],{"class":106},[96,92001,92002],{"class":155},"1200",[96,92004,51471],{"class":102},[96,92006,1273],{"class":106},[96,92008,92009,92011,92013,92015,92017],{"class":98,"line":1662},[96,92010,54685],{"class":155},[96,92012,51416],{"class":106},[96,92014,298],{"class":155},[96,92016,51535],{"class":155},[96,92018,1273],{"class":106},[96,92020,92021],{"class":98,"line":1676},[96,92022,2170],{"class":106},[96,92024,92025],{"class":98,"line":1681},[96,92026,2383],{"emptyLinePlaceholder":23},[96,92028,92029,92032,92035],{"class":98,"line":1710},[96,92030,92031],{"class":1946},"    .video",[96,92033,92034],{"class":51279}," video",[96,92036,15556],{"class":106},[96,92038,92039,92041,92043,92045,92047],{"class":98,"line":1715},[96,92040,54750],{"class":155},[96,92042,51416],{"class":106},[96,92044,418],{"class":155},[96,92046,435],{"class":102},[96,92048,1273],{"class":106},[96,92050,92051,92053,92055,92057,92059,92061],{"class":98,"line":1732},[96,92052,54674],{"class":155},[96,92054,51416],{"class":106},[96,92056,807],{"class":155},[96,92058,51471],{"class":102},[96,92060,4076],{"class":155},[96,92062,1273],{"class":106},[96,92064,92065],{"class":98,"line":1737},[96,92066,2170],{"class":106},[96,92068,92069],{"class":98,"line":1742},[96,92070,2383],{"emptyLinePlaceholder":23},[96,92072,92073,92076],{"class":98,"line":1747},[96,92074,92075],{"class":1946},"    .elevator",[96,92077,15556],{"class":106},[96,92079,92080,92082,92084,92086],{"class":98,"line":1761},[96,92081,54738],{"class":155},[96,92083,51416],{"class":106},[96,92085,86212],{"class":155},[96,92087,1273],{"class":106},[96,92089,92090,92092,92094,92097,92099],{"class":98,"line":1766},[96,92091,54926],{"class":155},[96,92093,51416],{"class":106},[96,92095,92096],{"class":155},"280",[96,92098,51471],{"class":102},[96,92100,1273],{"class":106},[96,92102,92103,92105,92107,92109,92111],{"class":98,"line":2560},[96,92104,86406],{"class":155},[96,92106,51416],{"class":106},[96,92108,807],{"class":155},[96,92110,51471],{"class":102},[96,92112,1273],{"class":106},[96,92114,92115,92117,92119,92121],{"class":98,"line":2574},[96,92116,86219],{"class":155},[96,92118,51416],{"class":106},[96,92120,86224],{"class":155},[96,92122,1273],{"class":106},[96,92124,92125,92127,92129,92131],{"class":98,"line":2582},[96,92126,61700],{"class":155},[96,92128,51416],{"class":106},[96,92130,60821],{"class":155},[96,92132,1273],{"class":106},[96,92134,92135,92137,92139,92141,92143,92145,92147],{"class":98,"line":2587},[96,92136,61956],{"class":155},[96,92138,51416],{"class":106},[96,92140,324],{"class":155},[96,92142,51471],{"class":102},[96,92144,51500],{"class":155},[96,92146,62223],{"class":155},[96,92148,1273],{"class":106},[96,92150,92151,92153,92155,92157,92159],{"class":98,"line":2593},[96,92152,54750],{"class":155},[96,92154,51416],{"class":106},[96,92156,1014],{"class":155},[96,92158,51471],{"class":102},[96,92160,1273],{"class":106},[96,92162,92163],{"class":98,"line":2599},[96,92164,2170],{"class":106},[96,92166,92167],{"class":98,"line":2604},[96,92168,2383],{"emptyLinePlaceholder":23},[96,92170,92171,92173,92175],{"class":98,"line":7932},[96,92172,92075],{"class":1946},[96,92174,1381],{"class":51279},[96,92176,15556],{"class":106},[96,92178,92179,92181,92183,92185],{"class":98,"line":7956},[96,92180,54988],{"class":155},[96,92182,51416],{"class":106},[96,92184,60848],{"class":155},[96,92186,1273],{"class":106},[96,92188,92189,92191,92193,92195,92197],{"class":98,"line":7961},[96,92190,54674],{"class":155},[96,92192,51416],{"class":106},[96,92194,553],{"class":155},[96,92196,51471],{"class":102},[96,92198,1273],{"class":106},[96,92200,92201,92203,92205,92207],{"class":98,"line":7967},[96,92202,63949],{"class":155},[96,92204,51416],{"class":106},[96,92206,54716],{"class":155},[96,92208,1273],{"class":106},[96,92210,92211,92213,92215,92217],{"class":98,"line":7994},[96,92212,57265],{"class":155},[96,92214,51416],{"class":106},[96,92216,51571],{"class":155},[96,92218,1273],{"class":106},[96,92220,92221,92223,92225,92227],{"class":98,"line":7999},[96,92222,57395],{"class":155},[96,92224,51416],{"class":106},[96,92226,62049],{"class":155},[96,92228,1273],{"class":106},[96,92230,92231],{"class":98,"line":8005},[96,92232,2170],{"class":106},[96,92234,92235],{"class":98,"line":8017},[96,92236,2383],{"emptyLinePlaceholder":23},[96,92238,92239,92241,92243,92245],{"class":98,"line":8029},[96,92240,92075],{"class":1946},[96,92242,1381],{"class":51279},[96,92244,64003],{"class":1946},[96,92246,15556],{"class":106},[96,92248,92249,92251,92253,92256],{"class":98,"line":8041},[96,92250,57395],{"class":155},[96,92252,51416],{"class":106},[96,92254,92255],{"class":155},"#1286ff",[96,92257,1273],{"class":106},[96,92259,92260],{"class":98,"line":9700},[96,92261,2170],{"class":106},[96,92263,92264,92266,92268],{"class":98,"line":9725},[96,92265,52396],{"class":106},[96,92267,5110],{"class":51279},[96,92269,51286],{"class":106},[96,92271,92272,92274,92276],{"class":98,"line":9748},[96,92273,51764],{"class":106},[96,92275,51313],{"class":51279},[96,92277,51286],{"class":106},[96,92279,92280],{"class":98,"line":9772},[96,92281,2383],{"emptyLinePlaceholder":23},[96,92283,92284,92286,92288],{"class":98,"line":9777},[96,92285,1017],{"class":106},[96,92287,51779],{"class":51279},[96,92289,51286],{"class":106},[96,92291,92292,92294,92296,92298,92300,92303],{"class":98,"line":9782},[96,92293,52123],{"class":106},[96,92295,51590],{"class":51279},[96,92297,53465],{"class":1946},[96,92299,152],{"class":106},[96,92301,92302],{"class":211},"\"container\"",[96,92304,51286],{"class":106},[96,92306,92307,92309,92311,92313,92315,92318],{"class":98,"line":9787},[96,92308,51320],{"class":106},[96,92310,51590],{"class":51279},[96,92312,53465],{"class":1946},[96,92314,152],{"class":106},[96,92316,92317],{"class":211},"\"header\"",[96,92319,51286],{"class":106},[96,92321,92322,92324,92326,92328,92330,92333],{"class":98,"line":9796},[96,92323,55213],{"class":106},[96,92325,345],{"class":51279},[96,92327,61036],{"class":1946},[96,92329,152],{"class":106},[96,92331,92332],{"class":211},"\"http:\u002F\u002Fpip.itcast.cn\"",[96,92334,51286],{"class":106},[96,92336,92337,92339,92341,92343,92345,92348,92350,92352,92354],{"class":98,"line":9801},[96,92338,55281],{"class":106},[96,92340,1445],{"class":51279},[96,92342,55218],{"class":1946},[96,92344,152],{"class":106},[96,92346,92347],{"class":211},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[96,92349,55226],{"class":1946},[96,92351,152],{"class":106},[96,92353,7636],{"class":211},[96,92355,59106],{"class":106},[96,92357,92358,92360,92362],{"class":98,"line":9807},[96,92359,55386],{"class":106},[96,92361,345],{"class":51279},[96,92363,51286],{"class":106},[96,92365,92366,92368,92370],{"class":98,"line":9828},[96,92367,51755],{"class":106},[96,92369,51590],{"class":51279},[96,92371,51286],{"class":106},[96,92373,92374,92376,92378,92380,92382,92385],{"class":98,"line":9834},[96,92375,51320],{"class":106},[96,92377,51590],{"class":51279},[96,92379,53465],{"class":1946},[96,92381,152],{"class":106},[96,92383,92384],{"class":211},"\"video\"",[96,92386,51286],{"class":106},[96,92388,92389,92391,92393,92395,92397,92400,92403,92405,92407],{"class":98,"line":9848},[96,92390,55213],{"class":106},[96,92392,28162],{"class":51279},[96,92394,55218],{"class":1946},[96,92396,152],{"class":106},[96,92398,92399],{"class":211},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[96,92401,92402],{"class":1946}," controls",[96,92404,55293],{"class":106},[96,92406,28162],{"class":51279},[96,92408,51286],{"class":106},[96,92410,92411,92413,92415],{"class":98,"line":9854},[96,92412,51755],{"class":106},[96,92414,51590],{"class":51279},[96,92416,51286],{"class":106},[96,92418,92419,92421,92423,92425,92427,92430],{"class":98,"line":9881},[96,92420,51320],{"class":106},[96,92422,51590],{"class":51279},[96,92424,53465],{"class":1946},[96,92426,152],{"class":106},[96,92428,92429],{"class":211},"\"elevator\"",[96,92431,51286],{"class":106},[96,92433,92434,92436,92438,92440,92442,92444,92447,92449,92451,92454,92456],{"class":98,"line":9890},[96,92435,55213],{"class":106},[96,92437,345],{"class":51279},[96,92439,61036],{"class":1946},[96,92441,152],{"class":106},[96,92443,64215],{"class":211},[96,92445,92446],{"class":1946}," data-ref",[96,92448,152],{"class":106},[96,92450,92384],{"class":211},[96,92452,92453],{"class":106},">视频介绍\u003C\u002F",[96,92455,345],{"class":51279},[96,92457,51286],{"class":106},[96,92459,92460,92462,92464,92466,92468,92470,92472,92474,92477,92480,92482],{"class":98,"line":9896},[96,92461,55213],{"class":106},[96,92463,345],{"class":51279},[96,92465,61036],{"class":1946},[96,92467,152],{"class":106},[96,92469,64215],{"class":211},[96,92471,92446],{"class":1946},[96,92473,152],{"class":106},[96,92475,92476],{"class":211},"\"intro\"",[96,92478,92479],{"class":106},">课程简介\u003C\u002F",[96,92481,345],{"class":51279},[96,92483,51286],{"class":106},[96,92485,92486,92488,92490,92492,92494,92496,92498,92500,92503,92506,92508],{"class":98,"line":9904},[96,92487,55213],{"class":106},[96,92489,345],{"class":51279},[96,92491,61036],{"class":1946},[96,92493,152],{"class":106},[96,92495,64215],{"class":211},[96,92497,92446],{"class":1946},[96,92499,152],{"class":106},[96,92501,92502],{"class":211},"\"outline\"",[96,92504,92505],{"class":106},">评论列表\u003C\u002F",[96,92507,345],{"class":51279},[96,92509,51286],{"class":106},[96,92511,92512,92514,92516],{"class":98,"line":9909},[96,92513,51755],{"class":106},[96,92515,51590],{"class":51279},[96,92517,51286],{"class":106},[96,92519,92520,92522,92524],{"class":98,"line":16588},[96,92521,52396],{"class":106},[96,92523,51590],{"class":51279},[96,92525,51286],{"class":106},[96,92527,92528,92530,92532,92534,92536,92539,92541,92543],{"class":98,"line":16594},[96,92529,52123],{"class":106},[96,92531,51792],{"class":51279},[96,92533,55218],{"class":1946},[96,92535,152],{"class":106},[96,92537,92538],{"class":211},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[96,92540,55293],{"class":106},[96,92542,51792],{"class":51279},[96,92544,51286],{"class":106},[96,92546,92547,92549,92551],{"class":98,"line":16617},[96,92548,52123],{"class":106},[96,92550,51792],{"class":51279},[96,92552,51286],{"class":106},[96,92554,92555],{"class":98,"line":16623},[96,92556,92557],{"class":165},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[96,92559,92560,92562,92564,92566,92568,92570,92572,92575],{"class":98,"line":16646},[96,92561,11205],{"class":102},[96,92563,92034],{"class":155},[96,92565,13548],{"class":102},[96,92567,54375],{"class":106},[96,92569,54378],{"class":1946},[96,92571,107],{"class":106},[96,92573,92574],{"class":211},"'video'",[96,92576,113],{"class":106},[96,92578,92579],{"class":98,"line":16660},[96,92580,92581],{"class":165},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[96,92583,92584,92587,92589,92591,92593,92596,92598],{"class":98,"line":16680},[96,92585,92586],{"class":106},"    video.ontimeupdate ",[96,92588,152],{"class":102},[96,92590,88334],{"class":106},[96,92592,91152],{"class":1946},[96,92594,92595],{"class":106},"(() ",[96,92597,84701],{"class":102},[96,92599,15556],{"class":106},[96,92601,92602],{"class":98,"line":16686},[96,92603,92604],{"class":165},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[96,92606,92607],{"class":98,"line":16697},[96,92608,92609],{"class":165},"      \u002F\u002F 控制台输出当前的时间\n",[96,92611,92612,92615],{"class":98,"line":16720},[96,92613,92614],{"class":165},"      \u002F\u002F console.log(video.currentTime)",[96,92616,92617],{"class":165},"  \u002F\u002F获得当前的视频时间\n",[96,92619,92620],{"class":98,"line":16742},[96,92621,92622],{"class":165},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[96,92624,92625,92627,92629,92631,92634],{"class":98,"line":16747},[96,92626,74662],{"class":106},[96,92628,71633],{"class":1946},[96,92630,107],{"class":106},[96,92632,92633],{"class":211},"'currentTime'",[96,92635,92636],{"class":106},", video.currentTime)\n",[96,92638,92639,92641,92643],{"class":98,"line":16753},[96,92640,54514],{"class":106},[96,92642,6394],{"class":155},[96,92644,113],{"class":106},[96,92646,92647],{"class":98,"line":16767},[96,92648,92649],{"class":165},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[96,92651,92652,92655,92658,92660,92663,92665],{"class":98,"line":16780},[96,92653,92654],{"class":106},"    video.",[96,92656,92657],{"class":1946},"onloadeddata",[96,92659,13548],{"class":102},[96,92661,92662],{"class":106}," () ",[96,92664,84701],{"class":102},[96,92666,15556],{"class":106},[96,92668,92669],{"class":98,"line":16785},[96,92670,59991],{"class":165},[96,92672,92673],{"class":98,"line":16799},[96,92674,92675],{"class":165},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[96,92677,92678,92681,92683,92686,92688,92690,92692,92694,92696],{"class":98,"line":16804},[96,92679,92680],{"class":106},"      video.currentTime ",[96,92682,152],{"class":102},[96,92684,92685],{"class":106}," localStorage.",[96,92687,71664],{"class":1946},[96,92689,107],{"class":106},[96,92691,92633],{"class":211},[96,92693,13698],{"class":106},[96,92695,71336],{"class":102},[96,92697,47312],{"class":155},[96,92699,92700],{"class":98,"line":16810},[96,92701,2170],{"class":106},[96,92703,92704,92706,92708],{"class":98,"line":16815},[96,92705,52396],{"class":106},[96,92707,51792],{"class":51279},[96,92709,51286],{"class":106},[96,92711,92712,92714,92716],{"class":98,"line":16829},[96,92713,51764],{"class":106},[96,92715,51779],{"class":51279},[96,92717,51286],{"class":106},[96,92719,92720],{"class":98,"line":16834},[96,92721,2383],{"emptyLinePlaceholder":23},[96,92723,92724,92726,92728],{"class":98,"line":16839},[96,92725,51764],{"class":106},[96,92727,50614],{"class":51279},[96,92729,51286],{"class":106},[5110,92731,92732],{},"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":18,"searchDepth":19,"depth":19,"links":92734},[92735,92740,92744,92745,92746,92751,92756,92757,92758,92759,92766,92771,92772,92782,92786,92787,92791],{"id":76670,"depth":19,"text":76671,"children":92736},[92737,92738,92739],{"id":76674,"depth":1162,"text":76675},{"id":76699,"depth":1162,"text":76700},{"id":76711,"depth":1162,"text":76712},{"id":76723,"depth":19,"text":76724,"children":92741},[92742,92743],{"id":76727,"depth":1162,"text":76728},{"id":76742,"depth":1162,"text":76743},{"id":76794,"depth":19,"text":76795},{"id":76838,"depth":19,"text":76839},{"id":76855,"depth":19,"text":76856,"children":92747},[92748,92749,92750],{"id":76859,"depth":1162,"text":76860},{"id":76872,"depth":1162,"text":76873},{"id":76977,"depth":1162,"text":76978},{"id":77266,"depth":19,"text":77267,"children":92752},[92753,92754,92755],{"id":77270,"depth":1162,"text":77271},{"id":77713,"depth":1162,"text":77714},{"id":78124,"depth":1162,"text":78125},{"id":78187,"depth":19,"text":78188},{"id":78266,"depth":19,"text":78267},{"id":78359,"depth":19,"text":78360},{"id":80204,"depth":19,"text":80205,"children":92760},[92761,92762,92763,92764,92765],{"id":80208,"depth":1162,"text":80209},{"id":80220,"depth":1162,"text":80221},{"id":80439,"depth":1162,"text":80440},{"id":80457,"depth":1162,"text":80458},{"id":80517,"depth":1162,"text":80518},{"id":84785,"depth":19,"text":84786,"children":92767},[92768,92769,92770],{"id":84789,"depth":1162,"text":84790},{"id":84807,"depth":1162,"text":84808},{"id":84833,"depth":1162,"text":84834},{"id":84842,"depth":19,"text":84843},{"id":84864,"depth":19,"text":84865,"children":92773},[92774,92775,92776,92777,92778,92779,92780,92781],{"id":84868,"depth":1162,"text":84869},{"id":85129,"depth":1162,"text":85130},{"id":85315,"depth":1162,"text":85316},{"id":85682,"depth":1162,"text":85683},{"id":85798,"depth":1162,"text":85799},{"id":85834,"depth":1162,"text":85835},{"id":85881,"depth":1162,"text":85882},{"id":85915,"depth":1162,"text":85916},{"id":87278,"depth":19,"text":87279,"children":92783},[92784,92785],{"id":87282,"depth":1162,"text":87283},{"id":87319,"depth":1162,"text":87320},{"id":88674,"depth":19,"text":88675},{"id":89045,"depth":19,"text":89046,"children":92788},[92789,92790],{"id":89049,"depth":1162,"text":89050},{"id":89083,"depth":1162,"text":89084},{"id":89812,"depth":19,"text":89813,"children":92792},[92793,92794,92795,92796],{"id":89816,"depth":1162,"text":89817},{"id":90774,"depth":1162,"text":90775},{"id":91716,"depth":1162,"text":91717},{"id":91790,"depth":1162,"text":91791},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76659,"description":23361},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92803,"title":92804,"body":92805,"description":92816,"extension":21,"meta":92817,"navigation":23,"path":92819,"seo":92820,"stem":92821,"__hash__":92822},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92806,"toc":92814},[92807],[14,92808,92809,92810],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[345,92811,92812],{"href":92812,"rel":92813},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[23850],{"title":18,"searchDepth":19,"depth":19,"links":92815},[],"三件套第三套学习",{"category":92818},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92804,"description":92816},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92824,"title":92825,"body":92826,"description":23361,"extension":21,"meta":92931,"navigation":23,"path":92932,"seo":92933,"stem":92934,"__hash__":92935},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92827,"toc":92926},[92828,92835,92838,92841,92844,92848,92857,92860,92863,92867,92876,92879,92883,92886,92906,92909,92923],[14,92829,92830],{},[345,92831,92834],{"href":92832,"rel":92833},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[23850],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,92836,92825],{"id":92837},"_1安装",[14,92839,92840],{},"numpy是科学计算基础库,底层是C语言",[14,92842,92843],{},"三种方式：",[38,92845,92847],{"id":92846},"_11-通过pip安装","1.1 通过pip安装",[87,92849,92851],{"className":30357,"code":92850,"language":30359,"meta":18,"style":18},"pip install numpy\n",[93,92852,92853],{"__ignoreMap":18},[96,92854,92855],{"class":98,"line":99},[96,92856,92850],{"class":106},[14,92858,92859],{},"首选方式，自动处理依赖项",[14,92861,92862],{},"在提示系统命令符中使用cmd",[38,92864,92866],{"id":92865},"_12-通过anaconda安装","1.2 通过Anaconda安装",[87,92868,92870],{"className":30357,"code":92869,"language":30359,"meta":18,"style":18},"conda install numpy\n",[93,92871,92872],{"__ignoreMap":18},[96,92873,92874],{"class":98,"line":99},[96,92875,92869],{"class":106},[14,92877,92878],{},"自动解决环境依赖",[38,92880,92882],{"id":92881},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[14,92884,92885],{},"对于Debian\u002FUbuntu",[87,92887,92889],{"className":30357,"code":92888,"language":30359,"meta":18,"style":18},"sudo apt-get install python3-numpy\n",[93,92890,92891],{"__ignoreMap":18},[96,92892,92893,92896,92898,92901,92903],{"class":98,"line":99},[96,92894,92895],{"class":106},"sudo apt",[96,92897,639],{"class":102},[96,92899,92900],{"class":106},"get install python3",[96,92902,639],{"class":102},[96,92904,92905],{"class":106},"numpy\n",[14,92907,92908],{},"对于Fedora:",[87,92910,92912],{"className":30357,"code":92911,"language":30359,"meta":18,"style":18},"sudo dnf install python3-numpy\n",[93,92913,92914],{"__ignoreMap":18},[96,92915,92916,92919,92921],{"class":98,"line":99},[96,92917,92918],{"class":106},"sudo dnf install python3",[96,92920,639],{"class":102},[96,92922,92905],{"class":106},[5110,92924,92925],{},"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":18,"searchDepth":19,"depth":19,"links":92927},[92928,92929,92930],{"id":92846,"depth":19,"text":92847},{"id":92865,"depth":19,"text":92866},{"id":92881,"depth":19,"text":92882},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92825,"description":23361},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":92937,"title":92938,"body":92939,"description":23361,"extension":21,"meta":93052,"navigation":23,"path":93053,"seo":93054,"stem":93055,"__hash__":93056},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":92940,"toc":93050},[92941,92944,92947,92950,92953,92956,92959,92962,92965,92968,93044,93047],[10,92942,92938],{"id":92943},"_10算数函数",[14,92945,92946],{},"加减乘除运算跟python基础语法没区别",[14,92948,92949],{},"除了python那种方法外还可以使用函数",[14,92951,92952],{},"加：np.add(a,b)",[14,92954,92955],{},"减：np.subtract(a,b)",[14,92957,92958],{},"乘：np.multiply(a,b)",[14,92960,92961],{},"除：np.divide(a,b) == a\u002Fb",[14,92963,92964],{},"取余：np.mod(a,b) == a%b",[14,92966,92967],{},"必须会的用法：",[87,92969,92971],{"className":30357,"code":92970,"language":30359,"meta":18,"style":18},"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",[93,92972,92973,92995,93016,93026,93039],{"__ignoreMap":18},[96,92974,92975,92977,92979,92982,92984,92987,92989,92991,92993],{"class":98,"line":99},[96,92976,345],{"class":106},[96,92978,152],{"class":102},[96,92980,92981],{"class":106},"np.arange(",[96,92983,527],{"class":155},[96,92985,92986],{"class":106},").reshape(",[96,92988,178],{"class":155},[96,92990,485],{"class":106},[96,92992,178],{"class":155},[96,92994,113],{"class":106},[96,92996,92997,92999,93001,93004,93006,93008,93010,93012,93014],{"class":98,"line":19},[96,92998,370],{"class":106},[96,93000,152],{"class":102},[96,93002,93003],{"class":106},"np.array([",[96,93005,553],{"class":155},[96,93007,485],{"class":106},[96,93009,553],{"class":155},[96,93011,485],{"class":106},[96,93013,553],{"class":155},[96,93015,4640],{"class":106},[96,93017,93018,93021,93023],{"class":98,"line":1162},[96,93019,93020],{"class":106},"result",[96,93022,152],{"class":102},[96,93024,93025],{"class":106},"np.empty_like(a)\n",[96,93027,93028,93031,93034,93036],{"class":98,"line":1177},[96,93029,93030],{"class":106},"np.add(a,b,",[96,93032,93033],{"class":5200},"out",[96,93035,152],{"class":102},[96,93037,93038],{"class":106},"result)\n",[96,93040,93041],{"class":98,"line":1183},[96,93042,93043],{"class":106},"result\n",[14,93045,93046],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[5110,93048,93049],{},"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":18,"searchDepth":19,"depth":19,"links":93051},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":92938,"description":23361},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93058,"title":93059,"body":93060,"description":23361,"extension":21,"meta":93822,"navigation":23,"path":93823,"seo":93824,"stem":93825,"__hash__":93826},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93061,"toc":93809},[93062,93065,93068,93071,93075,93114,93118,93162,93222,93226,93229,93268,93271,93316,93320,93356,93360,93429,93433,93497,93501,93504,93507,93510,93513,93549,93553,93593,93597,93669,93672,93676,93739,93743,93806],[10,93063,93059],{"id":93064},"_11统计函数",[14,93066,93067],{},"sum max min mean",[14,93069,93070],{},"这些有axis参数，可以指定方向",[38,93072,93074],{"id":93073},"_111-sum求和函数","11.1 sum()求和函数",[87,93076,93078],{"className":30357,"code":93077,"language":30359,"meta":18,"style":18},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[93,93079,93080,93085,93106],{"__ignoreMap":18},[96,93081,93082],{"class":98,"line":99},[96,93083,93084],{"class":165},"#创建一维数组\n",[96,93086,93087,93089,93091,93094,93096,93098,93100,93102,93104],{"class":98,"line":19},[96,93088,345],{"class":106},[96,93090,152],{"class":102},[96,93092,93093],{"class":106},"np.random.randint(",[96,93095,324],{"class":155},[96,93097,485],{"class":106},[96,93099,418],{"class":155},[96,93101,485],{"class":106},[96,93103,807],{"class":155},[96,93105,113],{"class":106},[96,93107,93108,93111],{"class":98,"line":1162},[96,93109,93110],{"class":106},"np.sum(a)",[96,93112,93113],{"class":165},"#求和\n",[38,93115,93117],{"id":93116},"_112-max求最大值函数","11.2 max()求最大值函数",[87,93119,93121],{"className":30357,"code":93120,"language":30359,"meta":18,"style":18},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[93,93122,93123,93127,93147,93152,93157],{"__ignoreMap":18},[96,93124,93125],{"class":98,"line":99},[96,93126,93084],{"class":165},[96,93128,93129,93131,93133,93135,93137,93139,93141,93143,93145],{"class":98,"line":19},[96,93130,345],{"class":106},[96,93132,152],{"class":102},[96,93134,93093],{"class":106},[96,93136,324],{"class":155},[96,93138,485],{"class":106},[96,93140,418],{"class":155},[96,93142,485],{"class":106},[96,93144,807],{"class":155},[96,93146,113],{"class":106},[96,93148,93149],{"class":98,"line":1162},[96,93150,93151],{"class":106},"np.max(a)\n",[96,93153,93154],{"class":98,"line":1177},[96,93155,93156],{"class":165},"#最大索引(求最大元素的索引)arg\n",[96,93158,93159],{"class":98,"line":1183},[96,93160,93161],{"class":106},"np.argmax(a)\n",[87,93163,93165],{"className":30357,"code":93164,"language":30359,"meta":18,"style":18},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[93,93166,93167,93188,93208,93212],{"__ignoreMap":18},[96,93168,93169,93171,93173,93176,93178,93180,93182,93184,93186],{"class":98,"line":99},[96,93170,10903],{"class":106},[96,93172,152],{"class":102},[96,93174,93175],{"class":106}," np.array([",[96,93177,324],{"class":155},[96,93179,12419],{"class":106},[96,93181,426],{"class":155},[96,93183,12419],{"class":106},[96,93185,178],{"class":155},[96,93187,4640],{"class":106},[96,93189,93190,93192,93194,93196,93198,93200,93202,93204,93206],{"class":98,"line":19},[96,93191,10929],{"class":106},[96,93193,152],{"class":102},[96,93195,93175],{"class":106},[96,93197,178],{"class":155},[96,93199,12419],{"class":106},[96,93201,184],{"class":155},[96,93203,12419],{"class":106},[96,93205,400],{"class":155},[96,93207,4640],{"class":106},[96,93209,93210],{"class":98,"line":1162},[96,93211,2383],{"emptyLinePlaceholder":23},[96,93213,93214,93216,93219],{"class":98,"line":1177},[96,93215,30394],{"class":155},[96,93217,93218],{"class":106},"(np.maximum(a, b))   ",[96,93220,93221],{"class":165},"# [3 5 4]，每个位置上取较大值\n",[38,93223,93225],{"id":93224},"_113-mean求平均值函数","11.3 mean()求平均值函数",[14,93227,93228],{},"①一维数组：",[87,93230,93232],{"className":30357,"code":93231,"language":30359,"meta":18,"style":18},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[93,93233,93234,93238,93258,93263],{"__ignoreMap":18},[96,93235,93236],{"class":98,"line":99},[96,93237,93084],{"class":165},[96,93239,93240,93242,93244,93246,93248,93250,93252,93254,93256],{"class":98,"line":19},[96,93241,345],{"class":106},[96,93243,152],{"class":102},[96,93245,93093],{"class":106},[96,93247,324],{"class":155},[96,93249,485],{"class":106},[96,93251,418],{"class":155},[96,93253,485],{"class":106},[96,93255,807],{"class":155},[96,93257,113],{"class":106},[96,93259,93260],{"class":98,"line":1162},[96,93261,93262],{"class":165},"#求平均值\n",[96,93264,93265],{"class":98,"line":1177},[96,93266,93267],{"class":106},"np.mean(a)\n",[14,93269,93270],{},"②二维数组",[87,93272,93274],{"className":30357,"code":93273,"language":30359,"meta":18,"style":18},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[93,93275,93276,93281,93306,93311],{"__ignoreMap":18},[96,93277,93278],{"class":98,"line":99},[96,93279,93280],{"class":165},"#二维数组\n",[96,93282,93283,93286,93288,93290,93292,93294,93296,93298,93300,93302,93304],{"class":98,"line":19},[96,93284,93285],{"class":106},"aa",[96,93287,152],{"class":102},[96,93289,92981],{"class":106},[96,93291,324],{"class":155},[96,93293,485],{"class":106},[96,93295,630],{"class":155},[96,93297,92986],{"class":106},[96,93299,178],{"class":155},[96,93301,485],{"class":106},[96,93303,400],{"class":155},[96,93305,113],{"class":106},[96,93307,93308],{"class":98,"line":1162},[96,93309,93310],{"class":165},"#对数组中的所有数求平均\n",[96,93312,93313],{"class":98,"line":1177},[96,93314,93315],{"class":106},"np.mean(aa)\n",[38,93317,93319],{"id":93318},"_114-median求中位数函数","11.4 median()求中位数函数",[87,93321,93323],{"className":30357,"code":93322,"language":30359,"meta":18,"style":18},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[93,93324,93325,93330,93346,93351],{"__ignoreMap":18},[96,93326,93327],{"class":98,"line":99},[96,93328,93329],{"class":165},"#求中位数\n",[96,93331,93332,93334,93336,93338,93340,93342,93344],{"class":98,"line":19},[96,93333,370],{"class":106},[96,93335,152],{"class":102},[96,93337,92981],{"class":106},[96,93339,324],{"class":155},[96,93341,485],{"class":106},[96,93343,553],{"class":155},[96,93345,113],{"class":106},[96,93347,93348],{"class":98,"line":1162},[96,93349,93350],{"class":106},"np.median(b)\n",[96,93352,93353],{"class":98,"line":1177},[96,93354,93355],{"class":165},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[38,93357,93359],{"id":93358},"_115-power求幂运算函数","11.5 power()求幂运算函数",[87,93361,93363],{"className":30357,"code":93362,"language":30359,"meta":18,"style":18},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[93,93364,93365,93381,93386,93391,93400,93405,93414],{"__ignoreMap":18},[96,93366,93367,93369,93371,93373,93375,93377,93379],{"class":98,"line":99},[96,93368,370],{"class":106},[96,93370,152],{"class":102},[96,93372,92981],{"class":106},[96,93374,324],{"class":155},[96,93376,485],{"class":106},[96,93378,553],{"class":155},[96,93380,113],{"class":106},[96,93382,93383],{"class":98,"line":19},[96,93384,93385],{"class":165},"#幂运算\n",[96,93387,93388],{"class":98,"line":1162},[96,93389,93390],{"class":165},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[96,93392,93393,93396,93398],{"class":98,"line":1177},[96,93394,93395],{"class":106},"np.power(b,",[96,93397,184],{"class":155},[96,93399,113],{"class":106},[96,93401,93402],{"class":98,"line":1183},[96,93403,93404],{"class":165},"#或者以下代码，将数据存储起来\n",[96,93406,93407,93409,93411],{"class":98,"line":1197},[96,93408,952],{"class":106},[96,93410,152],{"class":102},[96,93412,93413],{"class":106},"np.empty_like(b)\n",[96,93415,93416,93418,93420,93422,93424,93426],{"class":98,"line":1203},[96,93417,93395],{"class":106},[96,93419,184],{"class":155},[96,93421,485],{"class":106},[96,93423,93033],{"class":5200},[96,93425,152],{"class":102},[96,93427,93428],{"class":106},"y)\n",[38,93430,93432],{"id":93431},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[87,93434,93436],{"className":30357,"code":93435,"language":30359,"meta":18,"style":18},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[93,93437,93438,93454,93459,93464,93468,93486],{"__ignoreMap":18},[96,93439,93440,93442,93444,93446,93448,93450,93452],{"class":98,"line":99},[96,93441,370],{"class":106},[96,93443,152],{"class":102},[96,93445,92981],{"class":106},[96,93447,324],{"class":155},[96,93449,485],{"class":106},[96,93451,553],{"class":155},[96,93453,113],{"class":106},[96,93455,93456],{"class":98,"line":19},[96,93457,93458],{"class":165},"#开方\n",[96,93460,93461],{"class":98,"line":1162},[96,93462,93463],{"class":106},"np.sqrt(b)\n",[96,93465,93466],{"class":98,"line":1177},[96,93467,93404],{"class":165},[96,93469,93470,93472,93474,93477,93480,93482,93484],{"class":98,"line":1183},[96,93471,952],{"class":106},[96,93473,152],{"class":102},[96,93475,93476],{"class":106},"np.empty_like(b,",[96,93478,93479],{"class":5200},"dtype",[96,93481,152],{"class":102},[96,93483,146],{"class":155},[96,93485,113],{"class":106},[96,93487,93488,93491,93493,93495],{"class":98,"line":1197},[96,93489,93490],{"class":106},"np.sqrt(b,",[96,93492,93033],{"class":5200},[96,93494,152],{"class":102},[96,93496,93428],{"class":106},[38,93498,93500],{"id":93499},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[14,93502,93503],{},"对数组中的元素累计求和，可指定轴",[14,93505,93506],{},"#累计求和的意思是：",[14,93508,93509],{},"a = np.array([1, 2, 3, 4])",[14,93511,93512],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[87,93514,93516],{"className":30357,"code":93515,"language":30359,"meta":18,"style":18},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[93,93517,93518,93534,93539,93544],{"__ignoreMap":18},[96,93519,93520,93522,93524,93526,93528,93530,93532],{"class":98,"line":99},[96,93521,370],{"class":106},[96,93523,152],{"class":102},[96,93525,92981],{"class":106},[96,93527,324],{"class":155},[96,93529,485],{"class":106},[96,93531,553],{"class":155},[96,93533,113],{"class":106},[96,93535,93536],{"class":98,"line":19},[96,93537,93538],{"class":106},"np.cumsum(b)\n",[96,93540,93541],{"class":98,"line":1162},[96,93542,93543],{"class":165},"#结果：\n",[96,93545,93546],{"class":98,"line":1177},[96,93547,93548],{"class":165},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[38,93550,93552],{"id":93551},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[87,93554,93556],{"className":30357,"code":93555,"language":30359,"meta":18,"style":18},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[93,93557,93558,93574,93579,93584,93588],{"__ignoreMap":18},[96,93559,93560,93562,93564,93566,93568,93570,93572],{"class":98,"line":99},[96,93561,370],{"class":106},[96,93563,152],{"class":102},[96,93565,92981],{"class":106},[96,93567,324],{"class":155},[96,93569,485],{"class":106},[96,93571,553],{"class":155},[96,93573,113],{"class":106},[96,93575,93576],{"class":98,"line":19},[96,93577,93578],{"class":165},"#对数组中的元素累计求积，可指定轴\n",[96,93580,93581],{"class":98,"line":1162},[96,93582,93583],{"class":106},"np.cumprod(b)\n",[96,93585,93586],{"class":98,"line":1177},[96,93587,93543],{"class":165},[96,93589,93590],{"class":98,"line":1183},[96,93591,93592],{"class":165},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[38,93594,93596],{"id":93595},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[87,93598,93600],{"className":30357,"code":93599,"language":30359,"meta":18,"style":18},"#删除数组中的重复数据，并对数据进行排序\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",[93,93601,93602,93607,93655,93660,93664],{"__ignoreMap":18},[96,93603,93604],{"class":98,"line":99},[96,93605,93606],{"class":165},"#删除数组中的重复数据，并对数据进行排序\n",[96,93608,93609,93611,93613,93615,93617,93619,93621,93623,93625,93627,93629,93631,93633,93635,93637,93639,93641,93643,93645,93647,93649,93651,93653],{"class":98,"line":19},[96,93610,345],{"class":106},[96,93612,152],{"class":102},[96,93614,93003],{"class":106},[96,93616,324],{"class":155},[96,93618,485],{"class":106},[96,93620,184],{"class":155},[96,93622,485],{"class":106},[96,93624,178],{"class":155},[96,93626,485],{"class":106},[96,93628,605],{"class":155},[96,93630,485],{"class":106},[96,93632,178],{"class":155},[96,93634,485],{"class":106},[96,93636,553],{"class":155},[96,93638,485],{"class":106},[96,93640,304],{"class":155},[96,93642,485],{"class":106},[96,93644,298],{"class":155},[96,93646,485],{"class":106},[96,93648,882],{"class":155},[96,93650,485],{"class":106},[96,93652,400],{"class":155},[96,93654,4640],{"class":106},[96,93656,93657],{"class":98,"line":1162},[96,93658,93659],{"class":106},"np.unique(a)\n",[96,93661,93662],{"class":98,"line":1177},[96,93663,93543],{"class":165},[96,93665,93666],{"class":98,"line":1183},[96,93667,93668],{"class":165},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[14,93670,93671],{},"升序形式排序",[38,93673,93675],{"id":93674},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[87,93677,93679],{"className":30357,"code":93678,"language":30359,"meta":18,"style":18},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[93,93680,93681,93729,93734],{"__ignoreMap":18},[96,93682,93683,93685,93687,93689,93691,93693,93695,93697,93699,93701,93703,93705,93707,93709,93711,93713,93715,93717,93719,93721,93723,93725,93727],{"class":98,"line":99},[96,93684,345],{"class":106},[96,93686,152],{"class":102},[96,93688,93003],{"class":106},[96,93690,324],{"class":155},[96,93692,485],{"class":106},[96,93694,184],{"class":155},[96,93696,485],{"class":106},[96,93698,178],{"class":155},[96,93700,485],{"class":106},[96,93702,605],{"class":155},[96,93704,485],{"class":106},[96,93706,178],{"class":155},[96,93708,485],{"class":106},[96,93710,553],{"class":155},[96,93712,485],{"class":106},[96,93714,304],{"class":155},[96,93716,485],{"class":106},[96,93718,298],{"class":155},[96,93720,485],{"class":106},[96,93722,882],{"class":155},[96,93724,485],{"class":106},[96,93726,400],{"class":155},[96,93728,4640],{"class":106},[96,93730,93731],{"class":98,"line":19},[96,93732,93733],{"class":165},"#返回数组中非零元素的索引\n",[96,93735,93736],{"class":98,"line":1162},[96,93737,93738],{"class":106},"np.nonzero(a)\n",[38,93740,93742],{"id":93741},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[87,93744,93746],{"className":30357,"code":93745,"language":30359,"meta":18,"style":18},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[93,93747,93748,93796,93801],{"__ignoreMap":18},[96,93749,93750,93752,93754,93756,93758,93760,93762,93764,93766,93768,93770,93772,93774,93776,93778,93780,93782,93784,93786,93788,93790,93792,93794],{"class":98,"line":99},[96,93751,345],{"class":106},[96,93753,152],{"class":102},[96,93755,93003],{"class":106},[96,93757,324],{"class":155},[96,93759,485],{"class":106},[96,93761,184],{"class":155},[96,93763,485],{"class":106},[96,93765,178],{"class":155},[96,93767,485],{"class":106},[96,93769,605],{"class":155},[96,93771,485],{"class":106},[96,93773,178],{"class":155},[96,93775,485],{"class":106},[96,93777,553],{"class":155},[96,93779,485],{"class":106},[96,93781,304],{"class":155},[96,93783,485],{"class":106},[96,93785,298],{"class":155},[96,93787,485],{"class":106},[96,93789,882],{"class":155},[96,93791,485],{"class":106},[96,93793,400],{"class":155},[96,93795,4640],{"class":106},[96,93797,93798],{"class":98,"line":19},[96,93799,93800],{"class":165},"#计算一组数中最大值与最小值的差，可指定轴\n",[96,93802,93803],{"class":98,"line":1162},[96,93804,93805],{"class":106},"np.ptp(a)\n",[5110,93807,93808],{},"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":18,"searchDepth":19,"depth":19,"links":93810},[93811,93812,93813,93814,93815,93816,93817,93818,93819,93820,93821],{"id":93073,"depth":19,"text":93074},{"id":93116,"depth":19,"text":93117},{"id":93224,"depth":19,"text":93225},{"id":93318,"depth":19,"text":93319},{"id":93358,"depth":19,"text":93359},{"id":93431,"depth":19,"text":93432},{"id":93499,"depth":19,"text":93500},{"id":93551,"depth":19,"text":93552},{"id":93595,"depth":19,"text":93596},{"id":93674,"depth":19,"text":93675},{"id":93741,"depth":19,"text":93742},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93059,"description":23361},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93828,"title":93829,"body":93830,"description":23361,"extension":21,"meta":94485,"navigation":23,"path":94486,"seo":94487,"stem":94488,"__hash__":94489},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93831,"toc":94473},[93832,93835,93839,93842,94058,94062,94065,94274,94278,94344,94349,94353,94356,94359,94397,94401,94404,94409,94413,94416,94419,94424,94428,94431,94435,94438,94441,94446,94450,94453,94456,94461,94465,94470],[10,93833,93829],{"id":93834},"_12其他常用函数",[38,93836,93838],{"id":93837},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[14,93840,93841],{},"将数组的数据按照行列复制扩展",[87,93843,93845],{"className":30357,"code":93844,"language":30359,"meta":18,"style":18},"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",[93,93846,93847,93863,93872,93876,93881,93886,93899,93903,93908,93913,93918,93922,93927,93951,93963,93967,93971,93976,93981,93986,93991,93995,94008,94012,94016,94021,94026,94031,94036,94041,94045,94049,94054],{"__ignoreMap":18},[96,93848,93849,93851,93853,93855,93857,93859,93861],{"class":98,"line":99},[96,93850,345],{"class":106},[96,93852,152],{"class":102},[96,93854,92981],{"class":106},[96,93856,324],{"class":155},[96,93858,485],{"class":106},[96,93860,426],{"class":155},[96,93862,113],{"class":106},[96,93864,93865,93868,93870],{"class":98,"line":19},[96,93866,93867],{"class":106},"np.tile(a,",[96,93869,184],{"class":155},[96,93871,113],{"class":106},[96,93873,93874],{"class":98,"line":1162},[96,93875,93543],{"class":165},[96,93877,93878],{"class":98,"line":1177},[96,93879,93880],{"class":165},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[96,93882,93883],{"class":98,"line":1183},[96,93884,93885],{"class":165},"#行复制两次，列复制三次\n",[96,93887,93888,93891,93893,93895,93897],{"class":98,"line":1197},[96,93889,93890],{"class":106},"np.tile(a,(",[96,93892,184],{"class":155},[96,93894,485],{"class":106},[96,93896,178],{"class":155},[96,93898,30476],{"class":106},[96,93900,93901],{"class":98,"line":1203},[96,93902,93543],{"class":165},[96,93904,93905],{"class":98,"line":1294},[96,93906,93907],{"class":211},"'''\n",[96,93909,93910],{"class":98,"line":1300},[96,93911,93912],{"class":211},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[96,93914,93915],{"class":98,"line":1312},[96,93916,93917],{"class":211},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[96,93919,93920],{"class":98,"line":1595},[96,93921,93907],{"class":211},[96,93923,93924],{"class":98,"line":1600},[96,93925,93926],{"class":165},"#创建二维数组\n",[96,93928,93929,93931,93933,93935,93937,93939,93941,93943,93945,93947,93949],{"class":98,"line":1606},[96,93930,93285],{"class":106},[96,93932,152],{"class":102},[96,93934,92981],{"class":106},[96,93936,324],{"class":155},[96,93938,485],{"class":106},[96,93940,630],{"class":155},[96,93942,92986],{"class":106},[96,93944,400],{"class":155},[96,93946,485],{"class":106},[96,93948,178],{"class":155},[96,93950,113],{"class":106},[96,93952,93953,93956,93958,93960],{"class":98,"line":1611},[96,93954,93955],{"class":106},"np.tile(aa,",[96,93957,184],{"class":155},[96,93959,536],{"class":106},[96,93961,93962],{"class":165},"#一个数的时候就是行\n",[96,93964,93965],{"class":98,"line":1625},[96,93966,93543],{"class":165},[96,93968,93969],{"class":98,"line":1630},[96,93970,93907],{"class":211},[96,93972,93973],{"class":98,"line":1636},[96,93974,93975],{"class":211},"array([[ 1,  2,  3,  1,  2,  3],\n",[96,93977,93978],{"class":98,"line":1657},[96,93979,93980],{"class":211},"       [ 4,  5,  6,  4,  5,  6],\n",[96,93982,93983],{"class":98,"line":1662},[96,93984,93985],{"class":211},"       [ 7,  8,  9,  7,  8,  9],\n",[96,93987,93988],{"class":98,"line":1676},[96,93989,93990],{"class":211},"       [10, 11, 12, 10, 11, 12]])\n",[96,93992,93993],{"class":98,"line":1681},[96,93994,93907],{"class":211},[96,93996,93997,94000,94002,94004,94006],{"class":98,"line":1710},[96,93998,93999],{"class":106},"np.tile(aa,(",[96,94001,184],{"class":155},[96,94003,485],{"class":106},[96,94005,178],{"class":155},[96,94007,30476],{"class":106},[96,94009,94010],{"class":98,"line":1715},[96,94011,93543],{"class":165},[96,94013,94014],{"class":98,"line":1732},[96,94015,93907],{"class":211},[96,94017,94018],{"class":98,"line":1737},[96,94019,94020],{"class":211},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[96,94022,94023],{"class":98,"line":1742},[96,94024,94025],{"class":211},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[96,94027,94028],{"class":98,"line":1747},[96,94029,94030],{"class":211},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[96,94032,94033],{"class":98,"line":1761},[96,94034,94035],{"class":211},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[96,94037,94038],{"class":98,"line":1766},[96,94039,94040],{"class":211},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[96,94042,94043],{"class":98,"line":2560},[96,94044,94025],{"class":211},[96,94046,94047],{"class":98,"line":2574},[96,94048,94030],{"class":211},[96,94050,94051],{"class":98,"line":2582},[96,94052,94053],{"class":211},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[96,94055,94056],{"class":98,"line":2587},[96,94057,93907],{"class":211},[38,94059,94061],{"id":94060},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[14,94063,94064],{},"repeat()将数组中的每个元素重复若干次",[87,94066,94068],{"className":30357,"code":94067,"language":30359,"meta":18,"style":18},"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",[93,94069,94070,94086,94095,94099,94104,94128,94133,94142,94146,94151,94155,94160,94176,94180,94184,94189,94194,94199,94203,94208,94212,94217,94222,94226,94242,94246,94250,94255,94260,94265,94270],{"__ignoreMap":18},[96,94071,94072,94074,94076,94078,94080,94082,94084],{"class":98,"line":99},[96,94073,345],{"class":106},[96,94075,152],{"class":102},[96,94077,92981],{"class":106},[96,94079,324],{"class":155},[96,94081,485],{"class":106},[96,94083,426],{"class":155},[96,94085,113],{"class":106},[96,94087,94088,94091,94093],{"class":98,"line":19},[96,94089,94090],{"class":106},"np.repeat(a,",[96,94092,178],{"class":155},[96,94094,113],{"class":106},[96,94096,94097],{"class":98,"line":1162},[96,94098,93543],{"class":165},[96,94100,94101],{"class":98,"line":1177},[96,94102,94103],{"class":165},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[96,94105,94106,94108,94110,94112,94114,94116,94118,94120,94122,94124,94126],{"class":98,"line":1183},[96,94107,93285],{"class":106},[96,94109,152],{"class":102},[96,94111,92981],{"class":106},[96,94113,324],{"class":155},[96,94115,485],{"class":106},[96,94117,630],{"class":155},[96,94119,92986],{"class":106},[96,94121,400],{"class":155},[96,94123,485],{"class":106},[96,94125,178],{"class":155},[96,94127,113],{"class":106},[96,94129,94130],{"class":98,"line":1197},[96,94131,94132],{"class":165},"#这个重复之后二维变成一维\n",[96,94134,94135,94138,94140],{"class":98,"line":1203},[96,94136,94137],{"class":106},"np.repeat(aa,",[96,94139,184],{"class":155},[96,94141,113],{"class":106},[96,94143,94144],{"class":98,"line":1294},[96,94145,93907],{"class":211},[96,94147,94148],{"class":98,"line":1300},[96,94149,94150],{"class":211},"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",[96,94152,94153],{"class":98,"line":1312},[96,94154,93907],{"class":211},[96,94156,94157],{"class":98,"line":1595},[96,94158,94159],{"class":165},"#指定axis\n",[96,94161,94162,94164,94166,94168,94170,94172,94174],{"class":98,"line":1600},[96,94163,94137],{"class":106},[96,94165,184],{"class":155},[96,94167,485],{"class":106},[96,94169,47493],{"class":5200},[96,94171,152],{"class":102},[96,94173,298],{"class":155},[96,94175,113],{"class":106},[96,94177,94178],{"class":98,"line":1606},[96,94179,93543],{"class":165},[96,94181,94182],{"class":98,"line":1611},[96,94183,93907],{"class":211},[96,94185,94186],{"class":98,"line":1625},[96,94187,94188],{"class":211},"array([[ 1,  2,  3],\n",[96,94190,94191],{"class":98,"line":1630},[96,94192,94193],{"class":211},"       [ 1,  2,  3],\n",[96,94195,94196],{"class":98,"line":1636},[96,94197,94198],{"class":211},"       [ 4,  5,  6],\n",[96,94200,94201],{"class":98,"line":1657},[96,94202,94198],{"class":211},[96,94204,94205],{"class":98,"line":1662},[96,94206,94207],{"class":211},"       [ 7,  8,  9],\n",[96,94209,94210],{"class":98,"line":1676},[96,94211,94207],{"class":211},[96,94213,94214],{"class":98,"line":1681},[96,94215,94216],{"class":211},"       [10, 11, 12],\n",[96,94218,94219],{"class":98,"line":1710},[96,94220,94221],{"class":211},"       [10, 11, 12]])\n",[96,94223,94224],{"class":98,"line":1715},[96,94225,93907],{"class":211},[96,94227,94228,94230,94232,94234,94236,94238,94240],{"class":98,"line":1732},[96,94229,94137],{"class":106},[96,94231,184],{"class":155},[96,94233,485],{"class":106},[96,94235,47493],{"class":5200},[96,94237,152],{"class":102},[96,94239,324],{"class":155},[96,94241,113],{"class":106},[96,94243,94244],{"class":98,"line":1737},[96,94245,93543],{"class":165},[96,94247,94248],{"class":98,"line":1742},[96,94249,93907],{"class":211},[96,94251,94252],{"class":98,"line":1747},[96,94253,94254],{"class":211},"array([[ 1,  1,  2,  2,  3,  3],\n",[96,94256,94257],{"class":98,"line":1761},[96,94258,94259],{"class":211},"       [ 4,  4,  5,  5,  6,  6],\n",[96,94261,94262],{"class":98,"line":1766},[96,94263,94264],{"class":211},"       [ 7,  7,  8,  8,  9,  9],\n",[96,94266,94267],{"class":98,"line":2560},[96,94268,94269],{"class":211},"       [10, 10, 11, 11, 12, 12]])\n",[96,94271,94272],{"class":98,"line":2574},[96,94273,93907],{"class":211},[38,94275,94277],{"id":94276},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[87,94279,94281],{"className":30357,"code":94280,"language":30359,"meta":18,"style":18},"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",[93,94282,94283,94299,94304,94316,94320,94325,94335,94339],{"__ignoreMap":18},[96,94284,94285,94287,94289,94291,94293,94295,94297],{"class":98,"line":99},[96,94286,345],{"class":106},[96,94288,152],{"class":102},[96,94290,92981],{"class":106},[96,94292,324],{"class":155},[96,94294,485],{"class":106},[96,94296,426],{"class":155},[96,94298,113],{"class":106},[96,94300,94301],{"class":98,"line":19},[96,94302,94303],{"class":165},"#array([，2，3，4])\n",[96,94305,94306,94309,94311,94313],{"class":98,"line":1162},[96,94307,94308],{"class":106},"np.roll(a,",[96,94310,184],{"class":155},[96,94312,536],{"class":106},[96,94314,94315],{"class":165},"#传正数向后调多少位，传负数向前调多少位\n",[96,94317,94318],{"class":98,"line":1177},[96,94319,93543],{"class":165},[96,94321,94322],{"class":98,"line":1183},[96,94323,94324],{"class":165},"#array([3, 4, 1, 2])\n",[96,94326,94327,94329,94331,94333],{"class":98,"line":1197},[96,94328,94308],{"class":106},[96,94330,639],{"class":102},[96,94332,324],{"class":155},[96,94334,113],{"class":106},[96,94336,94337],{"class":98,"line":1203},[96,94338,93543],{"class":165},[96,94340,94341],{"class":98,"line":1294},[96,94342,94343],{"class":165},"#array([2, 3, 4, 1])\n",[14,94345,94346],{},[1445,94347],{"alt":18,"src":94348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[38,94350,94352],{"id":94351},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[14,94354,94355],{},"resize()重新调整数组的大小",[14,94357,94358],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[87,94360,94362],{"className":30357,"code":94361,"language":30359,"meta":18,"style":18},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[93,94363,94364,94369,94382],{"__ignoreMap":18},[96,94365,94366],{"class":98,"line":99},[96,94367,94368],{"class":165},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[96,94370,94371,94374,94376,94378,94380],{"class":98,"line":19},[96,94372,94373],{"class":106},"np.resize(aa,(",[96,94375,184],{"class":155},[96,94377,485],{"class":106},[96,94379,451],{"class":155},[96,94381,30476],{"class":106},[96,94383,94384,94386,94388,94390,94392,94394],{"class":98,"line":1162},[96,94385,94373],{"class":106},[96,94387,184],{"class":155},[96,94389,485],{"class":106},[96,94391,527],{"class":155},[96,94393,82750],{"class":106},[96,94395,94396],{"class":165},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[38,94398,94400],{"id":94399},"_125-placeput函数","12.5 place()\u002Fput()函数",[14,94402,94403],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[14,94405,94406],{},[1445,94407],{"alt":18,"src":94408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[38,94410,94412],{"id":94411},"_126-保存加载文件","12.6 保存加载文件",[14,94414,94415],{},"savetxt():将数据保存到txt文件中",[14,94417,94418],{},"loadtxt():从文件加载数据",[14,94420,94421],{},[1445,94422],{"alt":18,"src":94423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[38,94425,94427],{"id":94426},"_127-genfromtxt函数","12.7 genfromtxt()函数",[14,94429,94430],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[38,94432,94434],{"id":94433},"_128-anyall函数","12.8 any()\u002Fall()函数",[14,94436,94437],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[14,94439,94440],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[14,94442,94443],{},[1445,94444],{"alt":18,"src":94445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[38,94447,94449],{"id":94448},"_129-where语句","12.9 where语句",[14,94451,94452],{},"np.where(条件,x,y)",[14,94454,94455],{},"如果条件为True,对应值为x,否则对应值为y",[14,94457,94458],{},[1445,94459],{"alt":18,"src":94460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[38,94462,94464],{"id":94463},"_1210-dot矩阵","12.10 dot()矩阵",[14,94466,94467],{},[1445,94468],{"alt":18,"src":94469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[5110,94471,94472],{},"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":18,"searchDepth":19,"depth":19,"links":94474},[94475,94476,94477,94478,94479,94480,94481,94482,94483,94484],{"id":93837,"depth":19,"text":93838},{"id":94060,"depth":19,"text":94061},{"id":94276,"depth":19,"text":94277},{"id":94351,"depth":19,"text":94352},{"id":94399,"depth":19,"text":94400},{"id":94411,"depth":19,"text":94412},{"id":94426,"depth":19,"text":94427},{"id":94433,"depth":19,"text":94434},{"id":94448,"depth":19,"text":94449},{"id":94463,"depth":19,"text":94464},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93829,"description":23361},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94491,"title":94492,"body":94493,"description":23361,"extension":21,"meta":94846,"navigation":23,"path":94847,"seo":94848,"stem":94849,"__hash__":94850},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94494,"toc":94844},[94495,94498,94501,94504,94507,94510,94575,94577,94841],[10,94496,94492],{"id":94497},"_13数组排序",[14,94499,94500],{},"排序主要用到的方法是np.sort和np.argsort",[14,94502,94503],{},"其中np.sort()对数组直接排序",[14,94505,94506],{},"而np.argsort()是返回排序后的原始索引",[14,94508,94509],{},"①一维数组",[87,94511,94513],{"className":30357,"code":94512,"language":30359,"meta":18,"style":18},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[93,94514,94515,94519,94559,94567],{"__ignoreMap":18},[96,94516,94517],{"class":98,"line":99},[96,94518,93084],{"class":165},[96,94520,94521,94523,94525,94527,94529,94531,94533,94535,94537,94539,94541,94543,94545,94547,94549,94551,94553,94555,94557],{"class":98,"line":19},[96,94522,345],{"class":106},[96,94524,152],{"class":102},[96,94526,93003],{"class":106},[96,94528,178],{"class":155},[96,94530,485],{"class":106},[96,94532,605],{"class":155},[96,94534,485],{"class":106},[96,94536,502],{"class":155},[96,94538,485],{"class":106},[96,94540,882],{"class":155},[96,94542,485],{"class":106},[96,94544,386],{"class":155},[96,94546,485],{"class":106},[96,94548,1000],{"class":155},[96,94550,485],{"class":106},[96,94552,451],{"class":155},[96,94554,485],{"class":106},[96,94556,553],{"class":155},[96,94558,4640],{"class":106},[96,94560,94561,94564],{"class":98,"line":1162},[96,94562,94563],{"class":106},"np.sort(a)",[96,94565,94566],{"class":165},"#升序排序\n",[96,94568,94569,94572],{"class":98,"line":1177},[96,94570,94571],{"class":106},"np.argsort(a)",[96,94573,94574],{"class":165},"#按照元素大小来索引排序\n",[14,94576,93270],{},[87,94578,94580],{"className":30357,"code":94579,"language":30359,"meta":18,"style":18},"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",[93,94581,94582,94594,94620,94625,94629,94634,94639,94644,94649,94653,94661,94665,94670,94675,94680,94685,94689,94694,94707,94711,94716,94721,94726,94731,94735,94740,94752,94756,94760,94764,94768,94772,94776,94781,94796,94801,94810,94815,94819,94823,94828,94832,94837],{"__ignoreMap":18},[96,94583,94584,94587,94589,94591],{"class":98,"line":99},[96,94585,94586],{"class":106},"np.random.seed(",[96,94588,298],{"class":155},[96,94590,536],{"class":106},[96,94592,94593],{"class":165},"#保证每次值一样\n",[96,94595,94596,94598,94600,94602,94604,94606,94608,94610,94612,94614,94616,94618],{"class":98,"line":19},[96,94597,93285],{"class":106},[96,94599,152],{"class":102},[96,94601,93093],{"class":106},[96,94603,418],{"class":155},[96,94605,485],{"class":106},[96,94607,31475],{"class":5200},[96,94609,152],{"class":102},[96,94611,107],{"class":106},[96,94613,400],{"class":155},[96,94615,485],{"class":106},[96,94617,451],{"class":155},[96,94619,30476],{"class":106},[96,94621,94622],{"class":98,"line":1162},[96,94623,94624],{"class":165},"#原数组：\n",[96,94626,94627],{"class":98,"line":1177},[96,94628,93907],{"class":211},[96,94630,94631],{"class":98,"line":1183},[96,94632,94633],{"class":211},"array([[44, 47, 64, 67, 67,  9],\n",[96,94635,94636],{"class":98,"line":1197},[96,94637,94638],{"class":211},"       [83, 21, 36, 87, 70, 88],\n",[96,94640,94641],{"class":98,"line":1203},[96,94642,94643],{"class":211},"       [88, 12, 58, 65, 39, 87],\n",[96,94645,94646],{"class":98,"line":1294},[96,94647,94648],{"class":211},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[96,94650,94651],{"class":98,"line":1300},[96,94652,93907],{"class":211},[96,94654,94655,94658],{"class":98,"line":1312},[96,94656,94657],{"class":106},"np.sort(aa)",[96,94659,94660],{"class":165},"#每行进行了排序\n",[96,94662,94663],{"class":98,"line":1595},[96,94664,93907],{"class":211},[96,94666,94667],{"class":98,"line":1600},[96,94668,94669],{"class":211},"array([[ 9, 44, 47, 64, 67, 67],\n",[96,94671,94672],{"class":98,"line":1606},[96,94673,94674],{"class":211},"       [21, 36, 70, 83, 87, 88],\n",[96,94676,94677],{"class":98,"line":1611},[96,94678,94679],{"class":211},"       [12, 39, 58, 65, 87, 88],\n",[96,94681,94682],{"class":98,"line":1625},[96,94683,94684],{"class":211},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[96,94686,94687],{"class":98,"line":1630},[96,94688,93907],{"class":211},[96,94690,94691],{"class":98,"line":1636},[96,94692,94693],{"class":165},"#axis=0时\n",[96,94695,94696,94699,94701,94703,94705],{"class":98,"line":1657},[96,94697,94698],{"class":106},"np.sort(aa,",[96,94700,47493],{"class":5200},[96,94702,152],{"class":102},[96,94704,298],{"class":155},[96,94706,113],{"class":106},[96,94708,94709],{"class":98,"line":1662},[96,94710,93907],{"class":211},[96,94712,94713],{"class":98,"line":1676},[96,94714,94715],{"class":211},"array([[44, 12, 36, 37, 25,  9],\n",[96,94717,94718],{"class":98,"line":1681},[96,94719,94720],{"class":211},"       [46, 21, 58, 65, 39, 77],\n",[96,94722,94723],{"class":98,"line":1710},[96,94724,94725],{"class":211},"       [83, 47, 64, 67, 67, 87],\n",[96,94727,94728],{"class":98,"line":1715},[96,94729,94730],{"class":211},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[96,94732,94733],{"class":98,"line":1732},[96,94734,93907],{"class":211},[96,94736,94737],{"class":98,"line":1737},[96,94738,94739],{"class":165},"#axis=1时,为默认值\n",[96,94741,94742,94744,94746,94748,94750],{"class":98,"line":1742},[96,94743,94698],{"class":106},[96,94745,47493],{"class":5200},[96,94747,152],{"class":102},[96,94749,324],{"class":155},[96,94751,113],{"class":106},[96,94753,94754],{"class":98,"line":1747},[96,94755,93907],{"class":211},[96,94757,94758],{"class":98,"line":1761},[96,94759,94669],{"class":211},[96,94761,94762],{"class":98,"line":1766},[96,94763,94674],{"class":211},[96,94765,94766],{"class":98,"line":2560},[96,94767,94679],{"class":211},[96,94769,94770],{"class":98,"line":2574},[96,94771,94684],{"class":211},[96,94773,94774],{"class":98,"line":2582},[96,94775,93907],{"class":211},[96,94777,94778],{"class":98,"line":2587},[96,94779,94780],{"class":165},"#按最后一列排序\n",[96,94782,94783,94785,94787,94790,94792,94794],{"class":98,"line":2593},[96,94784,370],{"class":106},[96,94786,152],{"class":102},[96,94788,94789],{"class":106},"aa[:,",[96,94791,639],{"class":102},[96,94793,324],{"class":155},[96,94795,33225],{"class":106},[96,94797,94798],{"class":98,"line":2599},[96,94799,94800],{"class":165},"#获取最后一列排好序的索引\n",[96,94802,94803,94805,94807],{"class":98,"line":2604},[96,94804,74037],{"class":106},[96,94806,152],{"class":102},[96,94808,94809],{"class":106},"np.argsort(b)\n",[96,94811,94812],{"class":98,"line":7932},[96,94813,94814],{"class":106},"aa[index]\n",[96,94816,94817],{"class":98,"line":7956},[96,94818,93907],{"class":211},[96,94820,94821],{"class":98,"line":7961},[96,94822,94633],{"class":211},[96,94824,94825],{"class":98,"line":7967},[96,94826,94827],{"class":211},"       [46, 88, 81, 37, 25, 77],\n",[96,94829,94830],{"class":98,"line":7994},[96,94831,94643],{"class":211},[96,94833,94834],{"class":98,"line":7999},[96,94835,94836],{"class":211},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[96,94838,94839],{"class":98,"line":8005},[96,94840,93907],{"class":211},[5110,94842,94843],{},"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":18,"searchDepth":19,"depth":19,"links":94845},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94492,"description":23361},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94852,"title":94853,"body":94854,"description":23361,"extension":21,"meta":94884,"navigation":23,"path":94885,"seo":94886,"stem":94887,"__hash__":94888},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":94855,"toc":94882},[94856,94859,94862,94865,94868,94871,94874,94877],[10,94857,94853],{"id":94858},"_14广播机制",[14,94860,94861],{},"广播的规则：",[14,94863,94864],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[14,94866,94867],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[14,94869,94870],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[14,94872,94873],{},"3.如果没有维度形状为1，则会引发异常",[14,94875,94876],{},"也就是只有维度或者个数为1才可以进行广播操作",[14,94878,94879],{},[1445,94880],{"alt":18,"src":94881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":18,"searchDepth":19,"depth":19,"links":94883},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":94853,"description":23361},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":94890,"title":94891,"body":94892,"description":23361,"extension":21,"meta":94990,"navigation":23,"path":94991,"seo":94992,"stem":94993,"__hash__":94994},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":94893,"toc":94988},[94894,94897,94900,94985],[10,94895,94891],{"id":94896},"_15比较掩码",[14,94898,94899],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[87,94901,94903],{"className":30357,"code":94902,"language":30359,"meta":18,"style":18},"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",[93,94904,94905,94951,94962,94976,94980],{"__ignoreMap":18},[96,94906,94907,94909,94911,94914,94916,94918,94920,94922,94924,94926,94928,94930,94932,94934,94936,94938,94940,94942,94944,94946,94948],{"class":98,"line":99},[96,94908,345],{"class":106},[96,94910,152],{"class":102},[96,94912,94913],{"class":106},"np.array([[",[96,94915,324],{"class":155},[96,94917,485],{"class":106},[96,94919,184],{"class":155},[96,94921,485],{"class":106},[96,94923,178],{"class":155},[96,94925,48009],{"class":106},[96,94927,579],{"class":155},[96,94929,485],{"class":106},[96,94931,605],{"class":155},[96,94933,485],{"class":106},[96,94935,630],{"class":155},[96,94937,48009],{"class":106},[96,94939,832],{"class":155},[96,94941,485],{"class":106},[96,94943,857],{"class":155},[96,94945,485],{"class":106},[96,94947,882],{"class":155},[96,94949,94950],{"class":106},"]])\n",[96,94952,94953,94955,94957,94959],{"class":98,"line":19},[96,94954,345],{"class":106},[96,94956,1017],{"class":102},[96,94958,807],{"class":155},[96,94960,94961],{"class":165},"#结果是一个由True,False组成的数组\n",[96,94963,94964,94967,94969,94971,94973],{"class":98,"line":1162},[96,94965,94966],{"class":106},"a[a",[96,94968,1017],{"class":102},[96,94970,807],{"class":155},[96,94972,1047],{"class":106},[96,94974,94975],{"class":165},"#小于20的元素会存到这个数组中\n",[96,94977,94978],{"class":98,"line":1177},[96,94979,93543],{"class":165},[96,94981,94982],{"class":98,"line":1183},[96,94983,94984],{"class":165},"#array([ 1,  2,  3, 11, 12, 13])\n",[5110,94986,94987],{},"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":18,"searchDepth":19,"depth":19,"links":94989},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":94891,"description":23361},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":94996,"title":94997,"body":94998,"description":23361,"extension":21,"meta":95090,"navigation":23,"path":95091,"seo":95092,"stem":95093,"__hash__":95094},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":94999,"toc":95088},[95000,95003,95006,95009,95012,95015,95080,95085],[10,95001,94997],{"id":95002},"_16魔法命令time",[14,95004,95005],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[14,95007,95008],{},"%:行模式",[14,95010,95011],{},"%%:单元格模式",[14,95013,95014],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[87,95016,95018],{"className":30357,"code":95017,"language":30359,"meta":18,"style":18},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[93,95019,95020,95025,95032,95037,95046,95059,95063,95071],{"__ignoreMap":18},[96,95021,95022],{"class":98,"line":99},[96,95023,95024],{"class":165},"#程序执行时间\n",[96,95026,95027,95029],{"class":98,"line":19},[96,95028,30371],{"class":102},[96,95030,95031],{"class":106}," time \n",[96,95033,95034],{"class":98,"line":1162},[96,95035,95036],{"class":165},"#获取时间\n",[96,95038,95039,95042,95044],{"class":98,"line":1177},[96,95040,95041],{"class":106},"start",[96,95043,152],{"class":102},[96,95045,32397],{"class":106},[96,95047,95048,95051,95054,95056],{"class":98,"line":1183},[96,95049,95050],{"class":106},"time.sleep(",[96,95052,95053],{"class":155},"0.4",[96,95055,536],{"class":106},[96,95057,95058],{"class":165},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[96,95060,95061],{"class":98,"line":1197},[96,95062,95036],{"class":165},[96,95064,95065,95067,95069],{"class":98,"line":1203},[96,95066,45780],{"class":106},[96,95068,152],{"class":102},[96,95070,32397],{"class":106},[96,95072,95073,95075,95077],{"class":98,"line":1294},[96,95074,45780],{"class":106},[96,95076,639],{"class":102},[96,95078,95079],{"class":106},"start\n",[14,95081,95082],{},[1445,95083],{"alt":18,"src":95084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[5110,95086,95087],{},"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":18,"searchDepth":19,"depth":19,"links":95089},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":94997,"description":23361},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95096,"title":95097,"body":95098,"description":23361,"extension":21,"meta":95133,"navigation":23,"path":95134,"seo":95135,"stem":95136,"__hash__":95137},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95099,"toc":95131},[95100,95103,95106,95109,95112,95115,95118,95121,95126],[10,95101,95097],{"id":95102},"_17魔法命令timeit",[14,95104,95105],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[14,95107,95108],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[14,95110,95111],{},"单元格模式：",[14,95113,95114],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[14,95116,95117],{},"初始化语句执行次数由轮数来决定",[14,95119,95120],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[14,95122,95123],{},[1445,95124],{"alt":18,"src":95125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[14,95127,95128],{},[1445,95129],{"alt":18,"src":95130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":18,"searchDepth":19,"depth":19,"links":95132},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95097,"description":23361},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95139,"title":95140,"body":95141,"description":23361,"extension":21,"meta":95159,"navigation":23,"path":95160,"seo":95161,"stem":95162,"__hash__":95163},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95142,"toc":95157},[95143,95146,95149,95152],[10,95144,95140],{"id":95145},"_18魔法命令writefile和run",[14,95147,95148],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[14,95150,95151],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[14,95153,95154],{},[1445,95155],{"alt":18,"src":95156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":18,"searchDepth":19,"depth":19,"links":95158},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95140,"description":23361},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95165,"title":95166,"body":95167,"description":23361,"extension":21,"meta":95220,"navigation":23,"path":95221,"seo":95222,"stem":95223,"__hash__":95224},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95168,"toc":95218},[95169,95172,95175,95177,95180,95183,95188,95191,95194,95197,95200,95203,95206,95209,95212,95215],[10,95170,95166],{"id":95171},"_19魔法命令memit",[14,95173,95174],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[14,95176,24578],{},[14,95178,95179],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[14,95181,95182],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[14,95184,95185],{},[1445,95186],{"alt":18,"src":95187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[14,95189,95190],{},"补充：",[14,95192,95193],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[14,95195,95196],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[14,95198,95199],{},"解决方法：",[14,95201,95202],{},"1.cmd",[14,95204,95205],{},"2.依次输入以下代码：",[14,95207,95208],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[14,95210,95211],{},"pip install --upgrade ipython",[14,95213,95214],{},"#升级 memory_profiler 和 setuptools",[14,95216,95217],{},"pip install --upgrade memory_profiler setuptools",{"title":18,"searchDepth":19,"depth":19,"links":95219},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95166,"description":23361},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95226,"title":95227,"body":95228,"description":23361,"extension":21,"meta":96874,"navigation":23,"path":96875,"seo":96876,"stem":96877,"__hash__":96878},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95229,"toc":96844},[95230,95233,95237,95241,95302,95305,95310,95314,95319,95324,95329,95334,95337,95342,95346,95350,95383,95386,95389,95392,95444,95447,95483,95486,95528,95532,95553,95555,95592,95594,95599,95601,95606,95610,95613,95641,95645,95649,95702,95706,95798,95802,95806,95809,95814,95818,95843,95848,95852,95855,95858,95861,95864,95867,95870,95873,95885,95889,95893,95896,95928,95931,95954,95957,95983,95986,96012,96015,96049,96052,96114,96118,96121,96125,96128,96154,96157,96160,96165,96168,96237,96239,96244,96305,96308,96319,96325,96330,96334,96337,96350,96354,96369,96371,96394,96396,96422,96425,96428,96431,96479,96481,96486,96490,96494,96521,96525,96552,96555,96560,96565,96655,96659,96717,96722,96725,96728,96770,96774,96830,96835,96838,96841],[10,95231,95227],{"id":95232},"_2创建数组",[38,95234,95236],{"id":95235},"_21-array函数创建数组","2.1 array()函数创建数组",[67,95238,95240],{"id":95239},"_221-函数语句","2.2.1 函数语句",[87,95242,95244],{"className":30357,"code":95243,"language":30359,"meta":18,"style":18},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[93,95245,95246],{"__ignoreMap":18},[96,95247,95248,95251,95254,95256,95258,95260,95262,95264,95267,95269,95272,95274,95277,95279,95281,95283,95286,95288,95291,95293,95296,95298,95300],{"class":98,"line":99},[96,95249,95250],{"class":106},"numpy.array(",[96,95252,95253],{"class":155},"object",[96,95255,12419],{"class":106},[96,95257,93479],{"class":5200},[96,95259,13548],{"class":102},[96,95261,38912],{"class":155},[96,95263,12419],{"class":106},[96,95265,95266],{"class":5200},"copy",[96,95268,13548],{"class":102},[96,95270,95271],{"class":155}," True",[96,95273,12419],{"class":106},[96,95275,95276],{"class":5200},"order",[96,95278,13548],{"class":102},[96,95280,38912],{"class":155},[96,95282,12419],{"class":106},[96,95284,95285],{"class":5200},"subok",[96,95287,13548],{"class":102},[96,95289,95290],{"class":155}," False",[96,95292,12419],{"class":106},[96,95294,95295],{"class":5200},"ndmin",[96,95297,13548],{"class":102},[96,95299,4076],{"class":155},[96,95301,113],{"class":106},[14,95303,95304],{},"参数：",[14,95306,95307],{},[1445,95308],{"alt":18,"src":95309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[67,95311,95313],{"id":95312},"_222-实例","2.2.2 实例",[14,95315,95316],{},[1445,95317],{"alt":18,"src":95318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[14,95320,95321],{},[1445,95322],{"alt":18,"src":95323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[14,95325,95326],{},[1445,95327],{"alt":18,"src":95328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[14,95330,95331],{},[1445,95332],{"alt":18,"src":95333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[14,95335,95336],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[14,95338,95339],{},[1445,95340],{"alt":18,"src":95341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[38,95343,95345],{"id":95344},"_22-随机数创建数组","2.2 随机数创建数组",[67,95347,95349],{"id":95348},"_221-random语句","2.2.1 random语句",[87,95351,95353],{"className":30357,"code":95352,"language":30359,"meta":18,"style":18},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[93,95354,95355,95360,95365,95373,95378],{"__ignoreMap":18},[96,95356,95357],{"class":98,"line":99},[96,95358,95359],{"class":165},"#random.random()\n",[96,95361,95362],{"class":98,"line":19},[96,95363,95364],{"class":165},"#确定随机种子,就是每次运行结果是相同的\n",[96,95366,95367,95369,95371],{"class":98,"line":1162},[96,95368,94586],{"class":106},[96,95370,298],{"class":155},[96,95372,113],{"class":106},[96,95374,95375],{"class":98,"line":1177},[96,95376,95377],{"class":106},"np.random.random()\n",[96,95379,95380],{"class":98,"line":1183},[96,95381,95382],{"class":165},"#生成一个随机的数目\n",[14,95384,95385],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[14,95387,95388],{},"可以指定数组形状 size",[14,95390,95391],{},"①生成一维数组",[87,95393,95395],{"className":30357,"code":95394,"language":30359,"meta":18,"style":18},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[93,95396,95397,95402,95415,95420,95436],{"__ignoreMap":18},[96,95398,95399],{"class":98,"line":99},[96,95400,95401],{"class":165},"#random.random(size())\n",[96,95403,95404,95407,95409,95411,95413],{"class":98,"line":19},[96,95405,95406],{"class":106},"np.random.random(",[96,95408,31475],{"class":5200},[96,95410,152],{"class":102},[96,95412,426],{"class":155},[96,95414,113],{"class":106},[96,95416,95417],{"class":98,"line":1162},[96,95418,95419],{"class":165},"#生成一位的五个元素\n",[96,95421,95422,95424,95426,95428,95430,95432,95434],{"class":98,"line":1177},[96,95423,345],{"class":106},[96,95425,152],{"class":102},[96,95427,95406],{"class":106},[96,95429,31475],{"class":5200},[96,95431,152],{"class":102},[96,95433,400],{"class":155},[96,95435,113],{"class":106},[96,95437,95438,95441],{"class":98,"line":1183},[96,95439,95440],{"class":106},"a.shape ",[96,95442,95443],{"class":165},"#输出数组形状\n",[14,95445,95446],{},"②生成二维数组",[87,95448,95450],{"className":30357,"code":95449,"language":30359,"meta":18,"style":18},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[93,95451,95452,95456,95478],{"__ignoreMap":18},[96,95453,95454],{"class":98,"line":99},[96,95455,93280],{"class":165},[96,95457,95458,95460,95462,95464,95466,95468,95470,95472,95474,95476],{"class":98,"line":19},[96,95459,93285],{"class":106},[96,95461,152],{"class":102},[96,95463,95406],{"class":106},[96,95465,31475],{"class":5200},[96,95467,152],{"class":102},[96,95469,107],{"class":106},[96,95471,400],{"class":155},[96,95473,485],{"class":106},[96,95475,426],{"class":155},[96,95477,30476],{"class":106},[96,95479,95480],{"class":98,"line":1162},[96,95481,95482],{"class":165},"#生成四行五列的数组\n",[14,95484,95485],{},"③生成三维数组",[87,95487,95489],{"className":30357,"code":95488,"language":30359,"meta":18,"style":18},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[93,95490,95491,95496,95523],{"__ignoreMap":18},[96,95492,95493],{"class":98,"line":99},[96,95494,95495],{"class":165},"#三维数组\n",[96,95497,95498,95501,95503,95505,95507,95509,95511,95513,95515,95517,95519,95521],{"class":98,"line":19},[96,95499,95500],{"class":106},"aaa",[96,95502,152],{"class":102},[96,95504,95406],{"class":106},[96,95506,31475],{"class":5200},[96,95508,152],{"class":102},[96,95510,107],{"class":106},[96,95512,184],{"class":155},[96,95514,485],{"class":106},[96,95516,178],{"class":155},[96,95518,485],{"class":106},[96,95520,400],{"class":155},[96,95522,30476],{"class":106},[96,95524,95525],{"class":98,"line":1162},[96,95526,95527],{"class":106},"aaa.shape\n",[67,95529,95531],{"id":95530},"_222-randint语句","2.2.2 randint语句",[87,95533,95535],{"className":30357,"code":95534,"language":30359,"meta":18,"style":18},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[93,95536,95537,95542],{"__ignoreMap":18},[96,95538,95539],{"class":98,"line":99},[96,95540,95541],{"class":165},"#生成随机的整数 random.randint(low,high,size)\n",[96,95543,95544,95546,95548,95550],{"class":98,"line":19},[96,95545,93093],{"class":106},[96,95547,426],{"class":155},[96,95549,13698],{"class":106},[96,95551,95552],{"class":165},"#0~5中的随机一个数\n",[14,95554,95391],{},[87,95556,95558],{"className":30357,"code":95557,"language":30359,"meta":18,"style":18},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[93,95559,95560,95565,95587],{"__ignoreMap":18},[96,95561,95562],{"class":98,"line":99},[96,95563,95564],{"class":165},"#一维\n",[96,95566,95567,95569,95571,95573,95575,95577,95579,95581,95583,95585],{"class":98,"line":19},[96,95568,93093],{"class":106},[96,95570,324],{"class":155},[96,95572,485],{"class":106},[96,95574,579],{"class":155},[96,95576,485],{"class":106},[96,95578,31475],{"class":5200},[96,95580,152],{"class":102},[96,95582,107],{"class":106},[96,95584,553],{"class":155},[96,95586,30476],{"class":106},[96,95588,95589],{"class":98,"line":1162},[96,95590,95591],{"class":165},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[14,95593,95446],{},[14,95595,95596],{},[1445,95597],{"alt":18,"src":95598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[14,95600,95485],{},[14,95602,95603],{},[1445,95604],{"alt":18,"src":95605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[67,95607,95609],{"id":95608},"_222-rand语句","2.2.2 rand语句",[14,95611,95612],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[87,95614,95616],{"className":30357,"code":95615,"language":30359,"meta":18,"style":18},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[93,95617,95618,95631,95636],{"__ignoreMap":18},[96,95619,95620,95623,95625,95627,95629],{"class":98,"line":99},[96,95621,95622],{"class":106},"np.random.rand(",[96,95624,418],{"class":155},[96,95626,485],{"class":106},[96,95628,553],{"class":155},[96,95630,113],{"class":106},[96,95632,95633],{"class":98,"line":19},[96,95634,95635],{"class":165},"#第一个参数100：行数，表示有100个样本\n",[96,95637,95638],{"class":98,"line":1162},[96,95639,95640],{"class":165},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[38,95642,95644],{"id":95643},"_23-arange创建数组","2.3 arange()创建数组",[67,95646,95648],{"id":95647},"_231-函数语句","2.3.1 函数语句",[87,95650,95652],{"className":30357,"code":95651,"language":30359,"meta":18,"style":18},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[93,95653,95654,95668,95673,95678,95683,95688,95693,95698],{"__ignoreMap":18},[96,95655,95656,95659,95661,95663,95666],{"class":98,"line":99},[96,95657,95658],{"class":106},"numpy.arange([start,] stop[, step], ",[96,95660,93479],{"class":5200},[96,95662,152],{"class":102},[96,95664,95665],{"class":155},"None",[96,95667,113],{"class":106},[96,95669,95670],{"class":98,"line":19},[96,95671,95672],{"class":165},"#参数\n",[96,95674,95675],{"class":98,"line":1162},[96,95676,95677],{"class":211},"\"\"\"\n",[96,95679,95680],{"class":98,"line":1177},[96,95681,95682],{"class":211},"start:起始值，可选，默认从 0 开始。\n",[96,95684,95685],{"class":98,"line":1183},[96,95686,95687],{"class":211},"stop:结束值（不包含该值）。\n",[96,95689,95690],{"class":98,"line":1197},[96,95691,95692],{"class":211},"step:步长，可选，默认是 1。可以为浮点数。\n",[96,95694,95695],{"class":98,"line":1203},[96,95696,95697],{"class":211},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[96,95699,95700],{"class":98,"line":1294},[96,95701,95677],{"class":211},[67,95703,95705],{"id":95704},"_232-实例","2.3.2 实例",[87,95707,95709],{"className":30357,"code":95708,"language":30359,"meta":18,"style":18},"#创建一维数组\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",[93,95710,95711,95715,95739,95744,95749,95753,95776,95780,95784,95789,95794],{"__ignoreMap":18},[96,95712,95713],{"class":98,"line":99},[96,95714,93084],{"class":165},[96,95716,95717,95719,95721,95723,95725,95727,95729,95731,95733,95735,95737],{"class":98,"line":19},[96,95718,92981],{"class":106},[96,95720,324],{"class":155},[96,95722,485],{"class":106},[96,95724,832],{"class":155},[96,95726,485],{"class":106},[96,95728,324],{"class":155},[96,95730,485],{"class":106},[96,95732,93479],{"class":5200},[96,95734,152],{"class":102},[96,95736,110],{"class":155},[96,95738,113],{"class":106},[96,95740,95741],{"class":98,"line":1162},[96,95742,95743],{"class":165},"#输出结果：\n",[96,95745,95746],{"class":98,"line":1177},[96,95747,95748],{"class":165},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[96,95750,95751],{"class":98,"line":1183},[96,95752,93926],{"class":165},[96,95754,95755,95758,95760,95762,95764,95767,95769,95771,95773],{"class":98,"line":1197},[96,95756,95757],{"class":106},"np.array([np.arange(",[96,95759,324],{"class":155},[96,95761,485],{"class":106},[96,95763,400],{"class":155},[96,95765,95766],{"class":106},"),np.arange(",[96,95768,400],{"class":155},[96,95770,485],{"class":106},[96,95772,476],{"class":155},[96,95774,95775],{"class":106},")])\n",[96,95777,95778],{"class":98,"line":1203},[96,95779,93543],{"class":165},[96,95781,95782],{"class":98,"line":1294},[96,95783,95677],{"class":211},[96,95785,95786],{"class":98,"line":1300},[96,95787,95788],{"class":211},"array([[1, 2, 3],\n",[96,95790,95791],{"class":98,"line":1312},[96,95792,95793],{"class":211},"       [4, 5, 6]])\n",[96,95795,95796],{"class":98,"line":1595},[96,95797,95677],{"class":211},[38,95799,95801],{"id":95800},"_24-生态分布","2.4 生态分布",[67,95803,95805],{"id":95804},"_241-标准正态分布","2.4.1 标准正态分布",[14,95807,95808],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[14,95810,95811],{},[1445,95812],{"alt":18,"src":95813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[67,95815,95817],{"id":95816},"_242-常规正态分布","2.4.2 常规正态分布",[87,95819,95821],{"className":30357,"code":95820,"language":30359,"meta":18,"style":18},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[93,95822,95823,95828,95833,95838],{"__ignoreMap":18},[96,95824,95825],{"class":98,"line":99},[96,95826,95827],{"class":106},"random.normal(loc,scale,size)也可以生成正态分布\n",[96,95829,95830],{"class":98,"line":19},[96,95831,95832],{"class":165},"#loc:期望\n",[96,95834,95835],{"class":98,"line":1162},[96,95836,95837],{"class":165},"#scale:方差\n",[96,95839,95840],{"class":98,"line":1177},[96,95841,95842],{"class":165},"#size:用于确定是几维的数列\n",[14,95844,95845],{},[1445,95846],{"alt":18,"src":95847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[38,95849,95851],{"id":95850},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[14,95853,95854],{},"ndim:秩，维度个数",[14,95856,95857],{},"size:数组元素的个数",[14,95859,95860],{},"shape:数组的形状",[14,95862,95863],{},"dtype:数组元素的类型",[14,95865,95866],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[14,95868,95869],{},"他们都是属性，通过数组.属性的形式来确定",[14,95871,95872],{},"如果需要输出多个可以通过以下方式：",[87,95874,95876],{"className":30357,"code":95875,"language":30359,"meta":18,"style":18},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[93,95877,95878],{"__ignoreMap":18},[96,95879,95880,95882],{"class":98,"line":99},[96,95881,30394],{"class":155},[96,95883,95884],{"class":106},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[38,95886,95888],{"id":95887},"_26-其他方式创建数组","2.6 其他方式创建数组",[67,95890,95892],{"id":95891},"_261-zeros创建数组","2.6.1 zeros()创建数组",[14,95894,95895],{},"①创建一维数组",[87,95897,95899],{"className":30357,"code":95898,"language":30359,"meta":18,"style":18},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[93,95900,95901,95910,95914,95919,95924],{"__ignoreMap":18},[96,95902,95903,95906,95908],{"class":98,"line":99},[96,95904,95905],{"class":106},"np.zeros(",[96,95907,553],{"class":155},[96,95909,113],{"class":106},[96,95911,95912],{"class":98,"line":19},[96,95913,95677],{"class":211},[96,95915,95916],{"class":98,"line":1162},[96,95917,95918],{"class":211},"输出结果：\n",[96,95920,95921],{"class":98,"line":1177},[96,95922,95923],{"class":211},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[96,95925,95926],{"class":98,"line":1183},[96,95927,95677],{"class":211},[14,95929,95930],{},"上方代码等价于：",[87,95932,95934],{"className":30357,"code":95933,"language":30359,"meta":18,"style":18},"np.zeros(shape=(10))#创建10个元素的0数组\n",[93,95935,95936],{"__ignoreMap":18},[96,95937,95938,95940,95943,95945,95947,95949,95951],{"class":98,"line":99},[96,95939,95905],{"class":106},[96,95941,95942],{"class":5200},"shape",[96,95944,152],{"class":102},[96,95946,107],{"class":106},[96,95948,553],{"class":155},[96,95950,82750],{"class":106},[96,95952,95953],{"class":165},"#创建10个元素的0数组\n",[14,95955,95956],{},"也可以指定类型",[87,95958,95960],{"className":30357,"code":95959,"language":30359,"meta":18,"style":18},"#指定类型\nnp.zeros(5,dtype=int)\n",[93,95961,95962,95967],{"__ignoreMap":18},[96,95963,95964],{"class":98,"line":99},[96,95965,95966],{"class":165},"#指定类型\n",[96,95968,95969,95971,95973,95975,95977,95979,95981],{"class":98,"line":19},[96,95970,95905],{"class":106},[96,95972,426],{"class":155},[96,95974,485],{"class":106},[96,95976,93479],{"class":5200},[96,95978,152],{"class":102},[96,95980,110],{"class":155},[96,95982,113],{"class":106},[14,95984,95985],{},"②创建二维数组",[87,95987,95989],{"className":30357,"code":95988,"language":30359,"meta":18,"style":18},"np.zeros((3,4),dtype=int)\n",[93,95990,95991],{"__ignoreMap":18},[96,95992,95993,95996,95998,96000,96002,96004,96006,96008,96010],{"class":98,"line":99},[96,95994,95995],{"class":106},"np.zeros((",[96,95997,178],{"class":155},[96,95999,485],{"class":106},[96,96001,400],{"class":155},[96,96003,42235],{"class":106},[96,96005,93479],{"class":5200},[96,96007,152],{"class":102},[96,96009,110],{"class":155},[96,96011,113],{"class":106},[14,96013,96014],{},"③创建三维数组",[87,96016,96018],{"className":30357,"code":96017,"language":30359,"meta":18,"style":18},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[93,96019,96020,96025],{"__ignoreMap":18},[96,96021,96022],{"class":98,"line":99},[96,96023,96024],{"class":165},"#创建三维数组\n",[96,96026,96027,96029,96031,96033,96035,96037,96039,96041,96043,96045,96047],{"class":98,"line":19},[96,96028,95995],{"class":106},[96,96030,178],{"class":155},[96,96032,485],{"class":106},[96,96034,400],{"class":155},[96,96036,485],{"class":106},[96,96038,426],{"class":155},[96,96040,42235],{"class":106},[96,96042,93479],{"class":5200},[96,96044,152],{"class":102},[96,96046,110],{"class":155},[96,96048,113],{"class":106},[14,96050,96051],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[87,96053,96055],{"className":30357,"code":96054,"language":30359,"meta":18,"style":18},"#使用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",[93,96056,96057,96062,96077,96082,96087,96109],{"__ignoreMap":18},[96,96058,96059],{"class":98,"line":99},[96,96060,96061],{"class":165},"#使用zeros_like将创建的一维数组变成全0的数组\n",[96,96063,96064,96066,96068,96070,96072,96074],{"class":98,"line":19},[96,96065,345],{"class":106},[96,96067,152],{"class":102},[96,96069,92981],{"class":106},[96,96071,400],{"class":155},[96,96073,536],{"class":106},[96,96075,96076],{"class":165},"#这个得到的结果：一维数组0，1，2，3\n",[96,96078,96079],{"class":98,"line":1162},[96,96080,96081],{"class":106},"np.zeros_like(a)\n",[96,96083,96084],{"class":98,"line":1177},[96,96085,96086],{"class":165},"#使用zeros_like将创建的二维数组变成全0的数组\n",[96,96088,96089,96091,96093,96095,96097,96099,96101,96103,96105,96107],{"class":98,"line":1183},[96,96090,93285],{"class":106},[96,96092,152],{"class":102},[96,96094,95406],{"class":106},[96,96096,31475],{"class":5200},[96,96098,152],{"class":102},[96,96100,107],{"class":106},[96,96102,400],{"class":155},[96,96104,485],{"class":106},[96,96106,426],{"class":155},[96,96108,30476],{"class":106},[96,96110,96111],{"class":98,"line":1197},[96,96112,96113],{"class":106},"np.zeros_like(aa)\n",[67,96115,96117],{"id":96116},"_262-ones创建数组","2.6.2 ones()创建数组",[14,96119,96120],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[67,96122,96124],{"id":96123},"_263-empty创建数组","2.6.3 empty()创建数组",[14,96126,96127],{},"①empty()用法",[87,96129,96131],{"className":30357,"code":96130,"language":30359,"meta":18,"style":18},"numpy.empty(shape,dtype=float,order='c')\n",[93,96132,96133],{"__ignoreMap":18},[96,96134,96135,96138,96140,96142,96144,96146,96148,96150,96152],{"class":98,"line":99},[96,96136,96137],{"class":106},"numpy.empty(shape,",[96,96139,93479],{"class":5200},[96,96141,152],{"class":102},[96,96143,146],{"class":155},[96,96145,485],{"class":106},[96,96147,95276],{"class":5200},[96,96149,152],{"class":102},[96,96151,76007],{"class":211},[96,96153,113],{"class":106},[14,96155,96156],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[14,96158,96159],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[14,96161,96162],{},[1445,96163],{"alt":18,"src":96164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[14,96166,96167],{},"②empty()用法",[87,96169,96171],{"className":30357,"code":96170,"language":30359,"meta":18,"style":18},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[93,96172,96173,96194,96206,96227,96232],{"__ignoreMap":18},[96,96174,96175,96177,96179,96182,96184,96186,96188,96190,96192],{"class":98,"line":99},[96,96176,952],{"class":106},[96,96178,152],{"class":102},[96,96180,96181],{"class":106},"np.empty(",[96,96183,553],{"class":155},[96,96185,485],{"class":106},[96,96187,93479],{"class":5200},[96,96189,152],{"class":102},[96,96191,110],{"class":155},[96,96193,113],{"class":106},[96,96195,96196,96198,96200,96202,96204],{"class":98,"line":19},[96,96197,927],{"class":106},[96,96199,152],{"class":102},[96,96201,92981],{"class":106},[96,96203,426],{"class":155},[96,96205,113],{"class":106},[96,96207,96208,96211,96213,96216,96218,96220,96223,96225],{"class":98,"line":1162},[96,96209,96210],{"class":106},"np.add(",[96,96212,184],{"class":155},[96,96214,96215],{"class":106},",x,",[96,96217,93033],{"class":5200},[96,96219,152],{"class":102},[96,96221,96222],{"class":106},"y[:",[96,96224,426],{"class":155},[96,96226,4640],{"class":106},[96,96228,96229],{"class":98,"line":1177},[96,96230,96231],{"class":165},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[96,96233,96234],{"class":98,"line":1183},[96,96235,96236],{"class":106},"y\n",[14,96238,11498],{},[14,96240,96241],{},[1445,96242],{"alt":18,"src":96243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[87,96245,96247],{"className":30357,"code":96246,"language":30359,"meta":18,"style":18},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[93,96248,96249,96265,96285,96300],{"__ignoreMap":18},[96,96250,96251,96253,96255,96257,96259,96261,96263],{"class":98,"line":99},[96,96252,927],{"class":106},[96,96254,152],{"class":102},[96,96256,92981],{"class":106},[96,96258,324],{"class":155},[96,96260,485],{"class":106},[96,96262,451],{"class":155},[96,96264,113],{"class":106},[96,96266,96267,96269,96271,96273,96275,96277,96279,96281,96283],{"class":98,"line":19},[96,96268,952],{"class":106},[96,96270,152],{"class":102},[96,96272,96181],{"class":106},[96,96274,426],{"class":155},[96,96276,485],{"class":106},[96,96278,93479],{"class":5200},[96,96280,152],{"class":102},[96,96282,110],{"class":155},[96,96284,113],{"class":106},[96,96286,96287,96290,96292,96294,96296,96298],{"class":98,"line":1162},[96,96288,96289],{"class":106},"np.add(x,",[96,96291,184],{"class":155},[96,96293,485],{"class":106},[96,96295,93033],{"class":5200},[96,96297,152],{"class":102},[96,96299,93428],{"class":106},[96,96301,96302],{"class":98,"line":1177},[96,96303,96304],{"class":165},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[14,96306,96307],{},"③empty_like()",[14,96309,96310],{},[256,96311,96312,96313,96318],{},"创建一个",[256,96314,96315],{},[256,96316,96317],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[14,96320,96321,96324],{},[93,96322,96323],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[14,96326,96327],{},[1445,96328],{"alt":18,"src":96329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[67,96331,96333],{"id":96332},"_264-用法","2.6.4 ？？用法",[14,96335,96336],{},"当想查看一个函数的参数时，可以通过？？来实现",[87,96338,96340],{"className":30357,"code":96339,"language":30359,"meta":18,"style":18},"np.full??\n",[93,96341,96342],{"__ignoreMap":18},[96,96343,96344,96347],{"class":98,"line":99},[96,96345,96346],{"class":106},"np.full",[96,96348,96349],{"class":77382},"??\n",[67,96351,96353],{"id":96352},"_265-full创建数组","2.6.5 full()创建数组",[87,96355,96357],{"className":30357,"code":96356,"language":30359,"meta":18,"style":18},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[93,96358,96359,96364],{"__ignoreMap":18},[96,96360,96361],{"class":98,"line":99},[96,96362,96363],{"class":106},"full(shape,fill_value)\n",[96,96365,96366],{"class":98,"line":19},[96,96367,96368],{"class":106},"创建全为某个指定值的数组\n",[14,96370,94509],{},[87,96372,96374],{"className":30357,"code":96373,"language":30359,"meta":18,"style":18},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[93,96375,96376,96381],{"__ignoreMap":18},[96,96377,96378],{"class":98,"line":99},[96,96379,96380],{"class":165},"#创建一个一维数组,以20进行填充\n",[96,96382,96383,96386,96388,96390,96392],{"class":98,"line":19},[96,96384,96385],{"class":106},"np.full(",[96,96387,553],{"class":155},[96,96389,485],{"class":106},[96,96391,807],{"class":155},[96,96393,113],{"class":106},[14,96395,93270],{},[87,96397,96399],{"className":30357,"code":96398,"language":30359,"meta":18,"style":18},"#创建二维数组\nnp.full((3,5),11)\n",[93,96400,96401,96405],{"__ignoreMap":18},[96,96402,96403],{"class":98,"line":99},[96,96404,93926],{"class":165},[96,96406,96407,96410,96412,96414,96416,96418,96420],{"class":98,"line":19},[96,96408,96409],{"class":106},"np.full((",[96,96411,178],{"class":155},[96,96413,485],{"class":106},[96,96415,426],{"class":155},[96,96417,42235],{"class":106},[96,96419,579],{"class":155},[96,96421,113],{"class":106},[14,96423,96424],{},"③full_like用法",[14,96426,96427],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[14,96429,96430],{},"这里是指定填充而已",[87,96432,96434],{"className":30357,"code":96433,"language":30359,"meta":18,"style":18},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[93,96435,96436,96441,96465,96470],{"__ignoreMap":18},[96,96437,96438],{"class":98,"line":99},[96,96439,96440],{"class":165},"#创建一个指定形状数组\n",[96,96442,96443,96445,96447,96449,96451,96453,96455,96457,96459,96461,96463],{"class":98,"line":19},[96,96444,345],{"class":106},[96,96446,152],{"class":102},[96,96448,92981],{"class":106},[96,96450,324],{"class":155},[96,96452,485],{"class":106},[96,96454,432],{"class":155},[96,96456,92986],{"class":106},[96,96458,400],{"class":155},[96,96460,485],{"class":106},[96,96462,527],{"class":155},[96,96464,113],{"class":106},[96,96466,96467],{"class":98,"line":1162},[96,96468,96469],{"class":165},"#进行指定填充\n",[96,96471,96472,96475,96477],{"class":98,"line":1177},[96,96473,96474],{"class":106},"np.full_like(a,",[96,96476,553],{"class":155},[96,96478,113],{"class":106},[14,96480,11498],{},[14,96482,96483],{},[1445,96484],{"alt":18,"src":96485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[67,96487,96489],{"id":96488},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[21982,96491,96493],{"id":96492},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[87,96495,96497],{"className":30357,"code":96496,"language":30359,"meta":18,"style":18},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[93,96498,96499,96516],{"__ignoreMap":18},[96,96500,96501,96504,96506,96508,96510,96512,96514],{"class":98,"line":99},[96,96502,96503],{"class":106},"np.eye(",[96,96505,400],{"class":155},[96,96507,485],{"class":106},[96,96509,93479],{"class":5200},[96,96511,152],{"class":102},[96,96513,110],{"class":155},[96,96515,113],{"class":106},[96,96517,96518],{"class":98,"line":19},[96,96519,96520],{"class":165},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[21982,96522,96524],{"id":96523},"_2662-法2identity","2.6.6.2 法2：identity()",[87,96526,96528],{"className":30357,"code":96527,"language":30359,"meta":18,"style":18},"#identity()\nnp.identity(5,dtype=int)\n",[93,96529,96530,96535],{"__ignoreMap":18},[96,96531,96532],{"class":98,"line":99},[96,96533,96534],{"class":165},"#identity()\n",[96,96536,96537,96540,96542,96544,96546,96548,96550],{"class":98,"line":19},[96,96538,96539],{"class":106},"np.identity(",[96,96541,426],{"class":155},[96,96543,485],{"class":106},[96,96545,93479],{"class":5200},[96,96547,152],{"class":102},[96,96549,110],{"class":155},[96,96551,113],{"class":106},[14,96553,96554],{},"两个函数是有区别的",[14,96556,96557],{},[1445,96558],{"alt":18,"src":96559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[14,96561,96562],{},[1445,96563],{"alt":18,"src":96564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[87,96566,96568],{"className":30357,"code":96567,"language":30359,"meta":18,"style":18},"# 创建一个 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",[93,96569,96570,96575,96587,96592,96597,96602,96607,96611,96616,96636,96640,96645,96650],{"__ignoreMap":18},[96,96571,96572],{"class":98,"line":99},[96,96573,96574],{"class":165},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[96,96576,96577,96579,96581,96583,96585],{"class":98,"line":19},[96,96578,96503],{"class":106},[96,96580,178],{"class":155},[96,96582,12419],{"class":106},[96,96584,400],{"class":155},[96,96586,113],{"class":106},[96,96588,96589],{"class":98,"line":1162},[96,96590,96591],{"class":165},"# 输出:\n",[96,96593,96594],{"class":98,"line":1177},[96,96595,96596],{"class":165},"# [[1. 0. 0. 0.]\n",[96,96598,96599],{"class":98,"line":1183},[96,96600,96601],{"class":165},"#  [0. 1. 0. 0.]\n",[96,96603,96604],{"class":98,"line":1197},[96,96605,96606],{"class":165},"#  [0. 0. 1. 0.]]\n",[96,96608,96609],{"class":98,"line":1203},[96,96610,2383],{"emptyLinePlaceholder":23},[96,96612,96613],{"class":98,"line":1294},[96,96614,96615],{"class":165},"# 对角线向上偏移1\n",[96,96617,96618,96620,96622,96624,96626,96628,96630,96632,96634],{"class":98,"line":1300},[96,96619,96503],{"class":106},[96,96621,178],{"class":155},[96,96623,12419],{"class":106},[96,96625,400],{"class":155},[96,96627,12419],{"class":106},[96,96629,600],{"class":5200},[96,96631,152],{"class":102},[96,96633,324],{"class":155},[96,96635,113],{"class":106},[96,96637,96638],{"class":98,"line":1312},[96,96639,96591],{"class":165},[96,96641,96642],{"class":98,"line":1595},[96,96643,96644],{"class":165},"# [[0. 1. 0. 0.]\n",[96,96646,96647],{"class":98,"line":1600},[96,96648,96649],{"class":165},"#  [0. 0. 1. 0.]\n",[96,96651,96652],{"class":98,"line":1606},[96,96653,96654],{"class":165},"#  [0. 0. 0. 1.]]\n",[67,96656,96658],{"id":96657},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[87,96660,96662],{"className":30357,"code":96661,"language":30359,"meta":18,"style":18},"#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",[93,96663,96664,96669,96673,96678,96683,96688,96693,96698,96703,96708,96713],{"__ignoreMap":18},[96,96665,96666],{"class":98,"line":99},[96,96667,96668],{"class":165},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[96,96670,96671],{"class":98,"line":19},[96,96672,95677],{"class":211},[96,96674,96675],{"class":98,"line":1162},[96,96676,96677],{"class":211},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[96,96679,96680],{"class":98,"line":1177},[96,96681,96682],{"class":211},"参数介绍：\n",[96,96684,96685],{"class":98,"line":1183},[96,96686,96687],{"class":211},"start：序列的起始值\n",[96,96689,96690],{"class":98,"line":1197},[96,96691,96692],{"class":211},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[96,96694,96695],{"class":98,"line":1203},[96,96696,96697],{"class":211},"num：要生长的等步长的样本数量，默认为50\n",[96,96699,96700],{"class":98,"line":1294},[96,96701,96702],{"class":211},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[96,96704,96705],{"class":98,"line":1300},[96,96706,96707],{"class":211},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[96,96709,96710],{"class":98,"line":1312},[96,96711,96712],{"class":211},"dtype：ndarry的数据类型\n",[96,96714,96715],{"class":98,"line":1595},[96,96716,95677],{"class":211},[14,96718,96719],{},[1445,96720],{"alt":18,"src":96721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[14,96723,96724],{},"这里num=是可以省略的",[14,96726,96727],{},"也就是下方两行代码结果是一模一样的",[87,96729,96731],{"className":30357,"code":96730,"language":30359,"meta":18,"style":18},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[93,96732,96733,96750],{"__ignoreMap":18},[96,96734,96735,96738,96740,96742,96744,96746,96748],{"class":98,"line":99},[96,96736,96737],{"class":106},"np.linspace(",[96,96739,324],{"class":155},[96,96741,485],{"class":106},[96,96743,426],{"class":155},[96,96745,485],{"class":106},[96,96747,426],{"class":155},[96,96749,113],{"class":106},[96,96751,96752,96754,96756,96758,96760,96762,96764,96766,96768],{"class":98,"line":19},[96,96753,96737],{"class":106},[96,96755,324],{"class":155},[96,96757,485],{"class":106},[96,96759,426],{"class":155},[96,96761,485],{"class":106},[96,96763,1648],{"class":5200},[96,96765,152],{"class":102},[96,96767,426],{"class":155},[96,96769,113],{"class":106},[67,96771,96773],{"id":96772},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[87,96775,96777],{"className":30357,"code":96776,"language":30359,"meta":18,"style":18},"#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",[93,96778,96779,96784,96788,96793,96798,96803,96808,96812,96817,96822,96826],{"__ignoreMap":18},[96,96780,96781],{"class":98,"line":99},[96,96782,96783],{"class":165},"#logspace函数用于创建一个等比数列，格式如下：\n",[96,96785,96786],{"class":98,"line":19},[96,96787,95677],{"class":211},[96,96789,96790],{"class":98,"line":1162},[96,96791,96792],{"class":211},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[96,96794,96795],{"class":98,"line":1177},[96,96796,96797],{"class":211},"参数为：\n",[96,96799,96800],{"class":98,"line":1183},[96,96801,96802],{"class":211},"start:序列的起始位置为：base**start\n",[96,96804,96805],{"class":98,"line":1197},[96,96806,96807],{"class":211},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[96,96809,96810],{"class":98,"line":1203},[96,96811,96697],{"class":211},[96,96813,96814],{"class":98,"line":1294},[96,96815,96816],{"class":211},"endpoint：是否包含 stop 这个值，默认是 True\n",[96,96818,96819],{"class":98,"line":1300},[96,96820,96821],{"class":211},"base：对数的底数，默认是 10（常见对数）\n",[96,96823,96824],{"class":98,"line":1312},[96,96825,96712],{"class":211},[96,96827,96828],{"class":98,"line":1595},[96,96829,95677],{"class":211},[14,96831,96832],{},[1445,96833],{"alt":18,"src":96834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[14,96836,96837],{},"logspace()函数中的num参数也是可以不写num=的",[14,96839,96840],{},"endpoint是不可以省略的",[5110,96842,96843],{},"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":18,"searchDepth":19,"depth":19,"links":96845},[96846,96850,96855,96859,96863,96864],{"id":95235,"depth":19,"text":95236,"children":96847},[96848,96849],{"id":95239,"depth":1162,"text":95240},{"id":95312,"depth":1162,"text":95313},{"id":95344,"depth":19,"text":95345,"children":96851},[96852,96853,96854],{"id":95348,"depth":1162,"text":95349},{"id":95530,"depth":1162,"text":95531},{"id":95608,"depth":1162,"text":95609},{"id":95643,"depth":19,"text":95644,"children":96856},[96857,96858],{"id":95647,"depth":1162,"text":95648},{"id":95704,"depth":1162,"text":95705},{"id":95800,"depth":19,"text":95801,"children":96860},[96861,96862],{"id":95804,"depth":1162,"text":95805},{"id":95816,"depth":1162,"text":95817},{"id":95850,"depth":19,"text":95851},{"id":95887,"depth":19,"text":95888,"children":96865},[96866,96867,96868,96869,96870,96871,96872,96873],{"id":95891,"depth":1162,"text":95892},{"id":96116,"depth":1162,"text":96117},{"id":96123,"depth":1162,"text":96124},{"id":96332,"depth":1162,"text":96333},{"id":96352,"depth":1162,"text":96353},{"id":96488,"depth":1162,"text":96489},{"id":96657,"depth":1162,"text":96658},{"id":96772,"depth":1162,"text":96773},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95227,"description":23361},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":96880,"title":96881,"body":96882,"description":23361,"extension":21,"meta":96975,"navigation":23,"path":96976,"seo":96977,"stem":96978,"__hash__":96979},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":96883,"toc":96973},[96884,96887,96890,96893,96896,96899,96902,96905,96908,96911,96914,96917,96919,96922,96925,96930,96933,96936,96970],[10,96885,96881],{"id":96886},"_20魔法命令mprun",[14,96888,96889],{},"逐行分析数据内存的使用情况",[14,96891,96892],{},"语法格式：",[14,96894,96895],{},"%mprun -f 模块名.函数名 模块名.函数名()",[14,96897,96898],{},"分析结果列如下：",[14,96900,96901],{},"Line行号",[14,96903,96904],{},"Mem usage内存使用大小",[14,96906,96907],{},"increment内存增量",[14,96909,96910],{},"Line content代码内容",[14,96912,96913],{},"补充说明：",[14,96915,96916],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[14,96918,95182],{},[14,96920,96921],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[14,96923,96924],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[14,96926,96927],{},[1445,96928],{"alt":18,"src":96929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[14,96931,96932],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[14,96934,96935],{},"这时候需要重新加载模块",[87,96937,96939],{"className":30357,"code":96938,"language":30359,"meta":18,"style":18},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[93,96940,96941,96946,96953,96958],{"__ignoreMap":18},[96,96942,96943],{"class":98,"line":99},[96,96944,96945],{"class":165},"#重新加载模块\n",[96,96947,96948,96950],{"class":98,"line":19},[96,96949,30371],{"class":102},[96,96951,96952],{"class":106}," importlib\n",[96,96954,96955],{"class":98,"line":1162},[96,96956,96957],{"class":106},"importlib.reload(mprun_test)\n",[96,96959,96960,96962,96965,96967],{"class":98,"line":1177},[96,96961,435],{"class":102},[96,96963,96964],{"class":106},"mprun ",[96,96966,639],{"class":102},[96,96968,96969],{"class":106},"f mprun_test.fun_test mprun_test.fun_test()\n",[5110,96971,96972],{},"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":18,"searchDepth":19,"depth":19,"links":96974},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":96881,"description":23361},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":96981,"title":96982,"body":96983,"description":23361,"extension":21,"meta":97000,"navigation":23,"path":97001,"seo":97002,"stem":97003,"__hash__":97004},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":96984,"toc":96998},[96985,96988,96993],[10,96986,96982],{"id":96987},"_3一维数组的索引和切片",[14,96989,96990],{},[1445,96991],{"alt":18,"src":96992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[14,96994,96995],{},[1445,96996],{"alt":18,"src":96997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":18,"searchDepth":19,"depth":19,"links":96999},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":96982,"description":23361},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97006,"title":97007,"body":97008,"description":23361,"extension":21,"meta":97491,"navigation":23,"path":97492,"seo":97493,"stem":97494,"__hash__":97495},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97009,"toc":97489},[97010,97013,97016,97021,97054,97057,97095,97098,97132,97135,97240,97243,97280,97283,97384,97387,97438,97441,97483,97486],[10,97011,97007],{"id":97012},"_4二维数组的索引与切片",[14,97014,97015],{},"①获取指定单个元素",[14,97017,97018],{},[1445,97019],{"alt":18,"src":97020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[87,97022,97024],{"className":30357,"code":97023,"language":30359,"meta":18,"style":18},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[93,97025,97026,97031,97036,97041],{"__ignoreMap":18},[96,97027,97028],{"class":98,"line":99},[96,97029,97030],{"class":165},"#获取元素9\n",[96,97032,97033],{"class":98,"line":19},[96,97034,97035],{"class":165},"#先获取所在行，再获取所在列\n",[96,97037,97038],{"class":98,"line":1162},[96,97039,97040],{"class":165},"#数组[行索引号，列索引号]\n",[96,97042,97043,97046,97048,97050,97052],{"class":98,"line":1177},[96,97044,97045],{"class":106},"a[",[96,97047,324],{"class":155},[96,97049,485],{"class":106},[96,97051,184],{"class":155},[96,97053,33225],{"class":106},[14,97055,97056],{},"②获取整行元素",[87,97058,97060],{"className":30357,"code":97059,"language":30359,"meta":18,"style":18},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[93,97061,97062,97067,97072,97080,97085],{"__ignoreMap":18},[96,97063,97064],{"class":98,"line":99},[96,97065,97066],{"class":165},"#获取整行 数组[行索引号]\n",[96,97068,97069],{"class":98,"line":19},[96,97070,97071],{"class":165},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[96,97073,97074,97076,97078],{"class":98,"line":1162},[96,97075,97045],{"class":106},[96,97077,184],{"class":155},[96,97079,33225],{"class":106},[96,97081,97082],{"class":98,"line":1177},[96,97083,97084],{"class":165},"#也可以负索引获取一行\n",[96,97086,97087,97089,97091,97093],{"class":98,"line":1183},[96,97088,97045],{"class":106},[96,97090,639],{"class":102},[96,97092,324],{"class":155},[96,97094,33225],{"class":106},[14,97096,97097],{},"③获取整列元素",[87,97099,97101],{"className":30357,"code":97100,"language":30359,"meta":18,"style":18},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[93,97102,97103,97108,97117,97122],{"__ignoreMap":18},[96,97104,97105],{"class":98,"line":99},[96,97106,97107],{"class":165},"#获取整列 数组名[:,列索引]\n",[96,97109,97110,97113,97115],{"class":98,"line":19},[96,97111,97112],{"class":106},"a[:,",[96,97114,184],{"class":155},[96,97116,33225],{"class":106},[96,97118,97119],{"class":98,"line":1162},[96,97120,97121],{"class":165},"#也可以负索引获取一列\n",[96,97123,97124,97126,97128,97130],{"class":98,"line":1177},[96,97125,97112],{"class":106},[96,97127,639],{"class":102},[96,97129,324],{"class":155},[96,97131,33225],{"class":106},[14,97133,97134],{},"④部分行部分列的元素",[87,97136,97138],{"className":30357,"code":97137,"language":30359,"meta":18,"style":18},"#部分行部分列 数组名[行切片，列切片]\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",[93,97139,97140,97145,97155,97159,97163,97168,97173,97177,97189,97193,97197,97202,97207,97212,97217,97221,97226],{"__ignoreMap":18},[96,97141,97142],{"class":98,"line":99},[96,97143,97144],{"class":165},"#部分行部分列 数组名[行切片，列切片]\n",[96,97146,97147,97150,97152],{"class":98,"line":19},[96,97148,97149],{"class":106},"a[:",[96,97151,184],{"class":155},[96,97153,97154],{"class":106},",:]\n",[96,97156,97157],{"class":98,"line":1162},[96,97158,93543],{"class":165},[96,97160,97161],{"class":98,"line":1177},[96,97162,93907],{"class":211},[96,97164,97165],{"class":98,"line":1183},[96,97166,97167],{"class":211},"array([[ 1,  2,  3,  4,  5,  6],\n",[96,97169,97170],{"class":98,"line":1197},[96,97171,97172],{"class":211},"       [ 7,  8,  9, 10, 11, 12]])\n",[96,97174,97175],{"class":98,"line":1203},[96,97176,93907],{"class":211},[96,97178,97179,97181,97183,97185,97187],{"class":98,"line":1294},[96,97180,97112],{"class":106},[96,97182,324],{"class":155},[96,97184,966],{"class":106},[96,97186,400],{"class":155},[96,97188,33225],{"class":106},[96,97190,97191],{"class":98,"line":1300},[96,97192,93543],{"class":165},[96,97194,97195],{"class":98,"line":1312},[96,97196,93907],{"class":211},[96,97198,97199],{"class":98,"line":1595},[96,97200,97201],{"class":211},"array([[ 2,  3,  4],\n",[96,97203,97204],{"class":98,"line":1600},[96,97205,97206],{"class":211},"       [ 8,  9, 10],\n",[96,97208,97209],{"class":98,"line":1606},[96,97210,97211],{"class":211},"       [14, 15, 16],\n",[96,97213,97214],{"class":98,"line":1611},[96,97215,97216],{"class":211},"       [20, 21, 22]])\n",[96,97218,97219],{"class":98,"line":1625},[96,97220,93907],{"class":211},[96,97222,97223],{"class":98,"line":1630},[96,97224,97225],{"class":165},"#对列行同时进行切片，使用了step参数\n",[96,97227,97228,97231,97233,97236,97238],{"class":98,"line":1636},[96,97229,97230],{"class":106},"a[::",[96,97232,184],{"class":155},[96,97234,97235],{"class":106},",::",[96,97237,184],{"class":155},[96,97239,33225],{"class":106},[14,97241,97242],{},"⑤同时获取两个元素",[87,97244,97246],{"className":30357,"code":97245,"language":30359,"meta":18,"style":18},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[93,97247,97248,97253,97258],{"__ignoreMap":18},[96,97249,97250],{"class":98,"line":99},[96,97251,97252],{"class":165},"#同时获取第三行第二列，第四行第一列\n",[96,97254,97255],{"class":98,"line":19},[96,97256,97257],{"class":165},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[96,97259,97260,97263,97265,97267,97269,97271,97273,97275,97277],{"class":98,"line":1162},[96,97261,97262],{"class":106},"a[(",[96,97264,184],{"class":155},[96,97266,485],{"class":106},[96,97268,178],{"class":155},[96,97270,42226],{"class":106},[96,97272,324],{"class":155},[96,97274,485],{"class":106},[96,97276,298],{"class":155},[96,97278,97279],{"class":106},")]\n",[14,97281,97282],{},"⑥切片，对行进行反向获取",[87,97284,97286],{"className":30357,"code":97285,"language":30359,"meta":18,"style":18},"#切片 对所有行进行反向获取\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",[93,97287,97288,97293,97303,97307,97311,97316,97321,97326,97331,97335,97340,97356,97360,97365,97370,97375,97380],{"__ignoreMap":18},[96,97289,97290],{"class":98,"line":99},[96,97291,97292],{"class":165},"#切片 对所有行进行反向获取\n",[96,97294,97295,97297,97299,97301],{"class":98,"line":19},[96,97296,97230],{"class":106},[96,97298,639],{"class":102},[96,97300,324],{"class":155},[96,97302,33225],{"class":106},[96,97304,97305],{"class":98,"line":1162},[96,97306,93543],{"class":165},[96,97308,97309],{"class":98,"line":1177},[96,97310,93907],{"class":211},[96,97312,97313],{"class":98,"line":1183},[96,97314,97315],{"class":211},"array([[19, 20, 21, 22, 23, 24],\n",[96,97317,97318],{"class":98,"line":1197},[96,97319,97320],{"class":211},"       [13, 14, 15, 16, 17, 18],\n",[96,97322,97323],{"class":98,"line":1203},[96,97324,97325],{"class":211},"       [ 7,  8,  9, 10, 11, 12],\n",[96,97327,97328],{"class":98,"line":1294},[96,97329,97330],{"class":211},"       [ 1,  2,  3,  4,  5,  6]])\n",[96,97332,97333],{"class":98,"line":1300},[96,97334,93907],{"class":211},[96,97336,97337],{"class":98,"line":1312},[96,97338,97339],{"class":165},"#对行列都进行反向切片获取\n",[96,97341,97342,97344,97346,97348,97350,97352,97354],{"class":98,"line":1595},[96,97343,97230],{"class":106},[96,97345,639],{"class":102},[96,97347,324],{"class":155},[96,97349,97235],{"class":106},[96,97351,639],{"class":102},[96,97353,324],{"class":155},[96,97355,33225],{"class":106},[96,97357,97358],{"class":98,"line":1600},[96,97359,93907],{"class":211},[96,97361,97362],{"class":98,"line":1606},[96,97363,97364],{"class":211},"array([[24, 23, 22, 21, 20, 19],\n",[96,97366,97367],{"class":98,"line":1611},[96,97368,97369],{"class":211},"       [18, 17, 16, 15, 14, 13],\n",[96,97371,97372],{"class":98,"line":1625},[96,97373,97374],{"class":211},"       [12, 11, 10,  9,  8,  7],\n",[96,97376,97377],{"class":98,"line":1630},[96,97378,97379],{"class":211},"       [ 6,  5,  4,  3,  2,  1]])\n",[96,97381,97382],{"class":98,"line":1636},[96,97383,93907],{"class":211},[14,97385,97386],{},"⑦修改元素",[87,97388,97390],{"className":30357,"code":97389,"language":30359,"meta":18,"style":18},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[93,97391,97392,97397,97415,97420],{"__ignoreMap":18},[96,97393,97394],{"class":98,"line":99},[96,97395,97396],{"class":165},"#获取前两行和前两列\n",[96,97398,97399,97402,97404,97406,97408,97411,97413],{"class":98,"line":19},[96,97400,97401],{"class":106},"sub_a",[96,97403,152],{"class":102},[96,97405,97149],{"class":106},[96,97407,184],{"class":155},[96,97409,97410],{"class":106},",:",[96,97412,184],{"class":155},[96,97414,33225],{"class":106},[96,97416,97417],{"class":98,"line":1162},[96,97418,97419],{"class":165},"#修改sub_a第一个元素的值\n",[96,97421,97422,97425,97427,97429,97431,97433,97435],{"class":98,"line":1177},[96,97423,97424],{"class":106},"sub_a[",[96,97426,298],{"class":155},[96,97428,485],{"class":106},[96,97430,298],{"class":155},[96,97432,1047],{"class":106},[96,97434,152],{"class":102},[96,97436,97437],{"class":155},"100\n",[14,97439,97440],{},"⑧数组复制copy()",[87,97442,97444],{"className":30357,"code":97443,"language":30359,"meta":18,"style":18},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[93,97445,97446,97451,97461,97466],{"__ignoreMap":18},[96,97447,97448],{"class":98,"line":99},[96,97449,97450],{"class":165},"#数组复制\n",[96,97452,97453,97456,97458],{"class":98,"line":19},[96,97454,97455],{"class":106},"copy_a",[96,97457,152],{"class":102},[96,97459,97460],{"class":106},"np.copy(sub_a)\n",[96,97462,97463],{"class":98,"line":1162},[96,97464,97465],{"class":165},"#修改copy_a后不影响原数组\n",[96,97467,97468,97471,97473,97475,97477,97479,97481],{"class":98,"line":1177},[96,97469,97470],{"class":106},"copy_a[",[96,97472,298],{"class":155},[96,97474,485],{"class":106},[96,97476,298],{"class":155},[96,97478,1047],{"class":106},[96,97480,152],{"class":102},[96,97482,97437],{"class":155},[14,97484,97485],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[5110,97487,97488],{},"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":18,"searchDepth":19,"depth":19,"links":97490},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97007,"description":23361},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97497,"title":97498,"body":97499,"description":23361,"extension":21,"meta":97991,"navigation":23,"path":97992,"seo":97993,"stem":97994,"__hash__":97995},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97500,"toc":97983},[97501,97504,97508,97511,97514,97567,97570,97595,97598,97617,97637,97640,97656,97660,97706,97710,97752,97756,97759,97762,97765,97768,97771,97833,97893,97897,97900,97957,97961,97966,97975,97980],[10,97502,97498],{"id":97503},"_5改变数组的维度",[38,97505,97507],{"id":97506},"_51-使用reshape","5.1 使用reshape()",[14,97509,97510],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[14,97512,97513],{},"①一维数组转换为二维数组",[87,97515,97517],{"className":30357,"code":97516,"language":30359,"meta":18,"style":18},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[93,97518,97519,97535,97540,97545,97550],{"__ignoreMap":18},[96,97520,97521,97523,97525,97527,97529,97531,97533],{"class":98,"line":99},[96,97522,345],{"class":106},[96,97524,152],{"class":102},[96,97526,92981],{"class":106},[96,97528,324],{"class":155},[96,97530,485],{"class":106},[96,97532,630],{"class":155},[96,97534,113],{"class":106},[96,97536,97537],{"class":98,"line":19},[96,97538,97539],{"class":165},"#将一维数组进行转换\n",[96,97541,97542],{"class":98,"line":1162},[96,97543,97544],{"class":165},"#注意点：元素个数不可以变\n",[96,97546,97547],{"class":98,"line":1177},[96,97548,97549],{"class":165},"#转换维度要保持一致，不一致就异常！！！\n",[96,97551,97552,97554,97556,97559,97561,97563,97565],{"class":98,"line":1183},[96,97553,93285],{"class":106},[96,97555,152],{"class":102},[96,97557,97558],{"class":106},"a.reshape(",[96,97560,184],{"class":155},[96,97562,485],{"class":106},[96,97564,451],{"class":155},[96,97566,113],{"class":106},[14,97568,97569],{},"②一维数组转换为三维数组",[87,97571,97573],{"className":30357,"code":97572,"language":30359,"meta":18,"style":18},"aaa=a.reshape(2,3,2)\n",[93,97574,97575],{"__ignoreMap":18},[96,97576,97577,97579,97581,97583,97585,97587,97589,97591,97593],{"class":98,"line":99},[96,97578,95500],{"class":106},[96,97580,152],{"class":102},[96,97582,97558],{"class":106},[96,97584,184],{"class":155},[96,97586,485],{"class":106},[96,97588,178],{"class":155},[96,97590,485],{"class":106},[96,97592,184],{"class":155},[96,97594,113],{"class":106},[14,97596,97597],{},"③二维数组转化为一维数组",[87,97599,97601],{"className":30357,"code":97600,"language":30359,"meta":18,"style":18},"#知道元素个数：\naa.reshape(12)\n",[93,97602,97603,97608],{"__ignoreMap":18},[96,97604,97605],{"class":98,"line":99},[96,97606,97607],{"class":165},"#知道元素个数：\n",[96,97609,97610,97613,97615],{"class":98,"line":19},[96,97611,97612],{"class":106},"aa.reshape(",[96,97614,605],{"class":155},[96,97616,113],{"class":106},[87,97618,97620],{"className":30357,"code":97619,"language":30359,"meta":18,"style":18},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[93,97621,97622,97627],{"__ignoreMap":18},[96,97623,97624],{"class":98,"line":99},[96,97625,97626],{"class":165},"#不知道元素个数，参数传递-1\n",[96,97628,97629,97631,97633,97635],{"class":98,"line":19},[96,97630,97612],{"class":106},[96,97632,639],{"class":102},[96,97634,324],{"class":155},[96,97636,113],{"class":106},[14,97638,97639],{},"④三维数组转换为一维数组",[87,97641,97643],{"className":30357,"code":97642,"language":30359,"meta":18,"style":18},"aaa.reshape(-1)\n",[93,97644,97645],{"__ignoreMap":18},[96,97646,97647,97650,97652,97654],{"class":98,"line":99},[96,97648,97649],{"class":106},"aaa.reshape(",[96,97651,639],{"class":102},[96,97653,324],{"class":155},[96,97655,113],{"class":106},[38,97657,97659],{"id":97658},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[87,97661,97663],{"className":30357,"code":97662,"language":30359,"meta":18,"style":18},"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",[93,97664,97665,97692,97697,97701],{"__ignoreMap":18},[96,97666,97667,97669,97671,97673,97675,97677,97679,97681,97683,97685,97687,97689],{"class":98,"line":99},[96,97668,93285],{"class":106},[96,97670,152],{"class":102},[96,97672,92981],{"class":106},[96,97674,324],{"class":155},[96,97676,485],{"class":106},[96,97678,630],{"class":155},[96,97680,92986],{"class":106},[96,97682,184],{"class":155},[96,97684,485],{"class":106},[96,97686,451],{"class":155},[96,97688,536],{"class":106},[96,97690,97691],{"class":165},"#转换为2行6列的数组\n",[96,97693,97694],{"class":98,"line":19},[96,97695,97696],{"class":106},"aa.revel()\n",[96,97698,97699],{"class":98,"line":1162},[96,97700,93543],{"class":165},[96,97702,97703],{"class":98,"line":1177},[96,97704,97705],{"class":165},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[38,97707,97709],{"id":97708},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[87,97711,97713],{"className":30357,"code":97712,"language":30359,"meta":18,"style":18},"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",[93,97714,97715,97739,97744,97748],{"__ignoreMap":18},[96,97716,97717,97719,97721,97723,97725,97727,97729,97731,97733,97735,97737],{"class":98,"line":99},[96,97718,93285],{"class":106},[96,97720,152],{"class":102},[96,97722,92981],{"class":106},[96,97724,324],{"class":155},[96,97726,485],{"class":106},[96,97728,630],{"class":155},[96,97730,92986],{"class":106},[96,97732,184],{"class":155},[96,97734,485],{"class":106},[96,97736,451],{"class":155},[96,97738,113],{"class":106},[96,97740,97741],{"class":98,"line":19},[96,97742,97743],{"class":106},"aa.flatten()\n",[96,97745,97746],{"class":98,"line":1162},[96,97747,93543],{"class":165},[96,97749,97750],{"class":98,"line":1177},[96,97751,97705],{"class":165},[38,97753,97755],{"id":97754},"_54-使用resize","5.4 使用resize()",[14,97757,97758],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[14,97760,97761],{},"通过resize方法可以改变数组的维度",[14,97763,97764],{},"#resize修改数组维度",[14,97766,97767],{},"#以元组的形式指定形状",[14,97769,97770],{},"#改变的是原数组",[87,97772,97774],{"className":30357,"code":97773,"language":30359,"meta":18,"style":18},"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",[93,97775,97776,97792,97812,97825,97829],{"__ignoreMap":18},[96,97777,97778,97780,97782,97784,97786,97788,97790],{"class":98,"line":99},[96,97779,345],{"class":106},[96,97781,152],{"class":102},[96,97783,92981],{"class":106},[96,97785,324],{"class":155},[96,97787,485],{"class":106},[96,97789,630],{"class":155},[96,97791,113],{"class":106},[96,97793,97794,97797,97799,97801,97803,97805,97807,97809],{"class":98,"line":19},[96,97795,97796],{"class":106},"a.shape",[96,97798,152],{"class":102},[96,97800,107],{"class":106},[96,97802,184],{"class":155},[96,97804,485],{"class":106},[96,97806,451],{"class":155},[96,97808,536],{"class":106},[96,97810,97811],{"class":165},"#改变了原数组\n",[96,97813,97814,97816,97818,97821,97823],{"class":98,"line":1162},[96,97815,345],{"class":106},[96,97817,152],{"class":102},[96,97819,97820],{"class":106},"resize((",[96,97822,605],{"class":155},[96,97824,30476],{"class":106},[96,97826,97827],{"class":98,"line":1177},[96,97828,93543],{"class":165},[96,97830,97831],{"class":98,"line":1183},[96,97832,97705],{"class":165},[87,97834,97836],{"className":30357,"code":97835,"language":30359,"meta":18,"style":18},"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",[93,97837,97838,97851,97855,97859,97864,97869,97874,97879,97884,97889],{"__ignoreMap":18},[96,97839,97840,97843,97845,97847,97849],{"class":98,"line":99},[96,97841,97842],{"class":106},"a.resize((",[96,97844,451],{"class":155},[96,97846,485],{"class":106},[96,97848,184],{"class":155},[96,97850,30476],{"class":106},[96,97852,97853],{"class":98,"line":19},[96,97854,93543],{"class":165},[96,97856,97857],{"class":98,"line":1162},[96,97858,93907],{"class":211},[96,97860,97861],{"class":98,"line":1177},[96,97862,97863],{"class":211},"array([[ 1,  2],\n",[96,97865,97866],{"class":98,"line":1183},[96,97867,97868],{"class":211},"       [ 3,  4],\n",[96,97870,97871],{"class":98,"line":1197},[96,97872,97873],{"class":211},"       [ 5,  6],\n",[96,97875,97876],{"class":98,"line":1203},[96,97877,97878],{"class":211},"       [ 7,  8],\n",[96,97880,97881],{"class":98,"line":1294},[96,97882,97883],{"class":211},"       [ 9, 10],\n",[96,97885,97886],{"class":98,"line":1300},[96,97887,97888],{"class":211},"       [11, 12]])\n",[96,97890,97891],{"class":98,"line":1312},[96,97892,93907],{"class":211},[38,97894,97896],{"id":97895},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[14,97898,97899],{},"改变了原数组",[87,97901,97903],{"className":30357,"code":97902,"language":30359,"meta":18,"style":18},"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",[93,97904,97905,97921,97937,97941,97945,97949,97953],{"__ignoreMap":18},[96,97906,97907,97909,97911,97913,97915,97917,97919],{"class":98,"line":99},[96,97908,345],{"class":106},[96,97910,152],{"class":102},[96,97912,92981],{"class":106},[96,97914,324],{"class":155},[96,97916,485],{"class":106},[96,97918,630],{"class":155},[96,97920,113],{"class":106},[96,97922,97923,97925,97927,97929,97931,97933,97935],{"class":98,"line":19},[96,97924,97796],{"class":106},[96,97926,152],{"class":102},[96,97928,107],{"class":106},[96,97930,184],{"class":155},[96,97932,485],{"class":106},[96,97934,451],{"class":155},[96,97936,113],{"class":106},[96,97938,97939],{"class":98,"line":1162},[96,97940,93543],{"class":165},[96,97942,97943],{"class":98,"line":1177},[96,97944,93907],{"class":211},[96,97946,97947],{"class":98,"line":1183},[96,97948,97167],{"class":211},[96,97950,97951],{"class":98,"line":1197},[96,97952,97172],{"class":211},[96,97954,97955],{"class":98,"line":1203},[96,97956,93907],{"class":211},[38,97958,97960],{"id":97959},"_56-重要比较","5.6 重要比较：",[14,97962,97963],{},[1445,97964],{"alt":18,"src":97965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[14,97967,97968,97969,97971,97972,97974],{},"口诀：NumPy 函数要么用 ",[93,97970,95942],{},"，要么用 ",[93,97973,31475],{},"，创建结构用 shape，造数据用 size",[14,97976,97977],{},[1445,97978],{"alt":18,"src":97979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[5110,97981,97982],{},"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":18,"searchDepth":19,"depth":19,"links":97984},[97985,97986,97987,97988,97989,97990],{"id":97506,"depth":19,"text":97507},{"id":97658,"depth":19,"text":97659},{"id":97708,"depth":19,"text":97709},{"id":97754,"depth":19,"text":97755},{"id":97895,"depth":19,"text":97896},{"id":97959,"depth":19,"text":97960},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97498,"description":23361},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":97997,"title":97998,"body":97999,"description":23361,"extension":21,"meta":99071,"navigation":23,"path":99072,"seo":99073,"stem":99074,"__hash__":99075},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98000,"toc":99065},[98001,98004,98008,98011,98014,98017,98082,98085,98125,98128,98210,98213,98218,98240,98242,98247,98252,98255,98258,98413,98416,98618,98622,98625,98628,98696,98698,98703,98706,98709,98789,98793,98796,98798,98871,98873,98878,98880,98960,98964,98967,98970,98973,98976,98979,98982,99062],[10,98002,97998],{"id":98003},"_6数组的拼接",[38,98005,98007],{"id":98006},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[14,98009,98010],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[14,98012,98013],{},"函数内部传两个数列构成的数列或者元组",[14,98015,98016],{},"①一维数组的拼接",[87,98018,98020],{"className":30357,"code":98019,"language":30359,"meta":18,"style":18},"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",[93,98021,98022,98042,98062,98067,98072,98077],{"__ignoreMap":18},[96,98023,98024,98026,98028,98030,98032,98034,98036,98038,98040],{"class":98,"line":99},[96,98025,345],{"class":106},[96,98027,152],{"class":102},[96,98029,93003],{"class":106},[96,98031,324],{"class":155},[96,98033,485],{"class":106},[96,98035,184],{"class":155},[96,98037,485],{"class":106},[96,98039,178],{"class":155},[96,98041,4640],{"class":106},[96,98043,98044,98046,98048,98050,98052,98054,98056,98058,98060],{"class":98,"line":19},[96,98045,370],{"class":106},[96,98047,152],{"class":102},[96,98049,93003],{"class":106},[96,98051,400],{"class":155},[96,98053,485],{"class":106},[96,98055,426],{"class":155},[96,98057,485],{"class":106},[96,98059,451],{"class":155},[96,98061,4640],{"class":106},[96,98063,98064],{"class":98,"line":1162},[96,98065,98066],{"class":165},"#调用concatenate进行数组拼接\n",[96,98068,98069],{"class":98,"line":1177},[96,98070,98071],{"class":106},"np.concatenate((a,b))\n",[96,98073,98074],{"class":98,"line":1183},[96,98075,98076],{"class":165},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[96,98078,98079],{"class":98,"line":1197},[96,98080,98081],{"class":165},"#np.concatenate([a,b])\n",[14,98083,98084],{},"②一维多个数组拼接",[87,98086,98088],{"className":30357,"code":98087,"language":30359,"meta":18,"style":18},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[93,98089,98090,98095,98115,98120],{"__ignoreMap":18},[96,98091,98092],{"class":98,"line":99},[96,98093,98094],{"class":165},"#也可以多个数组进行拼接\n",[96,98096,98097,98099,98101,98103,98105,98107,98109,98111,98113],{"class":98,"line":19},[96,98098,395],{"class":106},[96,98100,152],{"class":102},[96,98102,93003],{"class":106},[96,98104,553],{"class":155},[96,98106,485],{"class":106},[96,98108,579],{"class":155},[96,98110,485],{"class":106},[96,98112,630],{"class":155},[96,98114,4640],{"class":106},[96,98116,98117],{"class":98,"line":1162},[96,98118,98119],{"class":106},"c\n",[96,98121,98122],{"class":98,"line":1177},[96,98123,98124],{"class":106},"np.concatenate((a,b,c))\n",[14,98126,98127],{},"③二维数组拼接",[87,98129,98131],{"className":30357,"code":98130,"language":30359,"meta":18,"style":18},"#二维数组使用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",[93,98132,98133,98138,98162,98187,98192,98197],{"__ignoreMap":18},[96,98134,98135],{"class":98,"line":99},[96,98136,98137],{"class":165},"#二维数组使用concatenate进行拼接\n",[96,98139,98140,98142,98144,98146,98148,98150,98152,98154,98156,98158,98160],{"class":98,"line":19},[96,98141,93285],{"class":106},[96,98143,152],{"class":102},[96,98145,92981],{"class":106},[96,98147,324],{"class":155},[96,98149,485],{"class":106},[96,98151,630],{"class":155},[96,98153,92986],{"class":106},[96,98155,178],{"class":155},[96,98157,485],{"class":106},[96,98159,400],{"class":155},[96,98161,113],{"class":106},[96,98163,98164,98167,98169,98171,98173,98175,98177,98179,98181,98183,98185],{"class":98,"line":1162},[96,98165,98166],{"class":106},"bb",[96,98168,152],{"class":102},[96,98170,92981],{"class":106},[96,98172,444],{"class":155},[96,98174,485],{"class":106},[96,98176,749],{"class":155},[96,98178,92986],{"class":106},[96,98180,178],{"class":155},[96,98182,485],{"class":106},[96,98184,400],{"class":155},[96,98186,113],{"class":106},[96,98188,98189],{"class":98,"line":1177},[96,98190,98191],{"class":165},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[96,98193,98194],{"class":98,"line":1183},[96,98195,98196],{"class":165},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[96,98198,98199,98202,98204,98206,98208],{"class":98,"line":1197},[96,98200,98201],{"class":106},"np.concatenate((aa,bb),",[96,98203,47493],{"class":5200},[96,98205,152],{"class":102},[96,98207,298],{"class":155},[96,98209,113],{"class":106},[14,98211,98212],{},"结果：",[14,98214,98215],{},[1445,98216],{"alt":18,"src":98217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[87,98219,98221],{"className":30357,"code":98220,"language":30359,"meta":18,"style":18},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[93,98222,98223,98228],{"__ignoreMap":18},[96,98224,98225],{"class":98,"line":99},[96,98226,98227],{"class":165},"#指定axis为1进行拼接\n",[96,98229,98230,98232,98234,98236,98238],{"class":98,"line":19},[96,98231,98201],{"class":106},[96,98233,47493],{"class":5200},[96,98235,152],{"class":102},[96,98237,324],{"class":155},[96,98239,113],{"class":106},[14,98241,98212],{},[14,98243,98244],{},[1445,98245],{"alt":18,"src":98246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[14,98248,98249],{},[256,98250,98251],{},"二维数组总结：0竖着方向，1横着方向",[14,98253,98254],{},"④三维数组拼接",[14,98256,98257],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[87,98259,98261],{"className":30357,"code":98260,"language":30359,"meta":18,"style":18},"#两个三行六列\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",[93,98262,98263,98268,98296,98326,98331,98348,98353,98358,98363,98380,98385,98390,98395,98408],{"__ignoreMap":18},[96,98264,98265],{"class":98,"line":99},[96,98266,98267],{"class":165},"#两个三行六列\n",[96,98269,98270,98272,98274,98276,98278,98280,98282,98284,98286,98288,98290,98292,98294],{"class":98,"line":19},[96,98271,95500],{"class":106},[96,98273,152],{"class":102},[96,98275,92981],{"class":106},[96,98277,324],{"class":155},[96,98279,485],{"class":106},[96,98281,432],{"class":155},[96,98283,92986],{"class":106},[96,98285,184],{"class":155},[96,98287,485],{"class":106},[96,98289,178],{"class":155},[96,98291,485],{"class":106},[96,98293,451],{"class":155},[96,98295,113],{"class":106},[96,98297,98298,98301,98303,98305,98307,98309,98312,98314,98316,98318,98320,98322,98324],{"class":98,"line":1162},[96,98299,98300],{"class":106},"bbb",[96,98302,152],{"class":102},[96,98304,92981],{"class":106},[96,98306,444],{"class":155},[96,98308,485],{"class":106},[96,98310,98311],{"class":155},"137",[96,98313,92986],{"class":106},[96,98315,184],{"class":155},[96,98317,485],{"class":106},[96,98319,178],{"class":155},[96,98321,485],{"class":106},[96,98323,451],{"class":155},[96,98325,113],{"class":106},[96,98327,98328],{"class":98,"line":1177},[96,98329,98330],{"class":165},"#axis=0\n",[96,98332,98333,98335,98337,98340,98342,98344,98346],{"class":98,"line":1183},[96,98334,802],{"class":106},[96,98336,152],{"class":102},[96,98338,98339],{"class":106},"np.concatenate((aaa,bbb),",[96,98341,47493],{"class":5200},[96,98343,152],{"class":102},[96,98345,298],{"class":155},[96,98347,113],{"class":106},[96,98349,98350],{"class":98,"line":1197},[96,98351,98352],{"class":106},"s.shape\n",[96,98354,98355],{"class":98,"line":1203},[96,98356,98357],{"class":165},"#输出：(4,3,6)\n",[96,98359,98360],{"class":98,"line":1294},[96,98361,98362],{"class":165},"#axis=1\n",[96,98364,98365,98368,98370,98372,98374,98376,98378],{"class":98,"line":1300},[96,98366,98367],{"class":106},"ss",[96,98369,152],{"class":102},[96,98371,98339],{"class":106},[96,98373,47493],{"class":5200},[96,98375,152],{"class":102},[96,98377,324],{"class":155},[96,98379,113],{"class":106},[96,98381,98382],{"class":98,"line":1312},[96,98383,98384],{"class":106},"ss.shape\n",[96,98386,98387],{"class":98,"line":1595},[96,98388,98389],{"class":165},"#输出：(2,6,6)\n",[96,98391,98392],{"class":98,"line":1600},[96,98393,98394],{"class":165},"#axis=2\n",[96,98396,98397,98399,98401,98403,98405],{"class":98,"line":1606},[96,98398,98339],{"class":106},[96,98400,47493],{"class":5200},[96,98402,152],{"class":102},[96,98404,184],{"class":155},[96,98406,98407],{"class":106},").shape\n",[96,98409,98410],{"class":98,"line":1611},[96,98411,98412],{"class":165},"#输出：（2，3，12）\n",[14,98414,98415],{},"⑤四维数组拼接",[87,98417,98419],{"className":30357,"code":98418,"language":30359,"meta":18,"style":18},"#两个三行六列\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",[93,98420,98421,98425,98453,98481,98506,98532,98536,98549,98554,98558,98570,98575,98579,98591,98596,98601,98613],{"__ignoreMap":18},[96,98422,98423],{"class":98,"line":99},[96,98424,98267],{"class":165},[96,98426,98427,98429,98431,98433,98435,98437,98439,98441,98443,98445,98447,98449,98451],{"class":98,"line":19},[96,98428,95500],{"class":106},[96,98430,152],{"class":102},[96,98432,92981],{"class":106},[96,98434,324],{"class":155},[96,98436,485],{"class":106},[96,98438,432],{"class":155},[96,98440,92986],{"class":106},[96,98442,184],{"class":155},[96,98444,485],{"class":106},[96,98446,178],{"class":155},[96,98448,485],{"class":106},[96,98450,451],{"class":155},[96,98452,113],{"class":106},[96,98454,98455,98457,98459,98461,98463,98465,98467,98469,98471,98473,98475,98477,98479],{"class":98,"line":1162},[96,98456,98300],{"class":106},[96,98458,152],{"class":102},[96,98460,92981],{"class":106},[96,98462,444],{"class":155},[96,98464,485],{"class":106},[96,98466,98311],{"class":155},[96,98468,92986],{"class":106},[96,98470,184],{"class":155},[96,98472,485],{"class":106},[96,98474,178],{"class":155},[96,98476,485],{"class":106},[96,98478,451],{"class":155},[96,98480,113],{"class":106},[96,98482,98483,98486,98488,98490,98492,98494,98496,98498,98500,98502,98504],{"class":98,"line":1177},[96,98484,98485],{"class":106},"aaaa",[96,98487,152],{"class":102},[96,98489,97649],{"class":106},[96,98491,184],{"class":155},[96,98493,485],{"class":106},[96,98495,178],{"class":155},[96,98497,485],{"class":106},[96,98499,178],{"class":155},[96,98501,485],{"class":106},[96,98503,184],{"class":155},[96,98505,113],{"class":106},[96,98507,98508,98511,98513,98516,98518,98520,98522,98524,98526,98528,98530],{"class":98,"line":1183},[96,98509,98510],{"class":106},"bbbb",[96,98512,152],{"class":102},[96,98514,98515],{"class":106},"bbb.reshape(",[96,98517,184],{"class":155},[96,98519,485],{"class":106},[96,98521,178],{"class":155},[96,98523,485],{"class":106},[96,98525,178],{"class":155},[96,98527,485],{"class":106},[96,98529,184],{"class":155},[96,98531,113],{"class":106},[96,98533,98534],{"class":98,"line":1197},[96,98535,98330],{"class":165},[96,98537,98538,98541,98543,98545,98547],{"class":98,"line":1203},[96,98539,98540],{"class":106},"np.concatenate((aaaa,bbbb),",[96,98542,47493],{"class":5200},[96,98544,152],{"class":102},[96,98546,298],{"class":155},[96,98548,98407],{"class":106},[96,98550,98551],{"class":98,"line":1294},[96,98552,98553],{"class":165},"#结果：（4，3，3，2）\n",[96,98555,98556],{"class":98,"line":1300},[96,98557,98362],{"class":165},[96,98559,98560,98562,98564,98566,98568],{"class":98,"line":1312},[96,98561,98540],{"class":106},[96,98563,47493],{"class":5200},[96,98565,152],{"class":102},[96,98567,324],{"class":155},[96,98569,98407],{"class":106},[96,98571,98572],{"class":98,"line":1595},[96,98573,98574],{"class":165},"#结果：（2，6，3，2）\n",[96,98576,98577],{"class":98,"line":1600},[96,98578,98394],{"class":165},[96,98580,98581,98583,98585,98587,98589],{"class":98,"line":1606},[96,98582,98540],{"class":106},[96,98584,47493],{"class":5200},[96,98586,152],{"class":102},[96,98588,184],{"class":155},[96,98590,98407],{"class":106},[96,98592,98593],{"class":98,"line":1611},[96,98594,98595],{"class":165},"#结果：（2，3，6，2）\n",[96,98597,98598],{"class":98,"line":1625},[96,98599,98600],{"class":165},"#axis=3\n",[96,98602,98603,98605,98607,98609,98611],{"class":98,"line":1630},[96,98604,98540],{"class":106},[96,98606,47493],{"class":5200},[96,98608,152],{"class":102},[96,98610,178],{"class":155},[96,98612,98407],{"class":106},[96,98614,98615],{"class":98,"line":1636},[96,98616,98617],{"class":165},"#结果：（2，3，3，4）\n",[38,98619,98621],{"id":98620},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[14,98623,98624],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[14,98626,98627],{},"①二维数组",[87,98629,98631],{"className":30357,"code":98630,"language":30359,"meta":18,"style":18},"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",[93,98632,98633,98657,98681,98686,98691],{"__ignoreMap":18},[96,98634,98635,98637,98639,98641,98643,98645,98647,98649,98651,98653,98655],{"class":98,"line":99},[96,98636,93285],{"class":106},[96,98638,152],{"class":102},[96,98640,92981],{"class":106},[96,98642,324],{"class":155},[96,98644,485],{"class":106},[96,98646,630],{"class":155},[96,98648,92986],{"class":106},[96,98650,178],{"class":155},[96,98652,485],{"class":106},[96,98654,400],{"class":155},[96,98656,113],{"class":106},[96,98658,98659,98661,98663,98665,98667,98669,98671,98673,98675,98677,98679],{"class":98,"line":19},[96,98660,98166],{"class":106},[96,98662,152],{"class":102},[96,98664,92981],{"class":106},[96,98666,444],{"class":155},[96,98668,485],{"class":106},[96,98670,749],{"class":155},[96,98672,92986],{"class":106},[96,98674,178],{"class":155},[96,98676,485],{"class":106},[96,98678,400],{"class":155},[96,98680,113],{"class":106},[96,98682,98683],{"class":98,"line":1162},[96,98684,98685],{"class":106},"np.hstack((aa,bb))\n",[96,98687,98688],{"class":98,"line":1177},[96,98689,98690],{"class":165},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[96,98692,98693],{"class":98,"line":1183},[96,98694,98695],{"class":165},"#np.hstack([aa,bb])\n",[14,98697,98212],{},[14,98699,98700],{},[1445,98701],{"alt":18,"src":98702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[14,98704,98705],{},"等效于concatenate()函数中axis=1时的情况",[14,98707,98708],{},"②三维数组",[87,98710,98712],{"className":30357,"code":98711,"language":30359,"meta":18,"style":18},"#两个三行六列\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",[93,98713,98714,98718,98746,98774,98779,98784],{"__ignoreMap":18},[96,98715,98716],{"class":98,"line":99},[96,98717,98267],{"class":165},[96,98719,98720,98722,98724,98726,98728,98730,98732,98734,98736,98738,98740,98742,98744],{"class":98,"line":19},[96,98721,95500],{"class":106},[96,98723,152],{"class":102},[96,98725,92981],{"class":106},[96,98727,324],{"class":155},[96,98729,485],{"class":106},[96,98731,432],{"class":155},[96,98733,92986],{"class":106},[96,98735,184],{"class":155},[96,98737,485],{"class":106},[96,98739,178],{"class":155},[96,98741,485],{"class":106},[96,98743,451],{"class":155},[96,98745,113],{"class":106},[96,98747,98748,98750,98752,98754,98756,98758,98760,98762,98764,98766,98768,98770,98772],{"class":98,"line":1162},[96,98749,98300],{"class":106},[96,98751,152],{"class":102},[96,98753,92981],{"class":106},[96,98755,444],{"class":155},[96,98757,485],{"class":106},[96,98759,98311],{"class":155},[96,98761,92986],{"class":106},[96,98763,184],{"class":155},[96,98765,485],{"class":106},[96,98767,178],{"class":155},[96,98769,485],{"class":106},[96,98771,451],{"class":155},[96,98773,113],{"class":106},[96,98775,98776],{"class":98,"line":1177},[96,98777,98778],{"class":165},"#使用hstack\n",[96,98780,98781],{"class":98,"line":1183},[96,98782,98783],{"class":106},"np.hstack((aaa,bbb)).shape\n",[96,98785,98786],{"class":98,"line":1197},[96,98787,98788],{"class":165},"#输出：（2，6，6）\n",[38,98790,98792],{"id":98791},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[14,98794,98795],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[14,98797,98627],{},[87,98799,98801],{"className":30357,"code":98800,"language":30359,"meta":18,"style":18},"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",[93,98802,98803,98827,98851,98856,98861,98866],{"__ignoreMap":18},[96,98804,98805,98807,98809,98811,98813,98815,98817,98819,98821,98823,98825],{"class":98,"line":99},[96,98806,93285],{"class":106},[96,98808,152],{"class":102},[96,98810,92981],{"class":106},[96,98812,324],{"class":155},[96,98814,485],{"class":106},[96,98816,630],{"class":155},[96,98818,92986],{"class":106},[96,98820,178],{"class":155},[96,98822,485],{"class":106},[96,98824,400],{"class":155},[96,98826,113],{"class":106},[96,98828,98829,98831,98833,98835,98837,98839,98841,98843,98845,98847,98849],{"class":98,"line":19},[96,98830,98166],{"class":106},[96,98832,152],{"class":102},[96,98834,92981],{"class":106},[96,98836,444],{"class":155},[96,98838,485],{"class":106},[96,98840,749],{"class":155},[96,98842,92986],{"class":106},[96,98844,178],{"class":155},[96,98846,485],{"class":106},[96,98848,400],{"class":155},[96,98850,113],{"class":106},[96,98852,98853],{"class":98,"line":1162},[96,98854,98855],{"class":165},"#vstack 垂直方向进行堆叠\n",[96,98857,98858],{"class":98,"line":1177},[96,98859,98860],{"class":106},"np.vstack((aa,bb))\n",[96,98862,98863],{"class":98,"line":1183},[96,98864,98865],{"class":165},"#与hstack传的参数类似，等价于：\n",[96,98867,98868],{"class":98,"line":1197},[96,98869,98870],{"class":106},"np.vstack([aa,bb])\n",[14,98872,98212],{},[14,98874,98875],{},[1445,98876],{"alt":18,"src":98877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[14,98879,98708],{},[87,98881,98883],{"className":30357,"code":98882,"language":30359,"meta":18,"style":18},"#两个三行六列\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",[93,98884,98885,98889,98917,98945,98950,98955],{"__ignoreMap":18},[96,98886,98887],{"class":98,"line":99},[96,98888,98267],{"class":165},[96,98890,98891,98893,98895,98897,98899,98901,98903,98905,98907,98909,98911,98913,98915],{"class":98,"line":19},[96,98892,95500],{"class":106},[96,98894,152],{"class":102},[96,98896,92981],{"class":106},[96,98898,324],{"class":155},[96,98900,485],{"class":106},[96,98902,432],{"class":155},[96,98904,92986],{"class":106},[96,98906,184],{"class":155},[96,98908,485],{"class":106},[96,98910,178],{"class":155},[96,98912,485],{"class":106},[96,98914,451],{"class":155},[96,98916,113],{"class":106},[96,98918,98919,98921,98923,98925,98927,98929,98931,98933,98935,98937,98939,98941,98943],{"class":98,"line":1162},[96,98920,98300],{"class":106},[96,98922,152],{"class":102},[96,98924,92981],{"class":106},[96,98926,444],{"class":155},[96,98928,485],{"class":106},[96,98930,98311],{"class":155},[96,98932,92986],{"class":106},[96,98934,184],{"class":155},[96,98936,485],{"class":106},[96,98938,178],{"class":155},[96,98940,485],{"class":106},[96,98942,451],{"class":155},[96,98944,113],{"class":106},[96,98946,98947],{"class":98,"line":1177},[96,98948,98949],{"class":165},"#使用vstack\n",[96,98951,98952],{"class":98,"line":1183},[96,98953,98954],{"class":106},"np.vstack((aaa,bbb)).shape\n",[96,98956,98957],{"class":98,"line":1197},[96,98958,98959],{"class":165},"#输出：（4，3，6）\n",[38,98961,98963],{"id":98962},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[14,98965,98966],{},"该方法是三维数组特有的方法",[14,98968,98969],{},"也就是说",[14,98971,98972],{},"一维数组拼接方法用：concatenate()",[14,98974,98975],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[14,98977,98978],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[14,98980,98981],{},"四维数组及多维数组只能用concatenate进行拼接",[87,98983,98985],{"className":30357,"code":98984,"language":30359,"meta":18,"style":18},"#两个三行六列\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",[93,98986,98987,98991,99019,99047,99052,99057],{"__ignoreMap":18},[96,98988,98989],{"class":98,"line":99},[96,98990,98267],{"class":165},[96,98992,98993,98995,98997,98999,99001,99003,99005,99007,99009,99011,99013,99015,99017],{"class":98,"line":19},[96,98994,95500],{"class":106},[96,98996,152],{"class":102},[96,98998,92981],{"class":106},[96,99000,324],{"class":155},[96,99002,485],{"class":106},[96,99004,432],{"class":155},[96,99006,92986],{"class":106},[96,99008,184],{"class":155},[96,99010,485],{"class":106},[96,99012,178],{"class":155},[96,99014,485],{"class":106},[96,99016,451],{"class":155},[96,99018,113],{"class":106},[96,99020,99021,99023,99025,99027,99029,99031,99033,99035,99037,99039,99041,99043,99045],{"class":98,"line":1162},[96,99022,98300],{"class":106},[96,99024,152],{"class":102},[96,99026,92981],{"class":106},[96,99028,444],{"class":155},[96,99030,485],{"class":106},[96,99032,98311],{"class":155},[96,99034,92986],{"class":106},[96,99036,184],{"class":155},[96,99038,485],{"class":106},[96,99040,178],{"class":155},[96,99042,485],{"class":106},[96,99044,451],{"class":155},[96,99046,113],{"class":106},[96,99048,99049],{"class":98,"line":1177},[96,99050,99051],{"class":165},"#使用dstack\n",[96,99053,99054],{"class":98,"line":1183},[96,99055,99056],{"class":106},"np.dstack((aaa,bbb)).shape\n",[96,99058,99059],{"class":98,"line":1197},[96,99060,99061],{"class":165},"#结果：（2，3，12）\n",[5110,99063,99064],{},"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":18,"searchDepth":19,"depth":19,"links":99066},[99067,99068,99069,99070],{"id":98006,"depth":19,"text":98007},{"id":98620,"depth":19,"text":98621},{"id":98791,"depth":19,"text":98792},{"id":98962,"depth":19,"text":98963},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":97998,"description":23361},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99077,"title":99078,"body":99079,"description":23361,"extension":21,"meta":99354,"navigation":23,"path":99355,"seo":99356,"stem":99357,"__hash__":99358},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99080,"toc":99352},[99081,99084,99087,99181,99184,99187,99190,99193,99196,99199,99202,99205,99349],[10,99082,99078],{"id":99083},"_7数组转置",[14,99085,99086],{},"使用transpose()函数",[87,99088,99090],{"className":30357,"code":99089,"language":30359,"meta":18,"style":18},"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",[93,99091,99092,99102,99126,99131,99136,99141,99146,99154,99158,99162,99167,99172,99177],{"__ignoreMap":18},[96,99093,99094,99096,99098,99100],{"class":98,"line":99},[96,99095,30371],{"class":102},[96,99097,31359],{"class":106},[96,99099,31362],{"class":102},[96,99101,31365],{"class":106},[96,99103,99104,99106,99108,99110,99112,99114,99116,99118,99120,99122,99124],{"class":98,"line":19},[96,99105,345],{"class":106},[96,99107,152],{"class":102},[96,99109,31696],{"class":106},[96,99111,324],{"class":155},[96,99113,485],{"class":106},[96,99115,630],{"class":155},[96,99117,92986],{"class":106},[96,99119,400],{"class":155},[96,99121,485],{"class":106},[96,99123,178],{"class":155},[96,99125,113],{"class":106},[96,99127,99128],{"class":98,"line":1162},[96,99129,99130],{"class":165},"#二维数组转置\n",[96,99132,99133],{"class":98,"line":1177},[96,99134,99135],{"class":165},"#调用transpose()函数\n",[96,99137,99138],{"class":98,"line":1183},[96,99139,99140],{"class":106},"a.transpose()\n",[96,99142,99143],{"class":98,"line":1197},[96,99144,99145],{"class":165},"#对于二维数组也可以采用.T来实现\n",[96,99147,99148,99151],{"class":98,"line":1203},[96,99149,99150],{"class":106},"a.T",[96,99152,99153],{"class":165},"#与上述代码一样\n",[96,99155,99156],{"class":98,"line":1294},[96,99157,93543],{"class":165},[96,99159,99160],{"class":98,"line":1300},[96,99161,93907],{"class":211},[96,99163,99164],{"class":98,"line":1312},[96,99165,99166],{"class":211},"array([[ 1,  4,  7, 10],\n",[96,99168,99169],{"class":98,"line":1595},[96,99170,99171],{"class":211},"       [ 2,  5,  8, 11],\n",[96,99173,99174],{"class":98,"line":1600},[96,99175,99176],{"class":211},"       [ 3,  6,  9, 12]])\n",[96,99178,99179],{"class":98,"line":1606},[96,99180,93907],{"class":211},[14,99182,99183],{},"也可以使用np.transpose()的形式",[14,99185,99186],{},"#多维数组进行转置 np.transpose()",[14,99188,99189],{},"#对二维数组也可以使用np.transpose()进行转置",[14,99191,99192],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[14,99194,99195],{},"第二个参数，维度可以理解为用axis中的数来理解",[14,99197,99198],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[14,99200,99201],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[14,99203,99204],{},"四维及以上的数组也是一样的道理",[87,99206,99208],{"className":30357,"code":99207,"language":30359,"meta":18,"style":18},"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",[93,99209,99210,99238,99243,99248,99253,99271,99276,99308,99313,99318,99323,99344],{"__ignoreMap":18},[96,99211,99212,99214,99216,99218,99220,99222,99224,99226,99228,99230,99232,99234,99236],{"class":98,"line":99},[96,99213,927],{"class":106},[96,99215,152],{"class":102},[96,99217,92981],{"class":106},[96,99219,324],{"class":155},[96,99221,485],{"class":106},[96,99223,432],{"class":155},[96,99225,92986],{"class":106},[96,99227,178],{"class":155},[96,99229,485],{"class":106},[96,99231,451],{"class":155},[96,99233,485],{"class":106},[96,99235,184],{"class":155},[96,99237,113],{"class":106},[96,99239,99240],{"class":98,"line":19},[96,99241,99242],{"class":106},"x.shape\n",[96,99244,99245],{"class":98,"line":1162},[96,99246,99247],{"class":165},"#结果：（3,6,2）\n",[96,99249,99250],{"class":98,"line":1177},[96,99251,99252],{"class":165},"#使用np.transpose()进行转置 变为(2,6,3)\n",[96,99254,99255,99258,99260,99262,99264,99266,99268],{"class":98,"line":1183},[96,99256,99257],{"class":106},"np.transpose(x,(",[96,99259,184],{"class":155},[96,99261,485],{"class":106},[96,99263,324],{"class":155},[96,99265,485],{"class":106},[96,99267,298],{"class":155},[96,99269,99270],{"class":106},")).shape\n",[96,99272,99273],{"class":98,"line":1197},[96,99274,99275],{"class":165},"#结果：(2,6,3)\n",[96,99277,99278,99280,99282,99284,99286,99288,99290,99292,99294,99296,99298,99300,99302,99304,99306],{"class":98,"line":1203},[96,99279,98485],{"class":106},[96,99281,152],{"class":102},[96,99283,92981],{"class":106},[96,99285,324],{"class":155},[96,99287,485],{"class":106},[96,99289,432],{"class":155},[96,99291,92986],{"class":106},[96,99293,178],{"class":155},[96,99295,485],{"class":106},[96,99297,184],{"class":155},[96,99299,485],{"class":106},[96,99301,324],{"class":155},[96,99303,485],{"class":106},[96,99305,451],{"class":155},[96,99307,113],{"class":106},[96,99309,99310],{"class":98,"line":1294},[96,99311,99312],{"class":106},"aaaa.shape\n",[96,99314,99315],{"class":98,"line":1300},[96,99316,99317],{"class":165},"#结果：（3，2，1，6）\n",[96,99319,99320],{"class":98,"line":1312},[96,99321,99322],{"class":165},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[96,99324,99325,99328,99330,99332,99334,99336,99338,99340,99342],{"class":98,"line":1595},[96,99326,99327],{"class":106},"np.transpose(aaaa,(",[96,99329,324],{"class":155},[96,99331,485],{"class":106},[96,99333,184],{"class":155},[96,99335,485],{"class":106},[96,99337,298],{"class":155},[96,99339,485],{"class":106},[96,99341,178],{"class":155},[96,99343,99270],{"class":106},[96,99345,99346],{"class":98,"line":1600},[96,99347,99348],{"class":165},"#结果：(2,1,3,6)\n",[5110,99350,99351],{},"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":18,"searchDepth":19,"depth":19,"links":99353},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99078,"description":23361},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99360,"title":99361,"body":99362,"description":23361,"extension":21,"meta":100096,"navigation":23,"path":100097,"seo":100098,"stem":100099,"__hash__":100100},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99363,"toc":100094},[99364,99367,99370,99373,99376,99379,99382,99385,99388,99497,99500,99503,100091],[10,99365,99361],{"id":99366},"_8数组分割",[14,99368,99369],{},"split分割",[14,99371,99372],{},"numpy.split(ary,indics_or_sections,axis)",[14,99374,99375],{},"解释：",[14,99377,99378],{},"ary:被分割的数组",[14,99380,99381],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[14,99383,99384],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[14,99386,99387],{},"①一维数组的分割",[87,99389,99391],{"className":30357,"code":99390,"language":30359,"meta":18,"style":18},"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",[93,99392,99393,99409,99414,99423,99427,99432,99440,99444,99449,99454,99467,99471,99476,99488,99492],{"__ignoreMap":18},[96,99394,99395,99397,99399,99401,99403,99405,99407],{"class":98,"line":99},[96,99396,345],{"class":106},[96,99398,152],{"class":102},[96,99400,92981],{"class":106},[96,99402,324],{"class":155},[96,99404,485],{"class":106},[96,99406,527],{"class":155},[96,99408,113],{"class":106},[96,99410,99411],{"class":98,"line":19},[96,99412,99413],{"class":165},"#如果传入整数，必须能够平分，否则会报错\n",[96,99415,99416,99419,99421],{"class":98,"line":1162},[96,99417,99418],{"class":106},"np.split(a,",[96,99420,184],{"class":155},[96,99422,113],{"class":106},[96,99424,99425],{"class":98,"line":1177},[96,99426,93543],{"class":165},[96,99428,99429],{"class":98,"line":1183},[96,99430,99431],{"class":165},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[96,99433,99434,99436,99438],{"class":98,"line":1197},[96,99435,99418],{"class":106},[96,99437,400],{"class":155},[96,99439,113],{"class":106},[96,99441,99442],{"class":98,"line":1203},[96,99443,93543],{"class":165},[96,99445,99446],{"class":98,"line":1294},[96,99447,99448],{"class":165},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[96,99450,99451],{"class":98,"line":1300},[96,99452,99453],{"class":165},"#传入数组\n",[96,99455,99456,99459,99461,99463,99465],{"class":98,"line":1312},[96,99457,99458],{"class":106},"np.split(a,[",[96,99460,178],{"class":155},[96,99462,485],{"class":106},[96,99464,426],{"class":155},[96,99466,4640],{"class":106},[96,99468,99469],{"class":98,"line":1595},[96,99470,93543],{"class":165},[96,99472,99473],{"class":98,"line":1600},[96,99474,99475],{"class":165},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[96,99477,99478,99480,99482,99484,99486],{"class":98,"line":1606},[96,99479,99458],{"class":106},[96,99481,426],{"class":155},[96,99483,485],{"class":106},[96,99485,476],{"class":155},[96,99487,4640],{"class":106},[96,99489,99490],{"class":98,"line":1611},[96,99491,93543],{"class":165},[96,99493,99494],{"class":98,"line":1625},[96,99495,99496],{"class":165},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[14,99498,99499],{},"②二维数组的分割",[14,99501,99502],{},"使用split()",[87,99504,99506],{"className":30357,"code":99505,"language":30359,"meta":18,"style":18},"#二维数组分割\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",[93,99507,99508,99513,99537,99542,99551,99555,99559,99564,99569,99574,99579,99584,99589,99594,99598,99611,99615,99619,99623,99627,99631,99636,99641,99646,99650,99655,99671,99675,99679,99684,99689,99694,99699,99704,99709,99714,99719,99724,99729,99734,99739,99744,99749,99754,99759,99764,99769,99773,99777,99797,99801,99805,99810,99815,99820,99825,99830,99835,99840,99845,99850,99855,99860,99865,99870,99875,99880,99885,99890,99895,99899,99904,99913,99917,99921,99925,99929,99933,99937,99941,99945,99949,99958,99962,99966,99970,99974,99978,99982,99986,99990,99994,99998,100002,100006,100010,100014,100018,100022,100026,100030,100034,100038,100042,100055,100059,100063,100067,100071,100075,100079,100083,100087],{"__ignoreMap":18},[96,99509,99510],{"class":98,"line":99},[96,99511,99512],{"class":165},"#二维数组分割\n",[96,99514,99515,99517,99519,99521,99523,99525,99527,99529,99531,99533,99535],{"class":98,"line":19},[96,99516,93285],{"class":106},[96,99518,152],{"class":102},[96,99520,92981],{"class":106},[96,99522,324],{"class":155},[96,99524,485],{"class":106},[96,99526,432],{"class":155},[96,99528,92986],{"class":106},[96,99530,451],{"class":155},[96,99532,485],{"class":106},[96,99534,451],{"class":155},[96,99536,113],{"class":106},[96,99538,99539],{"class":98,"line":1162},[96,99540,99541],{"class":165},"#默认axis=0  传入整数平均分,按行来的\n",[96,99543,99544,99547,99549],{"class":98,"line":1177},[96,99545,99546],{"class":106},"np.split(aa,",[96,99548,178],{"class":155},[96,99550,113],{"class":106},[96,99552,99553],{"class":98,"line":1183},[96,99554,95743],{"class":165},[96,99556,99557],{"class":98,"line":1197},[96,99558,93907],{"class":211},[96,99560,99561],{"class":98,"line":1203},[96,99562,99563],{"class":211},"[array([[ 1,  2,  3,  4,  5,  6],\n",[96,99565,99566],{"class":98,"line":1294},[96,99567,99568],{"class":211},"        [ 7,  8,  9, 10, 11, 12]]),\n",[96,99570,99571],{"class":98,"line":1300},[96,99572,99573],{"class":211}," array([[13, 14, 15, 16, 17, 18],\n",[96,99575,99576],{"class":98,"line":1312},[96,99577,99578],{"class":211},"        [19, 20, 21, 22, 23, 24]]),\n",[96,99580,99581],{"class":98,"line":1595},[96,99582,99583],{"class":211}," array([[25, 26, 27, 28, 29, 30],\n",[96,99585,99586],{"class":98,"line":1600},[96,99587,99588],{"class":211},"        [31, 32, 33, 34, 35, 36]])]\n",[96,99590,99591],{"class":98,"line":1606},[96,99592,99593],{"class":211}," '''\n",[96,99595,99596],{"class":98,"line":1611},[96,99597,99453],{"class":165},[96,99599,99600,99603,99605,99607,99609],{"class":98,"line":1625},[96,99601,99602],{"class":106},"np.split(aa,[",[96,99604,184],{"class":155},[96,99606,485],{"class":106},[96,99608,426],{"class":155},[96,99610,4640],{"class":106},[96,99612,99613],{"class":98,"line":1630},[96,99614,95743],{"class":165},[96,99616,99617],{"class":98,"line":1636},[96,99618,93907],{"class":211},[96,99620,99621],{"class":98,"line":1657},[96,99622,99563],{"class":211},[96,99624,99625],{"class":98,"line":1662},[96,99626,99568],{"class":211},[96,99628,99629],{"class":98,"line":1676},[96,99630,99573],{"class":211},[96,99632,99633],{"class":98,"line":1681},[96,99634,99635],{"class":211},"        [19, 20, 21, 22, 23, 24],\n",[96,99637,99638],{"class":98,"line":1710},[96,99639,99640],{"class":211},"        [25, 26, 27, 28, 29, 30]]),\n",[96,99642,99643],{"class":98,"line":1715},[96,99644,99645],{"class":211}," array([[31, 32, 33, 34, 35, 36]])]\n",[96,99647,99648],{"class":98,"line":1732},[96,99649,93907],{"class":211},[96,99651,99652],{"class":98,"line":1737},[96,99653,99654],{"class":165},"#axis=1 按照列来分\n",[96,99656,99657,99659,99661,99663,99665,99667,99669],{"class":98,"line":1742},[96,99658,99546],{"class":106},[96,99660,178],{"class":155},[96,99662,485],{"class":106},[96,99664,47493],{"class":5200},[96,99666,152],{"class":102},[96,99668,324],{"class":155},[96,99670,113],{"class":106},[96,99672,99673],{"class":98,"line":1747},[96,99674,95743],{"class":165},[96,99676,99677],{"class":98,"line":1761},[96,99678,93907],{"class":211},[96,99680,99681],{"class":98,"line":1766},[96,99682,99683],{"class":211},"[array([[ 1,  2],\n",[96,99685,99686],{"class":98,"line":2560},[96,99687,99688],{"class":211},"        [ 7,  8],\n",[96,99690,99691],{"class":98,"line":2574},[96,99692,99693],{"class":211},"        [13, 14],\n",[96,99695,99696],{"class":98,"line":2582},[96,99697,99698],{"class":211},"        [19, 20],\n",[96,99700,99701],{"class":98,"line":2587},[96,99702,99703],{"class":211},"        [25, 26],\n",[96,99705,99706],{"class":98,"line":2593},[96,99707,99708],{"class":211},"        [31, 32]]),\n",[96,99710,99711],{"class":98,"line":2599},[96,99712,99713],{"class":211}," array([[ 3,  4],\n",[96,99715,99716],{"class":98,"line":2604},[96,99717,99718],{"class":211},"        [ 9, 10],\n",[96,99720,99721],{"class":98,"line":7932},[96,99722,99723],{"class":211},"        [15, 16],\n",[96,99725,99726],{"class":98,"line":7956},[96,99727,99728],{"class":211},"        [21, 22],\n",[96,99730,99731],{"class":98,"line":7961},[96,99732,99733],{"class":211},"        [27, 28],\n",[96,99735,99736],{"class":98,"line":7967},[96,99737,99738],{"class":211},"        [33, 34]]),\n",[96,99740,99741],{"class":98,"line":7994},[96,99742,99743],{"class":211}," array([[ 5,  6],\n",[96,99745,99746],{"class":98,"line":7999},[96,99747,99748],{"class":211},"        [11, 12],\n",[96,99750,99751],{"class":98,"line":8005},[96,99752,99753],{"class":211},"        [17, 18],\n",[96,99755,99756],{"class":98,"line":8017},[96,99757,99758],{"class":211},"        [23, 24],\n",[96,99760,99761],{"class":98,"line":8029},[96,99762,99763],{"class":211},"        [29, 30],\n",[96,99765,99766],{"class":98,"line":8041},[96,99767,99768],{"class":211},"        [35, 36]])]\n",[96,99770,99771],{"class":98,"line":9700},[96,99772,99593],{"class":211},[96,99774,99775],{"class":98,"line":9725},[96,99776,99453],{"class":165},[96,99778,99779,99781,99783,99785,99787,99789,99791,99793,99795],{"class":98,"line":9748},[96,99780,99602],{"class":106},[96,99782,324],{"class":155},[96,99784,485],{"class":106},[96,99786,184],{"class":155},[96,99788,41588],{"class":106},[96,99790,47493],{"class":5200},[96,99792,152],{"class":102},[96,99794,324],{"class":155},[96,99796,113],{"class":106},[96,99798,99799],{"class":98,"line":9772},[96,99800,93543],{"class":165},[96,99802,99803],{"class":98,"line":9777},[96,99804,93907],{"class":211},[96,99806,99807],{"class":98,"line":9782},[96,99808,99809],{"class":211},"[array([[ 1],\n",[96,99811,99812],{"class":98,"line":9787},[96,99813,99814],{"class":211},"        [ 7],\n",[96,99816,99817],{"class":98,"line":9796},[96,99818,99819],{"class":211},"        [13],\n",[96,99821,99822],{"class":98,"line":9801},[96,99823,99824],{"class":211},"        [19],\n",[96,99826,99827],{"class":98,"line":9807},[96,99828,99829],{"class":211},"        [25],\n",[96,99831,99832],{"class":98,"line":9828},[96,99833,99834],{"class":211},"        [31]]),\n",[96,99836,99837],{"class":98,"line":9834},[96,99838,99839],{"class":211}," array([[ 2],\n",[96,99841,99842],{"class":98,"line":9848},[96,99843,99844],{"class":211},"        [ 8],\n",[96,99846,99847],{"class":98,"line":9854},[96,99848,99849],{"class":211},"        [14],\n",[96,99851,99852],{"class":98,"line":9881},[96,99853,99854],{"class":211},"        [20],\n",[96,99856,99857],{"class":98,"line":9890},[96,99858,99859],{"class":211},"        [26],\n",[96,99861,99862],{"class":98,"line":9896},[96,99863,99864],{"class":211},"        [32]]),\n",[96,99866,99867],{"class":98,"line":9904},[96,99868,99869],{"class":211}," array([[ 3,  4,  5,  6],\n",[96,99871,99872],{"class":98,"line":9909},[96,99873,99874],{"class":211},"        [ 9, 10, 11, 12],\n",[96,99876,99877],{"class":98,"line":16588},[96,99878,99879],{"class":211},"        [15, 16, 17, 18],\n",[96,99881,99882],{"class":98,"line":16594},[96,99883,99884],{"class":211},"        [21, 22, 23, 24],\n",[96,99886,99887],{"class":98,"line":16617},[96,99888,99889],{"class":211},"        [27, 28, 29, 30],\n",[96,99891,99892],{"class":98,"line":16623},[96,99893,99894],{"class":211},"        [33, 34, 35, 36]])]\n",[96,99896,99897],{"class":98,"line":16646},[96,99898,93907],{"class":211},[96,99900,99901],{"class":98,"line":16660},[96,99902,99903],{"class":165},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[96,99905,99906,99909,99911],{"class":98,"line":16680},[96,99907,99908],{"class":106},"np.vsplit(aa,",[96,99910,178],{"class":155},[96,99912,113],{"class":106},[96,99914,99915],{"class":98,"line":16686},[96,99916,93543],{"class":165},[96,99918,99919],{"class":98,"line":16697},[96,99920,93907],{"class":211},[96,99922,99923],{"class":98,"line":16720},[96,99924,99563],{"class":211},[96,99926,99927],{"class":98,"line":16742},[96,99928,99568],{"class":211},[96,99930,99931],{"class":98,"line":16747},[96,99932,99573],{"class":211},[96,99934,99935],{"class":98,"line":16753},[96,99936,99578],{"class":211},[96,99938,99939],{"class":98,"line":16767},[96,99940,99583],{"class":211},[96,99942,99943],{"class":98,"line":16780},[96,99944,99588],{"class":211},[96,99946,99947],{"class":98,"line":16785},[96,99948,93907],{"class":211},[96,99950,99951,99954,99956],{"class":98,"line":16799},[96,99952,99953],{"class":106},"np.hsplit(aa,",[96,99955,178],{"class":155},[96,99957,113],{"class":106},[96,99959,99960],{"class":98,"line":16804},[96,99961,93543],{"class":165},[96,99963,99964],{"class":98,"line":16810},[96,99965,93907],{"class":211},[96,99967,99968],{"class":98,"line":16815},[96,99969,99683],{"class":211},[96,99971,99972],{"class":98,"line":16829},[96,99973,99688],{"class":211},[96,99975,99976],{"class":98,"line":16834},[96,99977,99693],{"class":211},[96,99979,99980],{"class":98,"line":16839},[96,99981,99698],{"class":211},[96,99983,99984],{"class":98,"line":16853},[96,99985,99703],{"class":211},[96,99987,99988],{"class":98,"line":16865},[96,99989,99708],{"class":211},[96,99991,99992],{"class":98,"line":16870},[96,99993,99713],{"class":211},[96,99995,99996],{"class":98,"line":16883},[96,99997,99718],{"class":211},[96,99999,100000],{"class":98,"line":16888},[96,100001,99723],{"class":211},[96,100003,100004],{"class":98,"line":16893},[96,100005,99728],{"class":211},[96,100007,100008],{"class":98,"line":16898},[96,100009,99733],{"class":211},[96,100011,100012],{"class":98,"line":16911},[96,100013,99738],{"class":211},[96,100015,100016],{"class":98,"line":16916},[96,100017,99743],{"class":211},[96,100019,100020],{"class":98,"line":32612},[96,100021,99748],{"class":211},[96,100023,100024],{"class":98,"line":32618},[96,100025,99753],{"class":211},[96,100027,100028],{"class":98,"line":32624},[96,100029,99758],{"class":211},[96,100031,100032],{"class":98,"line":32630},[96,100033,99763],{"class":211},[96,100035,100036],{"class":98,"line":32636},[96,100037,99768],{"class":211},[96,100039,100040],{"class":98,"line":32647},[96,100041,93907],{"class":211},[96,100043,100044,100047,100049,100051,100053],{"class":98,"line":32653},[96,100045,100046],{"class":106},"np.vsplit(aa,[",[96,100048,184],{"class":155},[96,100050,485],{"class":106},[96,100052,426],{"class":155},[96,100054,4640],{"class":106},[96,100056,100057],{"class":98,"line":32673},[96,100058,93543],{"class":165},[96,100060,100061],{"class":98,"line":32679},[96,100062,93907],{"class":211},[96,100064,100065],{"class":98,"line":32690},[96,100066,99563],{"class":211},[96,100068,100069],{"class":98,"line":32696},[96,100070,99568],{"class":211},[96,100072,100073],{"class":98,"line":32702},[96,100074,99573],{"class":211},[96,100076,100077],{"class":98,"line":32708},[96,100078,99635],{"class":211},[96,100080,100081],{"class":98,"line":32714},[96,100082,99640],{"class":211},[96,100084,100085],{"class":98,"line":32720},[96,100086,99645],{"class":211},[96,100088,100089],{"class":98,"line":32726},[96,100090,99593],{"class":211},[5110,100092,100093],{},"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":18,"searchDepth":19,"depth":19,"links":100095},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99361,"description":23361},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100102,"title":100103,"body":100104,"description":23361,"extension":21,"meta":100598,"navigation":23,"path":100599,"seo":100600,"stem":100601,"__hash__":100602},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100105,"toc":100589},[100106,100109,100112,100137,100141,100200,100252,100256,100258,100294,100348,100350,100388,100459,100463,100468,100472,100475,100508,100511,100515,100518,100521,100524,100527,100532,100536,100539,100542,100545,100548,100553,100557,100562,100565,100586],[10,100107,100103],{"id":100108},"_9数学函数",[14,100110,100111],{},"补充回顾：python的列表推导式",[87,100113,100115],{"className":30357,"code":100114,"language":30359,"meta":18,"style":18},"[1\u002Fi for i in a]\n",[93,100116,100117],{"__ignoreMap":18},[96,100118,100119,100121,100123,100125,100128,100130,100132,100134],{"class":98,"line":99},[96,100120,997],{"class":106},[96,100122,324],{"class":155},[96,100124,691],{"class":102},[96,100126,100127],{"class":106},"i ",[96,100129,3008],{"class":102},[96,100131,9422],{"class":106},[96,100133,26022],{"class":102},[96,100135,100136],{"class":106}," a]\n",[38,100138,100140],{"id":100139},"_91-求倒数","9.1 求倒数",[87,100142,100144],{"className":30357,"code":100143,"language":30359,"meta":18,"style":18},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[93,100145,100146,100151,100179,100191],{"__ignoreMap":18},[96,100147,100148],{"class":98,"line":99},[96,100149,100150],{"class":165},"#数组求倒数\n",[96,100152,100153,100155,100157,100159,100161,100163,100165,100167,100169,100171,100173,100175,100177],{"class":98,"line":19},[96,100154,345],{"class":106},[96,100156,152],{"class":102},[96,100158,997],{"class":106},[96,100160,324],{"class":155},[96,100162,485],{"class":106},[96,100164,184],{"class":155},[96,100166,485],{"class":106},[96,100168,178],{"class":155},[96,100170,485],{"class":106},[96,100172,400],{"class":155},[96,100174,485],{"class":106},[96,100176,426],{"class":155},[96,100178,33225],{"class":106},[96,100180,100181,100183,100185,100188],{"class":98,"line":1162},[96,100182,370],{"class":106},[96,100184,152],{"class":102},[96,100186,100187],{"class":106},"np.array(a)",[96,100189,100190],{"class":165},"#将列表转换为数组\n",[96,100192,100193,100195,100197],{"class":98,"line":1177},[96,100194,324],{"class":155},[96,100196,691],{"class":102},[96,100198,100199],{"class":106},"b\n",[87,100201,100203],{"className":30357,"code":100202,"language":30359,"meta":18,"style":18},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[93,100204,100205,100233,100242,100247],{"__ignoreMap":18},[96,100206,100207,100209,100211,100213,100215,100217,100219,100221,100223,100225,100227,100229,100231],{"class":98,"line":99},[96,100208,345],{"class":106},[96,100210,152],{"class":102},[96,100212,997],{"class":106},[96,100214,324],{"class":155},[96,100216,485],{"class":106},[96,100218,184],{"class":155},[96,100220,485],{"class":106},[96,100222,178],{"class":155},[96,100224,485],{"class":106},[96,100226,400],{"class":155},[96,100228,485],{"class":106},[96,100230,426],{"class":155},[96,100232,33225],{"class":106},[96,100234,100235,100237,100239],{"class":98,"line":19},[96,100236,370],{"class":106},[96,100238,152],{"class":102},[96,100240,100241],{"class":106},"np.array(a)\n",[96,100243,100244],{"class":98,"line":1162},[96,100245,100246],{"class":165},"#调用numpy中的函数reciprocal()\n",[96,100248,100249],{"class":98,"line":1177},[96,100250,100251],{"class":106},"np.reciprocal(b)\n",[38,100253,100255],{"id":100254},"_92-求平方","9.2 求平方",[14,100257,94509],{},[87,100259,100261],{"className":30357,"code":100260,"language":30359,"meta":18,"style":18},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[93,100262,100263,100268,100273,100289],{"__ignoreMap":18},[96,100264,100265],{"class":98,"line":99},[96,100266,100267],{"class":165},"#square()，求平方\n",[96,100269,100270],{"class":98,"line":19},[96,100271,100272],{"class":165},"#一维数组\n",[96,100274,100275,100277,100279,100281,100283,100285,100287],{"class":98,"line":1162},[96,100276,345],{"class":106},[96,100278,152],{"class":102},[96,100280,92981],{"class":106},[96,100282,324],{"class":155},[96,100284,485],{"class":106},[96,100286,553],{"class":155},[96,100288,113],{"class":106},[96,100290,100291],{"class":98,"line":1177},[96,100292,100293],{"class":106},"np.square(a)\n",[87,100295,100297],{"className":30357,"code":100296,"language":30359,"meta":18,"style":18},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[93,100298,100299,100304,100309,100330],{"__ignoreMap":18},[96,100300,100301],{"class":98,"line":99},[96,100302,100303],{"class":165},"#或者通过循环遍历的形式来计算\n",[96,100305,100306],{"class":98,"line":19},[96,100307,100308],{"class":165},"#这是一个列表\n",[96,100310,100311,100314,100316,100318,100320,100322,100324,100327],{"class":98,"line":1162},[96,100312,100313],{"class":106},"[i",[96,100315,562],{"class":102},[96,100317,100127],{"class":106},[96,100319,3008],{"class":102},[96,100321,9422],{"class":106},[96,100323,26022],{"class":102},[96,100325,100326],{"class":106}," a]",[96,100328,100329],{"class":165},"#这个求完之后在数列当中\n",[96,100331,100332,100335,100337,100339,100341,100343,100345],{"class":98,"line":1177},[96,100333,100334],{"class":106},"np.array([i",[96,100336,562],{"class":102},[96,100338,100127],{"class":106},[96,100340,3008],{"class":102},[96,100342,9422],{"class":106},[96,100344,26022],{"class":102},[96,100346,100347],{"class":106}," a])\n",[14,100349,93270],{},[87,100351,100353],{"className":30357,"code":100352,"language":30359,"meta":18,"style":18},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[93,100354,100355,100359,100383],{"__ignoreMap":18},[96,100356,100357],{"class":98,"line":99},[96,100358,93280],{"class":165},[96,100360,100361,100363,100365,100367,100369,100371,100373,100375,100377,100379,100381],{"class":98,"line":19},[96,100362,93285],{"class":106},[96,100364,152],{"class":102},[96,100366,92981],{"class":106},[96,100368,324],{"class":155},[96,100370,485],{"class":106},[96,100372,630],{"class":155},[96,100374,92986],{"class":106},[96,100376,400],{"class":155},[96,100378,485],{"class":106},[96,100380,178],{"class":155},[96,100382,113],{"class":106},[96,100384,100385],{"class":98,"line":1162},[96,100386,100387],{"class":106},"np.square(aa)\n",[87,100389,100391],{"className":30357,"code":100390,"language":30359,"meta":18,"style":18},"#传统的方式\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",[93,100392,100393,100398,100407,100423,100439,100454],{"__ignoreMap":18},[96,100394,100395],{"class":98,"line":99},[96,100396,100397],{"class":165},"#传统的方式\n",[96,100399,100400,100402,100404],{"class":98,"line":19},[96,100401,98166],{"class":106},[96,100403,152],{"class":102},[96,100405,100406],{"class":106},"np.empty_like(aa)\n",[96,100408,100409,100411,100413,100415,100417,100419,100421],{"class":98,"line":1162},[96,100410,3008],{"class":102},[96,100412,9422],{"class":106},[96,100414,26022],{"class":102},[96,100416,32422],{"class":155},[96,100418,107],{"class":106},[96,100420,400],{"class":155},[96,100422,30765],{"class":106},[96,100424,100425,100427,100429,100431,100433,100435,100437],{"class":98,"line":1177},[96,100426,3184],{"class":102},[96,100428,9484],{"class":106},[96,100430,26022],{"class":102},[96,100432,32422],{"class":155},[96,100434,107],{"class":106},[96,100436,178],{"class":155},[96,100438,30765],{"class":106},[96,100440,100441,100444,100446,100449,100451],{"class":98,"line":1183},[96,100442,100443],{"class":106},"        bb[i,j]",[96,100445,152],{"class":102},[96,100447,100448],{"class":106},"aa[i,j]",[96,100450,562],{"class":102},[96,100452,100453],{"class":106},"aa[i,j]\n",[96,100455,100456],{"class":98,"line":1197},[96,100457,100458],{"class":106},"bb\n",[38,100460,100462],{"id":100461},"_93-求各元素的符号","9.3 求各元素的符号",[14,100464,100465],{},[1445,100466],{"alt":18,"src":100467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[38,100469,100471],{"id":100470},"_94-modf函数","9.4 modf函数",[14,100473,100474],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[87,100476,100478],{"className":30357,"code":100477,"language":30359,"meta":18,"style":18},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[93,100479,100480,100503],{"__ignoreMap":18},[96,100481,100482,100484,100486,100488,100490,100492,100494,100496,100498,100501],{"class":98,"line":99},[96,100483,345],{"class":106},[96,100485,152],{"class":102},[96,100487,92981],{"class":106},[96,100489,639],{"class":102},[96,100491,553],{"class":155},[96,100493,485],{"class":106},[96,100495,553],{"class":155},[96,100497,485],{"class":106},[96,100499,100500],{"class":155},"0.3",[96,100502,113],{"class":106},[96,100504,100505],{"class":98,"line":19},[96,100506,100507],{"class":106},"np.modf(a)\n",[14,100509,100510],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[38,100512,100514],{"id":100513},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[14,100516,100517],{},"np.cell()",[14,100519,100520],{},"np.floor()",[14,100522,100523],{},"np.rint()",[14,100525,100526],{},"对各元素分别向上取整、向下取整、四舍五入",[14,100528,100529],{},[1445,100530],{"alt":18,"src":100531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[38,100533,100535],{"id":100534},"_96-around函数","9.6 around()函数",[14,100537,100538],{},"around()函数也可以实现对数的小数位数进行操作",[14,100540,100541],{},"其中的参数：",[14,100543,100544],{},"1.要传的数组",[14,100546,100547],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[14,100549,100550],{},[1445,100551],{"alt":18,"src":100552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[38,100554,100556],{"id":100555},"_97-三角函数","9.7 三角函数",[14,100558,100559],{},[1445,100560],{"alt":18,"src":100561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[14,100563,100564],{},"引入图像模块非常重要",[87,100566,100568],{"className":30357,"code":100567,"language":30359,"meta":18,"style":18},"from matplotlib import pyplot as plt\n",[93,100569,100570],{"__ignoreMap":18},[96,100571,100572,100574,100577,100579,100582,100584],{"class":98,"line":99},[96,100573,30716],{"class":102},[96,100575,100576],{"class":106}," matplotlib ",[96,100578,30371],{"class":102},[96,100580,100581],{"class":106}," pyplot ",[96,100583,31362],{"class":102},[96,100585,31416],{"class":106},[5110,100587,100588],{},"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":18,"searchDepth":19,"depth":19,"links":100590},[100591,100592,100593,100594,100595,100596,100597],{"id":100139,"depth":19,"text":100140},{"id":100254,"depth":19,"text":100255},{"id":100461,"depth":19,"text":100462},{"id":100470,"depth":19,"text":100471},{"id":100513,"depth":19,"text":100514},{"id":100534,"depth":19,"text":100535},{"id":100555,"depth":19,"text":100556},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100103,"description":23361},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100604,"title":100605,"body":100606,"description":23361,"extension":21,"meta":100610,"navigation":23,"path":100611,"seo":100612,"stem":100613,"__hash__":100614},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100607,"toc":100608},[],{"title":18,"searchDepth":19,"depth":19,"links":100609},[],{"category":50399},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100605,"description":23361},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100616,"title":100617,"body":100618,"description":18,"extension":21,"meta":102626,"navigation":23,"path":102627,"seo":102628,"stem":102629,"__hash__":102630},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100619,"toc":102602},[100620,100623,100627,100630,100633,100639,100642,100665,100668,100702,100705,100746,100750,100753,100846,100849,100893,100896,100913,100916,100930,100933,100936,100981,100984,101021,101025,101028,101034,101039,101059,101063,101066,101132,101135,101153,101157,101160,101189,101199,101205,101209,101212,101218,101229,101233,101236,101266,101269,101549,101552,101555,101566,101569,101572,101594,101601,101604,101622,101625,101628,101642,101650,101653,101679,101685,101688,101691,101701,101713,101733,101742,101762,101772,101796,101809,101823,101828,101869,101886,101911,101923,101943,101949,101994,102013,102030,102043,102059,102066,102078,102087,102122,102143,102168,102181,102205,102220,102245,102248,102269,102278,102281,102292,102296,102299,102305,102317,102324,102328,102331,102343,102346,102360,102363,102373,102383,102386,102426,102429,102433,102439,102442,102456,102460,102463,102496,102500,102503,102526,102534,102537,102543,102549,102552,102555,102583,102587,102590,102596,102599],[10,100621,100617],{"id":100622},"_1环境安装与第一个-mujoco-程序",[38,100624,100626],{"id":100625},"_1目标说明","1.目标说明",[14,100628,100629],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[14,100631,100632],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[87,100634,100637],{"className":100635,"code":100636,"language":5171,"meta":18},[5169],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[93,100638,100636],{"__ignoreMap":18},[14,100640,100641],{},"需要掌握:",[50,100643,100644,100647,100650,100655,100660],{},[53,100645,100646],{},"Fedora 44 下 MuJoCo 的系统依赖",[53,100648,100649],{},"Python 虚拟环境创建",[53,100651,100652],{},[93,100653,100654],{},"mujoco.MjModel",[53,100656,100657],{},[93,100658,100659],{},"mujoco.MjData",[53,100661,100662],{},[93,100663,100664],{},"mujoco.mj_step(model, data)",[14,100666,100667],{},"MuJoCo 中最重要的两个对象:",[244,100669,100670,100680],{},[247,100671,100672],{},[250,100673,100674,100677],{},[253,100675,100676],{"align":23721},"对象",[253,100678,100679],{"align":23721},"含义",[291,100681,100682,100692],{},[250,100683,100684,100689],{},[296,100685,100686],{"align":23721},[93,100687,100688],{},"MjModel",[296,100690,100691],{"align":23721},"模型结构，来自 XML，基本不随时间变化",[250,100693,100694,100699],{},[296,100695,100696],{"align":23721},[93,100697,100698],{},"MjData",[296,100700,100701],{"align":23721},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[14,100703,100704],{},"可以先用一个类比理解：",[244,100706,100707,100717],{},[247,100708,100709],{},[250,100710,100711,100714],{},[253,100712,100713],{"align":23721},"类比",[253,100715,100716],{"align":23721},"MuJoCo 对象",[291,100718,100719,100728,100737],{},[250,100720,100721,100724],{},[296,100722,100723],{"align":23721},"游戏地图和角色配置",[296,100725,100726],{"align":23721},[93,100727,100688],{},[250,100729,100730,100733],{},[296,100731,100732],{"align":23721},"游戏运行到当前帧的状态",[296,100734,100735],{"align":23721},[93,100736,100698],{},[250,100738,100739,100742],{},[296,100740,100741],{"align":23721},"前进一帧",[296,100743,100744],{"align":23721},[93,100745,100664],{},[38,100747,100749],{"id":100748},"_2环境与依赖安装","2.环境与依赖安装",[14,100751,100752],{},"Fedora 44 系统依赖:",[87,100754,100756],{"className":23807,"code":100755,"language":23809,"meta":18,"style":18},"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",[93,100757,100758,100770,100783,100796,100806,100816,100835],{"__ignoreMap":18},[96,100759,100760,100762,100764,100766,100768],{"class":98,"line":99},[96,100761,24555],{"class":1946},[96,100763,26294],{"class":211},[96,100765,23819],{"class":211},[96,100767,26379],{"class":155},[96,100769,24657],{"class":155},[96,100771,100772,100775,100778,100781],{"class":98,"line":19},[96,100773,100774],{"class":211},"  python3",[96,100776,100777],{"class":211}," python3-pip",[96,100779,100780],{"class":211}," python3-virtualenv",[96,100782,24657],{"class":155},[96,100784,100785,100788,100791,100794],{"class":98,"line":1162},[96,100786,100787],{"class":211},"  mesa-libGL",[96,100789,100790],{"class":211}," mesa-libGLU",[96,100792,100793],{"class":211}," mesa-dri-drivers",[96,100795,24657],{"class":155},[96,100797,100798,100801,100804],{"class":98,"line":1177},[96,100799,100800],{"class":211},"  libglvnd-glx",[96,100802,100803],{"class":211}," libglvnd-opengl",[96,100805,24657],{"class":155},[96,100807,100808,100811,100814],{"class":98,"line":1183},[96,100809,100810],{"class":211},"  glfw",[96,100812,100813],{"class":211}," glfw-devel",[96,100815,24657],{"class":155},[96,100817,100818,100821,100824,100827,100830,100833],{"class":98,"line":1197},[96,100819,100820],{"class":211},"  libX11",[96,100822,100823],{"class":211}," libXcursor",[96,100825,100826],{"class":211}," libXi",[96,100828,100829],{"class":211}," libXinerama",[96,100831,100832],{"class":211}," libXrandr",[96,100834,24657],{"class":155},[96,100836,100837,100840,100843],{"class":98,"line":1203},[96,100838,100839],{"class":211},"  gcc",[96,100841,100842],{"class":211}," gcc-c++",[96,100844,100845],{"class":211}," make\n",[14,100847,100848],{},"创建 Python 环境:",[87,100850,100852],{"className":23807,"code":100851,"language":23809,"meta":18,"style":18},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[93,100853,100854,100868,100876],{"__ignoreMap":18},[96,100855,100856,100859,100862,100865],{"class":98,"line":99},[96,100857,100858],{"class":1946},"python3",[96,100860,100861],{"class":155}," -m",[96,100863,100864],{"class":211}," venv",[96,100866,100867],{"class":211}," .venv\n",[96,100869,100870,100873],{"class":98,"line":19},[96,100871,100872],{"class":155},"source",[96,100874,100875],{"class":211}," .venv\u002Fbin\u002Factivate\n",[96,100877,100878,100880,100882,100885,100887,100890],{"class":98,"line":1162},[96,100879,30359],{"class":1946},[96,100881,100861],{"class":155},[96,100883,100884],{"class":211}," pip",[96,100886,23819],{"class":211},[96,100888,100889],{"class":155}," --upgrade",[96,100891,100892],{"class":211}," pip\n",[14,100894,100895],{},"pip 安装:",[87,100897,100899],{"className":23807,"code":100898,"language":23809,"meta":18,"style":18},"pip install \"mujoco>=2.3\" numpy\n",[93,100900,100901],{"__ignoreMap":18},[96,100902,100903,100905,100907,100910],{"class":98,"line":99},[96,100904,23816],{"class":1946},[96,100906,23819],{"class":211},[96,100908,100909],{"class":211}," \"mujoco>=2.3\"",[96,100911,100912],{"class":211}," numpy\n",[14,100914,100915],{},"安装完成后，先做最小检查：",[87,100917,100919],{"className":23807,"code":100918,"language":23809,"meta":18,"style":18},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[93,100920,100921],{"__ignoreMap":18},[96,100922,100923,100925,100927],{"class":98,"line":99},[96,100924,30359],{"class":1946},[96,100926,30337],{"class":155},[96,100928,100929],{"class":211}," \"import mujoco; print(mujoco.__version__)\"\n",[14,100931,100932],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[14,100934,100935],{},"conda 安装:",[87,100937,100939],{"className":23807,"code":100938,"language":23809,"meta":18,"style":18},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[93,100940,100941,100961,100971],{"__ignoreMap":18},[96,100942,100943,100945,100947,100949,100952,100955,100958],{"class":98,"line":99},[96,100944,30309],{"class":1946},[96,100946,29155],{"class":211},[96,100948,25094],{"class":155},[96,100950,100951],{"class":211}," mujoco-study",[96,100953,100954],{"class":211}," python=",[96,100956,100957],{"class":155},"3.10",[96,100959,100960],{"class":155}," -y\n",[96,100962,100963,100965,100968],{"class":98,"line":19},[96,100964,30309],{"class":1946},[96,100966,100967],{"class":211}," activate",[96,100969,100970],{"class":211}," mujoco-study\n",[96,100972,100973,100975,100977,100979],{"class":98,"line":1162},[96,100974,23816],{"class":1946},[96,100976,23819],{"class":211},[96,100978,100909],{"class":211},[96,100980,100912],{"class":211},[14,100982,100983],{},"版本冲突说明:",[50,100985,100986,100992,101002,101011],{},[53,100987,100988,100989,28364],{},"不要安装 ",[93,100990,100991],{},"mujoco-py",[53,100993,100994,100995,100997,100998,101001],{},"如果旧项目里同时安装了 ",[93,100996,100991],{}," 和 ",[93,100999,101000],{},"mujoco","，建议新建干净虚拟环境。",[53,101003,101004,101007,101008,28364],{},[93,101005,101006],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[93,101009,101010],{},"~\u002F.mujoco\u002Fmujoco210",[53,101012,101013,101014,82518,101017,101020],{},"离屏渲染可能涉及 OpenGL 后端，",[93,101015,101016],{},"MUJOCO_GL=egl",[93,101018,101019],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[38,101022,101024],{"id":101023},"_3核心概念解释","3.核心概念解释",[14,101026,101027],{},"MuJoCo 的基本执行流程:",[87,101029,101032],{"className":101030,"code":101031,"language":5171,"meta":18},[5169],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[93,101033,101031],{"__ignoreMap":18},[14,101035,101036,101038],{},[93,101037,100688],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[14,101040,101041,101043,101044,319,101047,319,101050,319,101053,319,101056,28364],{},[93,101042,100698],{}," 存放仿真运行时状态，例如 ",[93,101045,101046],{},"data.time",[93,101048,101049],{},"data.qpos",[93,101051,101052],{},"data.qvel",[93,101054,101055],{},"data.ctrl",[93,101057,101058],{},"data.xpos",[67,101060,101062],{"id":101061},"xml-是什么","XML 是什么",[14,101064,101065],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[87,101067,101069],{"className":53046,"code":101068,"language":53048,"meta":18,"style":18},"\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",[93,101070,101071,101093,101124],{"__ignoreMap":18},[96,101072,101073,101075,101077,101079,101081,101083,101086,101088,101091],{"class":98,"line":99},[96,101074,1017],{"class":106},[96,101076,51779],{"class":51279},[96,101078,14904],{"class":1946},[96,101080,152],{"class":106},[96,101082,53470],{"class":211},[96,101084,101085],{"class":1946}," pos",[96,101087,152],{"class":106},[96,101089,101090],{"class":211},"\"0 0 1\"",[96,101092,51286],{"class":106},[96,101094,101095,101097,101100,101102,101104,101107,101109,101111,101113,101116,101118,101121],{"class":98,"line":19},[96,101096,52123],{"class":106},[96,101098,101099],{"class":51279},"geom",[96,101101,14904],{"class":1946},[96,101103,152],{"class":106},[96,101105,101106],{"class":211},"\"box_geom\"",[96,101108,53803],{"class":1946},[96,101110,152],{"class":106},[96,101112,53470],{"class":211},[96,101114,101115],{"class":1946}," size",[96,101117,152],{"class":106},[96,101119,101120],{"class":211},"\"0.1 0.1 0.1\"",[96,101122,101123],{"class":106},"\u002F>\n",[96,101125,101126,101128,101130],{"class":98,"line":1162},[96,101127,51764],{"class":106},[96,101129,51779],{"class":51279},[96,101131,51286],{"class":106},[14,101133,101134],{},"这段意思是：",[50,101136,101137,101143,101150],{},[53,101138,101139,101140,101142],{},"创建一个叫 ",[93,101141,53693],{}," 的刚体。",[53,101144,101145,101146,101149],{},"它初始放在 ",[93,101147,101148],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[53,101151,101152],{},"它里面有一个盒子形状的几何体。",[67,101154,101156],{"id":101155},"timestep-是什么","timestep 是什么",[14,101158,101159],{},"XML 里的：",[87,101161,101163],{"className":53046,"code":101162,"language":53048,"meta":18,"style":18},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[93,101164,101165],{"__ignoreMap":18},[96,101166,101167,101169,101171,101174,101176,101179,101182,101184,101187],{"class":98,"line":99},[96,101168,1017],{"class":106},[96,101170,69145],{"class":51279},[96,101172,101173],{"class":1946}," timestep",[96,101175,152],{"class":106},[96,101177,101178],{"class":211},"\"0.01\"",[96,101180,101181],{"class":1946}," gravity",[96,101183,152],{"class":106},[96,101185,101186],{"class":211},"\"0 0 -9.81\"",[96,101188,101123],{"class":106},[14,101190,101191,101192,101195,101196,101198],{},"表示每调用一次 ",[93,101193,101194],{},"mj_step","，仿真时间前进 ",[93,101197,38965],{}," 秒。循环 100 次，大约就是 1 秒：",[87,101200,101203],{"className":101201,"code":101202,"language":5171,"meta":18},[5169],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[93,101204,101202],{"__ignoreMap":18},[67,101206,101208],{"id":101207},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[14,101210,101211],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[87,101213,101216],{"className":101214,"code":101215,"language":5171,"meta":18},[5169],"x y z qw qx qy qz\n",[93,101217,101215],{"__ignoreMap":18},[14,101219,101220,101221,101224,101225,101228],{},"表示一个自由刚体的位置和姿态。其中 ",[93,101222,101223],{},"x y z"," 是位置，",[93,101226,101227],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[38,101230,101232],{"id":101231},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[14,101234,101235],{},"新建文件:",[87,101237,101239],{"className":23807,"code":101238,"language":23809,"meta":18,"style":18},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[93,101240,101241,101251,101258],{"__ignoreMap":18},[96,101242,101243,101246,101248],{"class":98,"line":99},[96,101244,101245],{"class":1946},"mkdir",[96,101247,29195],{"class":155},[96,101249,101250],{"class":211}," mujoco_tutorial\n",[96,101252,101253,101256],{"class":98,"line":19},[96,101254,101255],{"class":155},"cd",[96,101257,101250],{"class":211},[96,101259,101260,101263],{"class":98,"line":1162},[96,101261,101262],{"class":1946},"touch",[96,101264,101265],{"class":211}," ch1_first_sim.py\n",[14,101267,101268],{},"写入:",[87,101270,101272],{"className":30357,"code":101271,"language":30359,"meta":18,"style":18},"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",[93,101273,101274,101281,101285,101289,101299,101304,101309,101313,101318,101323,101327,101332,101337,101342,101347,101352,101357,101361,101365,101369,101382,101396,101406,101410,101422,101434,101446,101458,101470,101474,101491,101496,101500,101511,101522,101526,101530,101544],{"__ignoreMap":18},[96,101275,101276,101278],{"class":98,"line":99},[96,101277,30371],{"class":102},[96,101279,101280],{"class":106}," mujoco\n",[96,101282,101283],{"class":98,"line":19},[96,101284,2383],{"emptyLinePlaceholder":23},[96,101286,101287],{"class":98,"line":1162},[96,101288,2383],{"emptyLinePlaceholder":23},[96,101290,101291,101294,101296],{"class":98,"line":1177},[96,101292,101293],{"class":155},"XML",[96,101295,13548],{"class":102},[96,101297,101298],{"class":211}," \"\"\"\n",[96,101300,101301],{"class":98,"line":1183},[96,101302,101303],{"class":211},"\u003Cmujoco model=\"first_sim\">\n",[96,101305,101306],{"class":98,"line":1197},[96,101307,101308],{"class":211},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[96,101310,101311],{"class":98,"line":1203},[96,101312,2383],{"emptyLinePlaceholder":23},[96,101314,101315],{"class":98,"line":1294},[96,101316,101317],{"class":211},"  \u003Cworldbody>\n",[96,101319,101320],{"class":98,"line":1300},[96,101321,101322],{"class":211},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[96,101324,101325],{"class":98,"line":1312},[96,101326,2383],{"emptyLinePlaceholder":23},[96,101328,101329],{"class":98,"line":1595},[96,101330,101331],{"class":211},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[96,101333,101334],{"class":98,"line":1600},[96,101335,101336],{"class":211},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[96,101338,101339],{"class":98,"line":1606},[96,101340,101341],{"class":211},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[96,101343,101344],{"class":98,"line":1611},[96,101345,101346],{"class":211},"    \u003C\u002Fbody>\n",[96,101348,101349],{"class":98,"line":1625},[96,101350,101351],{"class":211},"  \u003C\u002Fworldbody>\n",[96,101353,101354],{"class":98,"line":1630},[96,101355,101356],{"class":211},"\u003C\u002Fmujoco>\n",[96,101358,101359],{"class":98,"line":1636},[96,101360,95677],{"class":211},[96,101362,101363],{"class":98,"line":1657},[96,101364,2383],{"emptyLinePlaceholder":23},[96,101366,101367],{"class":98,"line":1662},[96,101368,2383],{"emptyLinePlaceholder":23},[96,101370,101371,101373,101375,101378,101380],{"class":98,"line":1676},[96,101372,31926],{"class":102},[96,101374,1956],{"class":1946},[96,101376,101377],{"class":106},"() -> ",[96,101379,95665],{"class":155},[96,101381,3722],{"class":106},[96,101383,101384,101387,101389,101392,101394],{"class":98,"line":1681},[96,101385,101386],{"class":106},"    model ",[96,101388,152],{"class":102},[96,101390,101391],{"class":106}," mujoco.MjModel.from_xml_string(",[96,101393,101293],{"class":155},[96,101395,113],{"class":106},[96,101397,101398,101401,101403],{"class":98,"line":1710},[96,101399,101400],{"class":106},"    data ",[96,101402,152],{"class":102},[96,101404,101405],{"class":106}," mujoco.MjData(model)\n",[96,101407,101408],{"class":98,"line":1715},[96,101409,2383],{"emptyLinePlaceholder":23},[96,101411,101412,101414,101416,101419],{"class":98,"line":1732},[96,101413,31278],{"class":155},[96,101415,107],{"class":106},[96,101417,101418],{"class":211},"\"nq:\"",[96,101420,101421],{"class":106},", model.nq)\n",[96,101423,101424,101426,101428,101431],{"class":98,"line":1737},[96,101425,31278],{"class":155},[96,101427,107],{"class":106},[96,101429,101430],{"class":211},"\"nv:\"",[96,101432,101433],{"class":106},", model.nv)\n",[96,101435,101436,101438,101440,101443],{"class":98,"line":1742},[96,101437,31278],{"class":155},[96,101439,107],{"class":106},[96,101441,101442],{"class":211},"\"nu:\"",[96,101444,101445],{"class":106},", model.nu)\n",[96,101447,101448,101450,101452,101455],{"class":98,"line":1747},[96,101449,31278],{"class":155},[96,101451,107],{"class":106},[96,101453,101454],{"class":211},"\"initial time:\"",[96,101456,101457],{"class":106},", data.time)\n",[96,101459,101460,101462,101464,101467],{"class":98,"line":1761},[96,101461,31278],{"class":155},[96,101463,107],{"class":106},[96,101465,101466],{"class":211},"\"initial qpos:\"",[96,101468,101469],{"class":106},", data.qpos.copy())\n",[96,101471,101472],{"class":98,"line":1766},[96,101473,2383],{"emptyLinePlaceholder":23},[96,101475,101476,101478,101481,101483,101485,101487,101489],{"class":98,"line":2560},[96,101477,3184],{"class":102},[96,101479,101480],{"class":106}," _ ",[96,101482,26022],{"class":102},[96,101484,32422],{"class":155},[96,101486,107],{"class":106},[96,101488,418],{"class":155},[96,101490,30765],{"class":106},[96,101492,101493],{"class":98,"line":2574},[96,101494,101495],{"class":106},"        mujoco.mj_step(model, data)\n",[96,101497,101498],{"class":98,"line":2582},[96,101499,2383],{"emptyLinePlaceholder":23},[96,101501,101502,101504,101506,101509],{"class":98,"line":2587},[96,101503,31278],{"class":155},[96,101505,107],{"class":106},[96,101507,101508],{"class":211},"\"final time:\"",[96,101510,101457],{"class":106},[96,101512,101513,101515,101517,101520],{"class":98,"line":2593},[96,101514,31278],{"class":155},[96,101516,107],{"class":106},[96,101518,101519],{"class":211},"\"final qpos:\"",[96,101521,101469],{"class":106},[96,101523,101524],{"class":98,"line":2599},[96,101525,2383],{"emptyLinePlaceholder":23},[96,101527,101528],{"class":98,"line":2604},[96,101529,2383],{"emptyLinePlaceholder":23},[96,101531,101532,101534,101536,101539,101542],{"class":98,"line":7932},[96,101533,1514],{"class":102},[96,101535,31199],{"class":155},[96,101537,101538],{"class":102}," ==",[96,101540,101541],{"class":211}," \"__main__\"",[96,101543,3722],{"class":106},[96,101545,101546],{"class":98,"line":7956},[96,101547,101548],{"class":106},"    main()\n",[67,101550,101551],{"id":101551},"代码逐段解释",[14,101553,101554],{},"导入库：",[87,101556,101558],{"className":30357,"code":101557,"language":30359,"meta":18,"style":18},"import mujoco\n",[93,101559,101560],{"__ignoreMap":18},[96,101561,101562,101564],{"class":98,"line":99},[96,101563,30371],{"class":102},[96,101565,101280],{"class":106},[14,101567,101568],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[14,101570,101571],{},"定义 XML：",[87,101573,101575],{"className":30357,"code":101574,"language":30359,"meta":18,"style":18},"XML = \"\"\"\n...\n\"\"\"\n",[93,101576,101577,101585,101590],{"__ignoreMap":18},[96,101578,101579,101581,101583],{"class":98,"line":99},[96,101580,101293],{"class":155},[96,101582,13548],{"class":102},[96,101584,101298],{"class":211},[96,101586,101587],{"class":98,"line":19},[96,101588,101589],{"class":211},"...\n",[96,101591,101592],{"class":98,"line":1162},[96,101593,95677],{"class":211},[14,101595,101596,101597,101600],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[93,101598,101599],{},"freejoint"," 的方块。",[14,101602,101603],{},"编译模型：",[87,101605,101607],{"className":30357,"code":101606,"language":30359,"meta":18,"style":18},"model = mujoco.MjModel.from_xml_string(XML)\n",[93,101608,101609],{"__ignoreMap":18},[96,101610,101611,101614,101616,101618,101620],{"class":98,"line":99},[96,101612,101613],{"class":106},"model ",[96,101615,152],{"class":102},[96,101617,101391],{"class":106},[96,101619,101293],{"class":155},[96,101621,113],{"class":106},[14,101623,101624],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[14,101626,101627],{},"创建数据：",[87,101629,101631],{"className":30357,"code":101630,"language":30359,"meta":18,"style":18},"data = mujoco.MjData(model)\n",[93,101632,101633],{"__ignoreMap":18},[96,101634,101635,101638,101640],{"class":98,"line":99},[96,101636,101637],{"class":106},"data ",[96,101639,152],{"class":102},[96,101641,101405],{"class":106},[14,101643,101644,101646,101647,101649],{},[93,101645,33380],{}," 会保存仿真当前状态。刚创建时，时间是 ",[93,101648,298],{},"，方块还在初始位置。",[14,101651,101652],{},"推进仿真：",[87,101654,101656],{"className":30357,"code":101655,"language":30359,"meta":18,"style":18},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[93,101657,101658,101674],{"__ignoreMap":18},[96,101659,101660,101662,101664,101666,101668,101670,101672],{"class":98,"line":99},[96,101661,3008],{"class":102},[96,101663,101480],{"class":106},[96,101665,26022],{"class":102},[96,101667,32422],{"class":155},[96,101669,107],{"class":106},[96,101671,418],{"class":155},[96,101673,30765],{"class":106},[96,101675,101676],{"class":98,"line":19},[96,101677,101678],{"class":106},"    mujoco.mj_step(model, data)\n",[14,101680,101681,101682,101684],{},"每次 ",[93,101683,101194],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[67,101686,101687],{"id":101687},"代码逐行细讲",[14,101689,101690],{},"下面把完整代码按新手视角拆开讲。",[87,101692,101693],{"className":30357,"code":101557,"language":30359,"meta":18,"style":18},[93,101694,101695],{"__ignoreMap":18},[96,101696,101697,101699],{"class":98,"line":99},[96,101698,30371],{"class":102},[96,101700,101280],{"class":106},[14,101702,101703,101705,101706,319,101708,319,101710,28364],{},[93,101704,30371],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[93,101707,100654],{},[93,101709,100659],{},[93,101711,101712],{},"mujoco.mj_step",[87,101714,101715],{"className":30357,"code":101574,"language":30359,"meta":18,"style":18},[93,101716,101717,101725,101729],{"__ignoreMap":18},[96,101718,101719,101721,101723],{"class":98,"line":99},[96,101720,101293],{"class":155},[96,101722,13548],{"class":102},[96,101724,101298],{"class":211},[96,101726,101727],{"class":98,"line":19},[96,101728,101589],{"class":211},[96,101730,101731],{"class":98,"line":1162},[96,101732,95677],{"class":211},[14,101734,101735,101737,101738,101741],{},[93,101736,101293],{}," 是一个变量名。右边的三引号 ",[93,101739,101740],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[87,101743,101744],{"className":53046,"code":101303,"language":53048,"meta":18,"style":18},[93,101745,101746],{"__ignoreMap":18},[96,101747,101748,101750,101752,101755,101757,101760],{"class":98,"line":99},[96,101749,1017],{"class":106},[96,101751,101000],{"class":51279},[96,101753,101754],{"class":1946}," model",[96,101756,152],{"class":106},[96,101758,101759],{"class":211},"\"first_sim\"",[96,101761,51286],{"class":106},[14,101763,101764,101765,101768,101769,28364],{},"这是 XML 的根标签。",[93,101766,101767],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[93,101770,101771],{},"first_sim",[87,101773,101774],{"className":53046,"code":101162,"language":53048,"meta":18,"style":18},[93,101775,101776],{"__ignoreMap":18},[96,101777,101778,101780,101782,101784,101786,101788,101790,101792,101794],{"class":98,"line":99},[96,101779,1017],{"class":106},[96,101781,69145],{"class":51279},[96,101783,101173],{"class":1946},[96,101785,152],{"class":106},[96,101787,101178],{"class":211},[96,101789,101181],{"class":1946},[96,101791,152],{"class":106},[96,101793,101186],{"class":211},[96,101795,101123],{"class":106},[14,101797,101798,101800,101801,101804,101805,101808],{},[93,101799,69145],{}," 用来设置仿真参数。",[93,101802,101803],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[93,101806,101807],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[87,101810,101812],{"className":53046,"code":101811,"language":53048,"meta":18,"style":18},"\u003Cworldbody>\n",[93,101813,101814],{"__ignoreMap":18},[96,101815,101816,101818,101821],{"class":98,"line":99},[96,101817,1017],{"class":106},[96,101819,101820],{"class":51279},"worldbody",[96,101822,51286],{"class":106},[14,101824,101825,101827],{},[93,101826,101820],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[87,101829,101831],{"className":53046,"code":101830,"language":53048,"meta":18,"style":18},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[93,101832,101833],{"__ignoreMap":18},[96,101834,101835,101837,101839,101841,101843,101846,101848,101850,101853,101855,101857,101860,101862,101864,101867],{"class":98,"line":99},[96,101836,1017],{"class":106},[96,101838,101099],{"class":51279},[96,101840,14904],{"class":1946},[96,101842,152],{"class":106},[96,101844,101845],{"class":211},"\"floor\"",[96,101847,53803],{"class":1946},[96,101849,152],{"class":106},[96,101851,101852],{"class":211},"\"plane\"",[96,101854,101115],{"class":1946},[96,101856,152],{"class":106},[96,101858,101859],{"class":211},"\"2 2 0.1\"",[96,101861,78746],{"class":1946},[96,101863,152],{"class":106},[96,101865,101866],{"class":211},"\"0.8 0.8 0.8 1\"",[96,101868,101123],{"class":106},[14,101870,101871,101872,101874,101875,101878,101879,101882,101883,101885],{},"这行创建地面。",[93,101873,101099],{}," 是几何体。",[93,101876,101877],{},"name=\"floor\""," 是名字。",[93,101880,101881],{},"type=\"plane\""," 表示平面。",[93,101884,55089],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[87,101887,101889],{"className":53046,"code":101888,"language":53048,"meta":18,"style":18},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[93,101890,101891],{"__ignoreMap":18},[96,101892,101893,101895,101897,101899,101901,101903,101905,101907,101909],{"class":98,"line":99},[96,101894,1017],{"class":106},[96,101896,51779],{"class":51279},[96,101898,14904],{"class":1946},[96,101900,152],{"class":106},[96,101902,53470],{"class":211},[96,101904,101085],{"class":1946},[96,101906,152],{"class":106},[96,101908,101090],{"class":211},[96,101910,51286],{"class":106},[14,101912,101913,101914,28364,101916,101919,101920,101922],{},"这行创建一个刚体，名字叫 ",[93,101915,53693],{},[93,101917,101918],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[93,101921,101148],{},"，也就是离地面 1 米高。",[87,101924,101926],{"className":53046,"code":101925,"language":53048,"meta":18,"style":18},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[93,101927,101928],{"__ignoreMap":18},[96,101929,101930,101932,101934,101936,101938,101941],{"class":98,"line":99},[96,101931,1017],{"class":106},[96,101933,101599],{"class":51279},[96,101935,14904],{"class":1946},[96,101937,152],{"class":106},[96,101939,101940],{"class":211},"\"box_free\"",[96,101942,101123],{"class":106},[14,101944,101945,101946,101948],{},"这行很重要。",[93,101947,101599],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[87,101950,101952],{"className":53046,"code":101951,"language":53048,"meta":18,"style":18},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[93,101953,101954],{"__ignoreMap":18},[96,101955,101956,101958,101960,101962,101964,101966,101968,101970,101972,101974,101976,101978,101981,101983,101985,101987,101989,101992],{"class":98,"line":99},[96,101957,1017],{"class":106},[96,101959,101099],{"class":51279},[96,101961,14904],{"class":1946},[96,101963,152],{"class":106},[96,101965,101106],{"class":211},[96,101967,53803],{"class":1946},[96,101969,152],{"class":106},[96,101971,53470],{"class":211},[96,101973,101115],{"class":1946},[96,101975,152],{"class":106},[96,101977,101120],{"class":211},[96,101979,101980],{"class":1946}," mass",[96,101982,152],{"class":106},[96,101984,3661],{"class":211},[96,101986,78746],{"class":1946},[96,101988,152],{"class":106},[96,101990,101991],{"class":211},"\"1 0 0 1\"",[96,101993,101123],{"class":106},[14,101995,101996,101997,102000,102001,102004,102005,102008,102009,102012],{},"这行给 box body 添加一个盒子形状。",[93,101998,101999],{},"type=\"box\""," 表示形状是盒子。",[93,102002,102003],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[93,102006,102007],{},"mass=\"1\""," 表示质量是 1。",[93,102010,102011],{},"rgba=\"1 0 0 1\""," 表示红色。",[87,102014,102016],{"className":30357,"code":102015,"language":30359,"meta":18,"style":18},"def main() -> None:\n",[93,102017,102018],{"__ignoreMap":18},[96,102019,102020,102022,102024,102026,102028],{"class":98,"line":99},[96,102021,31926],{"class":102},[96,102023,1956],{"class":1946},[96,102025,101377],{"class":106},[96,102027,95665],{"class":155},[96,102029,3722],{"class":106},[14,102031,102032,102034,102035,102038,102039,102042],{},[93,102033,31926],{}," 用来定义函数。这里定义了一个叫 ",[93,102036,102037],{},"main"," 的函数。",[93,102040,102041],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[87,102044,102045],{"className":30357,"code":101606,"language":30359,"meta":18,"style":18},[93,102046,102047],{"__ignoreMap":18},[96,102048,102049,102051,102053,102055,102057],{"class":98,"line":99},[96,102050,101613],{"class":106},[96,102052,152],{"class":102},[96,102054,101391],{"class":106},[96,102056,101293],{"class":155},[96,102058,113],{"class":106},[14,102060,102061,102062,102065],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[93,102063,102064],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[87,102067,102068],{"className":30357,"code":101630,"language":30359,"meta":18,"style":18},[93,102069,102070],{"__ignoreMap":18},[96,102071,102072,102074,102076],{"class":98,"line":99},[96,102073,101637],{"class":106},[96,102075,152],{"class":102},[96,102077,101405],{"class":106},[14,102079,102080,102081,102083,102084,102086],{},"这行创建仿真数据。",[93,102082,33380],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[93,102085,33380],{}," 都会变化。",[87,102088,102090],{"className":30357,"code":102089,"language":30359,"meta":18,"style":18},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[93,102091,102092,102102,102112],{"__ignoreMap":18},[96,102093,102094,102096,102098,102100],{"class":98,"line":99},[96,102095,30394],{"class":155},[96,102097,107],{"class":106},[96,102099,101418],{"class":211},[96,102101,101421],{"class":106},[96,102103,102104,102106,102108,102110],{"class":98,"line":19},[96,102105,30394],{"class":155},[96,102107,107],{"class":106},[96,102109,101430],{"class":211},[96,102111,101433],{"class":106},[96,102113,102114,102116,102118,102120],{"class":98,"line":1162},[96,102115,30394],{"class":155},[96,102117,107],{"class":106},[96,102119,101442],{"class":211},[96,102121,101445],{"class":106},[14,102123,102124,102126,102127,102130,102131,102134,102135,102138,102139,102142],{},[93,102125,30394],{}," 用来输出信息。",[93,102128,102129],{},"model.nq"," 是位置变量数量，",[93,102132,102133],{},"model.nv"," 是速度变量数量，",[93,102136,102137],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[93,102140,102141],{},"nu"," 是 0。",[87,102144,102146],{"className":30357,"code":102145,"language":30359,"meta":18,"style":18},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[93,102147,102148,102158],{"__ignoreMap":18},[96,102149,102150,102152,102154,102156],{"class":98,"line":99},[96,102151,30394],{"class":155},[96,102153,107],{"class":106},[96,102155,101454],{"class":211},[96,102157,101457],{"class":106},[96,102159,102160,102162,102164,102166],{"class":98,"line":19},[96,102161,30394],{"class":155},[96,102163,107],{"class":106},[96,102165,101466],{"class":211},[96,102167,101469],{"class":106},[14,102169,102170,102171,102173,102174,102176,102177,102180],{},"这里打印初始时间和初始位置。",[93,102172,101046],{}," 一开始是 0。",[93,102175,101049],{}," 是位置数组。",[93,102178,102179],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[87,102182,102183],{"className":30357,"code":101655,"language":30359,"meta":18,"style":18},[93,102184,102185,102201],{"__ignoreMap":18},[96,102186,102187,102189,102191,102193,102195,102197,102199],{"class":98,"line":99},[96,102188,3008],{"class":102},[96,102190,101480],{"class":106},[96,102192,26022],{"class":102},[96,102194,32422],{"class":155},[96,102196,107],{"class":106},[96,102198,418],{"class":155},[96,102200,30765],{"class":106},[96,102202,102203],{"class":98,"line":19},[96,102204,101678],{"class":106},[14,102206,102207,102209,102210,102213,102214,102216,102217,102219],{},[93,102208,3008],{}," 是循环。",[93,102211,102212],{},"range(100)"," 表示循环 100 次。",[93,102215,1099],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[93,102218,101194],{},"，仿真就前进一步。",[87,102221,102223],{"className":30357,"code":102222,"language":30359,"meta":18,"style":18},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[93,102224,102225,102235],{"__ignoreMap":18},[96,102226,102227,102229,102231,102233],{"class":98,"line":99},[96,102228,30394],{"class":155},[96,102230,107],{"class":106},[96,102232,101508],{"class":211},[96,102234,101457],{"class":106},[96,102236,102237,102239,102241,102243],{"class":98,"line":19},[96,102238,30394],{"class":155},[96,102240,107],{"class":106},[96,102242,101519],{"class":211},[96,102244,101469],{"class":106},[14,102246,102247],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[87,102249,102251],{"className":30357,"code":102250,"language":30359,"meta":18,"style":18},"if __name__ == \"__main__\":\n    main()\n",[93,102252,102253,102265],{"__ignoreMap":18},[96,102254,102255,102257,102259,102261,102263],{"class":98,"line":99},[96,102256,1514],{"class":102},[96,102258,31199],{"class":155},[96,102260,101538],{"class":102},[96,102262,101541],{"class":211},[96,102264,3722],{"class":106},[96,102266,102267],{"class":98,"line":19},[96,102268,101548],{"class":106},[14,102270,102271,102272,102275,102276,28364],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[93,102273,102274],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[93,102277,102274],{},[14,102279,102280],{},"运行:",[87,102282,102284],{"className":23807,"code":102283,"language":23809,"meta":18,"style":18},"python ch1_first_sim.py\n",[93,102285,102286],{"__ignoreMap":18},[96,102287,102288,102290],{"class":98,"line":99},[96,102289,30359],{"class":1946},[96,102291,101265],{"class":211},[38,102293,102295],{"id":102294},"_5运行结果说明","5.运行结果说明",[14,102297,102298],{},"你应该看到类似输出:",[87,102300,102303],{"className":102301,"code":102302,"language":5171,"meta":18},[5169],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[93,102304,102302],{"__ignoreMap":18},[14,102306,102307,102309,102310,102313,102314,28364],{},[93,102308,101599],{}," 有 7 个位置变量: ",[93,102311,102312],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[93,102315,102316],{},"vx vy vz wx wy wz",[14,102318,102319,102320,102323],{},"你还会看到 ",[93,102321,102322],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[38,102325,102327],{"id":102326},"_6验证步骤","6.验证步骤",[14,102329,102330],{},"确认版本:",[87,102332,102333],{"className":23807,"code":100918,"language":23809,"meta":18,"style":18},[93,102334,102335],{"__ignoreMap":18},[96,102336,102337,102339,102341],{"class":98,"line":99},[96,102338,30359],{"class":1946},[96,102340,30337],{"class":155},[96,102342,100929],{"class":211},[14,102344,102345],{},"确认导入的是官方 bindings:",[87,102347,102349],{"className":23807,"code":102348,"language":23809,"meta":18,"style":18},"python -c \"import mujoco; print(mujoco)\"\n",[93,102350,102351],{"__ignoreMap":18},[96,102352,102353,102355,102357],{"class":98,"line":99},[96,102354,30359],{"class":1946},[96,102356,30337],{"class":155},[96,102358,102359],{"class":211}," \"import mujoco; print(mujoco)\"\n",[14,102361,102362],{},"运行程序:",[87,102364,102365],{"className":23807,"code":102283,"language":23809,"meta":18,"style":18},[93,102366,102367],{"__ignoreMap":18},[96,102368,102369,102371],{"class":98,"line":99},[96,102370,30359],{"class":1946},[96,102372,101265],{"class":211},[14,102374,102375,102376,102379,102380,28364],{},"检查 ",[93,102377,102378],{},"final time"," 是否约等于 ",[93,102381,102382],{},"1.0",[14,102384,102385],{},"再做几个小实验：",[50,102387,102388,102398,102406,102419],{},[53,102389,102390,102391,102393,102394,102397],{},"把 ",[93,102392,101918],{}," 改成 ",[93,102395,102396],{},"pos=\"0 0 2\"","，观察初始高度变化。",[53,102399,102390,102400,102393,102402,102405],{},[93,102401,101807],{},[93,102403,102404],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[53,102407,102390,102408,102393,102410,102413,102414,102416,102417,28364],{},[93,102409,101803],{},[93,102411,102412],{},"timestep=\"0.005\"","，观察 100 步后的 ",[93,102415,102378],{}," 是否变成约 ",[93,102418,35308],{},[53,102420,102421,102422,102425],{},"删除 ",[93,102423,102424],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[14,102427,102428],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[38,102430,102432],{"id":102431},"_7常见错误与解决方案","7.常见错误与解决方案",[67,102434,102436],{"id":102435},"modulenotfounderror-no-module-named-mujoco",[93,102437,102438],{},"ModuleNotFoundError: No module named 'mujoco'",[14,102440,102441],{},"解决:",[87,102443,102445],{"className":23807,"code":102444,"language":23809,"meta":18,"style":18},"pip install \"mujoco>=2.3\"\n",[93,102446,102447],{"__ignoreMap":18},[96,102448,102449,102451,102453],{"class":98,"line":99},[96,102450,23816],{"class":1946},[96,102452,23819],{"class":211},[96,102454,102455],{"class":211}," \"mujoco>=2.3\"\n",[67,102457,102459],{"id":102458},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[14,102461,102462],{},"先安装系统依赖:",[87,102464,102466],{"className":23807,"code":102465,"language":23809,"meta":18,"style":18},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[93,102467,102468],{"__ignoreMap":18},[96,102469,102470,102472,102474,102476,102478,102481,102483,102486,102488,102491,102493],{"class":98,"line":99},[96,102471,24555],{"class":1946},[96,102473,26294],{"class":211},[96,102475,23819],{"class":211},[96,102477,26379],{"class":155},[96,102479,102480],{"class":211}," mesa-libGL",[96,102482,100793],{"class":211},[96,102484,102485],{"class":211}," glfw",[96,102487,100813],{"class":211},[96,102489,102490],{"class":211}," libX11",[96,102492,100826],{"class":211},[96,102494,102495],{"class":211}," libXrandr\n",[67,102497,102499],{"id":102498},"xml-解析失败","XML 解析失败",[14,102501,102502],{},"检查:",[50,102504,102505,102508,102511,102517],{},[53,102506,102507],{},"标签是否闭合",[53,102509,102510],{},"属性是否带引号",[53,102512,102513,102514],{},"根节点是否是 ",[93,102515,102516],{},"\u003Cmujoco>",[53,102518,102519,102521,102522,102525],{},[93,102520,51779],{}," 是否放在 ",[93,102523,102524],{},"\u003Cworldbody>"," 内部",[67,102527,102529,102531,102532],{"id":102528},"final-time-不是严格等于-10",[93,102530,102378],{}," 不是严格等于 ",[93,102533,102382],{},[14,102535,102536],{},"这通常不是错误。浮点数计算可能得到：",[87,102538,102541],{"className":102539,"code":102540,"language":5171,"meta":18},[5169],"1.0000000000000007\n",[93,102542,102540],{"__ignoreMap":18},[14,102544,102545,102546,102548],{},"只要接近 ",[93,102547,102382],{}," 就正常。",[67,102550,102551],{"id":102551},"方块没有掉下来",[14,102553,102554],{},"检查：",[50,102556,102557,102563,102569,102574],{},[53,102558,102559,102560],{},"方块 body 里是否有 ",[93,102561,102562],{},"\u003Cfreejoint\u002F>",[53,102564,102565,102566],{},"重力是否是 ",[93,102567,102568],{},"0 0 -9.81",[53,102570,102571,102572],{},"是否真的调用了 ",[93,102573,100664],{},[53,102575,102576,102577,102579,102580],{},"你看的是否是 ",[93,102578,102322],{},"，不是 ",[93,102581,102582],{},"initial qpos",[38,102584,102586],{"id":102585},"_8本章小结","8.本章小结",[14,102588,102589],{},"本章你已经完成了 MuJoCo 的最小闭环：",[87,102591,102594],{"className":102592,"code":102593,"language":5171,"meta":18},[5169],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[93,102595,102593],{"__ignoreMap":18},[14,102597,102598],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[5110,102600,102601],{},"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":18,"searchDepth":19,"depth":19,"links":102603},[102604,102605,102606,102611,102615,102616,102617,102625],{"id":100625,"depth":19,"text":100626},{"id":100748,"depth":19,"text":100749},{"id":101023,"depth":19,"text":101024,"children":102607},[102608,102609,102610],{"id":101061,"depth":1162,"text":101062},{"id":101155,"depth":1162,"text":101156},{"id":101207,"depth":1162,"text":101208},{"id":101231,"depth":19,"text":101232,"children":102612},[102613,102614],{"id":101551,"depth":1162,"text":101551},{"id":101687,"depth":1162,"text":101687},{"id":102294,"depth":19,"text":102295},{"id":102326,"depth":19,"text":102327},{"id":102431,"depth":19,"text":102432,"children":102618},[102619,102620,102621,102622,102624],{"id":102435,"depth":1162,"text":102438},{"id":102458,"depth":1162,"text":102459},{"id":102498,"depth":1162,"text":102499},{"id":102528,"depth":1162,"text":102623},"final time 不是严格等于 1.0",{"id":102551,"depth":1162,"text":102551},{"id":102585,"depth":19,"text":102586},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100617,"description":18},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102632,"title":102633,"body":102634,"description":18,"extension":21,"meta":104290,"navigation":23,"path":104291,"seo":104292,"stem":104293,"__hash__":104294},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102635,"toc":104266},[102636,102639,102641,102644,102647,102664,102759,102762,102768,102770,102772,102796,102799,102813,102816,102857,102859,102872,102874,102877,102925,102937,102940,102943,102949,102962,103029,103032,103051,103054,103057,103063,103065,103074,103077,103081,103090,103172,103181,103185,103191,103205,103215,103217,103547,103550,103562,103564,103575,103577,103580,103598,103601,103604,103622,103633,103636,103651,103661,103663,103684,103701,103721,103727,103767,103783,103799,103805,103808,103832,103848,103853,103883,103900,103925,103928,103943,103952,103967,103976,103991,103998,104000,104010,104023,104030,104033,104072,104079,104081,104133,104135,104141,104144,104151,104158,104161,104163,104181,104184,104187,104221,104233,104235,104238,104260,104263],[10,102637,102633],{"id":102638},"_2xml-与-mjcf-物理建模基础",[38,102640,100626],{"id":100625},[14,102642,102643],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[14,102645,102646],{},"本章结束后，你应该能看懂一个简单模型里：",[50,102648,102649,102652,102655,102658,102661],{},[53,102650,102651],{},"地面在哪里。",[53,102653,102654],{},"物体初始位置在哪里。",[53,102656,102657],{},"几何体是什么形状。",[53,102659,102660],{},"哪些 body 可以自由运动。",[53,102662,102663],{},"如何用名字在 Python 里找到 XML 中的对象。",[244,102665,102666,102676],{},[247,102667,102668],{},[250,102669,102670,102673],{},[253,102671,102672],{"align":23721},"标签",[253,102674,102675],{"align":23721},"作用",[291,102677,102678,102687,102697,102706,102716,102726,102739,102749],{},[250,102679,102680,102684],{},[296,102681,102682],{"align":23721},[93,102683,102516],{},[296,102685,102686],{"align":23721},"根节点",[250,102688,102689,102694],{},[296,102690,102691],{"align":23721},[93,102692,102693],{},"\u003Coption>",[296,102695,102696],{"align":23721},"仿真参数",[250,102698,102699,102703],{},[296,102700,102701],{"align":23721},[93,102702,102524],{},[296,102704,102705],{"align":23721},"世界中的物体",[250,102707,102708,102713],{},[296,102709,102710],{"align":23721},[93,102711,102712],{},"\u003Cbody>",[296,102714,102715],{"align":23721},"刚体",[250,102717,102718,102723],{},[296,102719,102720],{"align":23721},[93,102721,102722],{},"\u003Cgeom>",[296,102724,102725],{"align":23721},"几何体、碰撞体、可视体",[250,102727,102728,102736],{},[296,102729,102730,24957,102733],{"align":23721},[93,102731,102732],{},"\u003Cjoint>",[93,102734,102735],{},"\u003Cfreejoint>",[296,102737,102738],{"align":23721},"关节",[250,102740,102741,102746],{},[296,102742,102743],{"align":23721},[93,102744,102745],{},"\u003Csite>",[296,102747,102748],{"align":23721},"标记点",[250,102750,102751,102756],{},[296,102752,102753],{"align":23721},[93,102754,102755],{},"\u003Cactuator>",[296,102757,102758],{"align":23721},"控制器",[14,102760,102761],{},"初学时可以先记住：",[87,102763,102766],{"className":102764,"code":102765,"language":5171,"meta":18},[5169],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[93,102767,102765],{"__ignoreMap":18},[38,102769,100749],{"id":100748},[14,102771,100752],{},[87,102773,102775],{"className":23807,"code":102774,"language":23809,"meta":18,"style":18},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[93,102776,102777],{"__ignoreMap":18},[96,102778,102779,102781,102783,102785,102787,102789,102791,102793],{"class":98,"line":99},[96,102780,24555],{"class":1946},[96,102782,26294],{"class":211},[96,102784,23819],{"class":211},[96,102786,26379],{"class":155},[96,102788,102480],{"class":211},[96,102790,100793],{"class":211},[96,102792,102485],{"class":211},[96,102794,102795],{"class":211}," glfw-devel\n",[14,102797,102798],{},"pip:",[87,102800,102801],{"className":23807,"code":100898,"language":23809,"meta":18,"style":18},[93,102802,102803],{"__ignoreMap":18},[96,102804,102805,102807,102809,102811],{"class":98,"line":99},[96,102806,23816],{"class":1946},[96,102808,23819],{"class":211},[96,102810,100909],{"class":211},[96,102812,100912],{"class":211},[14,102814,102815],{},"conda:",[87,102817,102819],{"className":23807,"code":102818,"language":23809,"meta":18,"style":18},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[93,102820,102821,102838,102847],{"__ignoreMap":18},[96,102822,102823,102825,102827,102829,102832,102834,102836],{"class":98,"line":99},[96,102824,30309],{"class":1946},[96,102826,29155],{"class":211},[96,102828,25094],{"class":155},[96,102830,102831],{"class":211}," mujoco-xml",[96,102833,100954],{"class":211},[96,102835,100957],{"class":155},[96,102837,100960],{"class":155},[96,102839,102840,102842,102844],{"class":98,"line":19},[96,102841,30309],{"class":1946},[96,102843,100967],{"class":211},[96,102845,102846],{"class":211}," mujoco-xml\n",[96,102848,102849,102851,102853,102855],{"class":98,"line":1162},[96,102850,23816],{"class":1946},[96,102852,23819],{"class":211},[96,102854,100909],{"class":211},[96,102856,100912],{"class":211},[14,102858,100983],{},[50,102860,102861,102864,102869],{},[53,102862,102863],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[53,102865,102866,102867,28364],{},"本章使用基础标签，适用于 ",[93,102868,101006],{},[53,102870,102871],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[38,102873,101024],{"id":101023},[14,102875,102876],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[87,102878,102880],{"className":53046,"code":102879,"language":53048,"meta":18,"style":18},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[93,102881,102882,102896,102904,102909,102917],{"__ignoreMap":18},[96,102883,102884,102886,102888,102890,102892,102894],{"class":98,"line":99},[96,102885,1017],{"class":106},[96,102887,101000],{"class":51279},[96,102889,101754],{"class":1946},[96,102891,152],{"class":106},[96,102893,62658],{"class":211},[96,102895,51286],{"class":106},[96,102897,102898,102900,102902],{"class":98,"line":19},[96,102899,52123],{"class":106},[96,102901,101820],{"class":51279},[96,102903,51286],{"class":106},[96,102905,102906],{"class":98,"line":1162},[96,102907,102908],{"class":106},"    ...\n",[96,102910,102911,102913,102915],{"class":98,"line":1177},[96,102912,52396],{"class":106},[96,102914,101820],{"class":51279},[96,102916,51286],{"class":106},[96,102918,102919,102921,102923],{"class":98,"line":1183},[96,102920,51764],{"class":106},[96,102922,101000],{"class":51279},[96,102924,51286],{"class":106},[14,102926,102927,102929,102930,102932,102933,102936],{},[93,102928,51779],{}," 表示刚体。",[93,102931,101099],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[93,102934,102935],{},"joint"," 表示刚体相对父刚体如何运动。",[67,102938,102939],{"id":102939},"层级结构非常重要",[14,102941,102942],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[87,102944,102947],{"className":102945,"code":102946,"language":5171,"meta":18},[5169],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[93,102948,102946],{"__ignoreMap":18},[14,102950,102951,100997,102954,102957,102958,102961],{},[93,102952,102953],{},"red_box_geom",[93,102955,102956],{},"box_center"," 都属于 ",[93,102959,102960],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[87,102963,102965],{"className":53046,"code":102964,"language":53048,"meta":18,"style":18},"\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",[93,102966,102967,102987,103001,103021],{"__ignoreMap":18},[96,102968,102969,102971,102973,102975,102977,102979,102981,102983,102985],{"class":98,"line":99},[96,102970,1017],{"class":106},[96,102972,51779],{"class":51279},[96,102974,14904],{"class":1946},[96,102976,152],{"class":106},[96,102978,53470],{"class":211},[96,102980,101085],{"class":1946},[96,102982,152],{"class":106},[96,102984,101090],{"class":211},[96,102986,51286],{"class":106},[96,102988,102989,102991,102993,102995,102997,102999],{"class":98,"line":19},[96,102990,52123],{"class":106},[96,102992,101599],{"class":51279},[96,102994,14904],{"class":1946},[96,102996,152],{"class":106},[96,102998,101940],{"class":211},[96,103000,101123],{"class":106},[96,103002,103003,103005,103007,103009,103011,103013,103015,103017,103019],{"class":98,"line":1162},[96,103004,52123],{"class":106},[96,103006,101099],{"class":51279},[96,103008,53803],{"class":1946},[96,103010,152],{"class":106},[96,103012,53470],{"class":211},[96,103014,101115],{"class":1946},[96,103016,152],{"class":106},[96,103018,101120],{"class":211},[96,103020,101123],{"class":106},[96,103022,103023,103025,103027],{"class":98,"line":1177},[96,103024,51764],{"class":106},[96,103026,51779],{"class":51279},[96,103028,51286],{"class":106},[14,103030,103031],{},"含义:",[50,103033,103034,103040,103045,103048],{},[53,103035,103036,103037,103039],{},"创建名为 ",[93,103038,53693],{}," 的刚体",[53,103041,103042,103043],{},"初始位置在世界坐标 ",[93,103044,101148],{},[53,103046,103047],{},"它有一个自由关节",[53,103049,103050],{},"它有一个盒子几何体",[67,103052,103053],{"id":103053},"坐标怎么理解",[14,103055,103056],{},"MuJoCo 默认使用三维坐标：",[87,103058,103061],{"className":103059,"code":103060,"language":5171,"meta":18},[5169],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[93,103062,103060],{"__ignoreMap":18},[14,103064,14617],{},[87,103066,103068],{"className":53046,"code":103067,"language":53048,"meta":18,"style":18},"pos=\"0 0 1\"\n",[93,103069,103070],{"__ignoreMap":18},[96,103071,103072],{"class":98,"line":99},[96,103073,103067],{"class":106},[14,103075,103076],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[67,103078,103080],{"id":103079},"geom-的-size-怎么理解","geom 的 size 怎么理解",[14,103082,103083,103084,82509,103087,103089],{},"不同 ",[93,103085,103086],{},"type",[93,103088,31475],{}," 含义不同：",[244,103091,103092,103107],{},[247,103093,103094],{},[250,103095,103096,103100,103105],{},[253,103097,103098],{"align":23721},[93,103099,103086],{},[253,103101,103102,103104],{"align":23721},[93,103103,31475],{}," 示例",[253,103106,100679],{"align":23721},[291,103108,103109,103123,103138,103157],{},[250,103110,103111,103115,103120],{},[296,103112,103113],{"align":23721},[93,103114,53693],{},[296,103116,103117],{"align":23721},[93,103118,103119],{},"size=\"0.1 0.2 0.3\"",[296,103121,103122],{"align":23721},"x\u002Fy\u002Fz 半边长，不是完整长度",[250,103124,103125,103130,103135],{},[296,103126,103127],{"align":23721},[93,103128,103129],{},"sphere",[296,103131,103132],{"align":23721},[93,103133,103134],{},"size=\"0.1\"",[296,103136,103137],{"align":23721},"球半径",[250,103139,103140,103145,103150],{},[296,103141,103142],{"align":23721},[93,103143,103144],{},"capsule",[296,103146,103147],{"align":23721},[93,103148,103149],{},"size=\"0.03\"",[296,103151,103152,103153,103156],{"align":23721},"胶囊半径，长度常用 ",[93,103154,103155],{},"fromto"," 指定",[250,103158,103159,103164,103169],{},[296,103160,103161],{"align":23721},[93,103162,103163],{},"plane",[296,103165,103166],{"align":23721},[93,103167,103168],{},"size=\"3 3 0.1\"",[296,103170,103171],{"align":23721},"可视平面大小，通常当地面",[14,103173,103174,103175,103177,103178,103180],{},"最容易踩坑的是 box：",[93,103176,102003],{}," 表示边长大约是 ",[93,103179,32016],{},"，因为 MuJoCo 用的是半边长。",[67,103182,103184],{"id":103183},"site-是什么","site 是什么",[14,103186,103187,103190],{},[93,103188,103189],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[50,103192,103193,103196,103199,103202],{},[53,103194,103195],{},"标记机械臂末端。",[53,103197,103198],{},"标记目标位置。",[53,103200,103201],{},"放传感器或相机参考点。",[53,103203,103204],{},"在 Python 中读取某个关键点的世界坐标。",[14,103206,103207,103208,100997,103211,103214],{},"在后面的 Reacher 任务中，",[93,103209,103210],{},"tip",[93,103212,103213],{},"target"," 就会用 site 表示。",[38,103216,101232],{"id":101231},[87,103218,103220],{"className":30357,"code":103219,"language":30359,"meta":18,"style":18},"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",[93,103221,103222,103228,103238,103242,103246,103254,103259,103263,103267,103271,103276,103280,103285,103290,103295,103300,103304,103308,103312,103316,103320,103324,103336,103348,103356,103360,103375,103390,103394,103407,103422,103435,103448,103452,103468,103472,103476,103487,103499,103511,103523,103527,103531,103543],{"__ignoreMap":18},[96,103223,103224,103226],{"class":98,"line":99},[96,103225,30371],{"class":102},[96,103227,101280],{"class":106},[96,103229,103230,103232,103234,103236],{"class":98,"line":19},[96,103231,30371],{"class":102},[96,103233,31359],{"class":106},[96,103235,31362],{"class":102},[96,103237,31365],{"class":106},[96,103239,103240],{"class":98,"line":1162},[96,103241,2383],{"emptyLinePlaceholder":23},[96,103243,103244],{"class":98,"line":1177},[96,103245,2383],{"emptyLinePlaceholder":23},[96,103247,103248,103250,103252],{"class":98,"line":1183},[96,103249,101293],{"class":155},[96,103251,13548],{"class":102},[96,103253,101298],{"class":211},[96,103255,103256],{"class":98,"line":1197},[96,103257,103258],{"class":211},"\u003Cmujoco model=\"xml_basic\">\n",[96,103260,103261],{"class":98,"line":1203},[96,103262,101308],{"class":211},[96,103264,103265],{"class":98,"line":1294},[96,103266,2383],{"emptyLinePlaceholder":23},[96,103268,103269],{"class":98,"line":1300},[96,103270,101317],{"class":211},[96,103272,103273],{"class":98,"line":1312},[96,103274,103275],{"class":211},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[96,103277,103278],{"class":98,"line":1595},[96,103279,2383],{"emptyLinePlaceholder":23},[96,103281,103282],{"class":98,"line":1600},[96,103283,103284],{"class":211},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[96,103286,103287],{"class":98,"line":1606},[96,103288,103289],{"class":211},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[96,103291,103292],{"class":98,"line":1611},[96,103293,103294],{"class":211},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[96,103296,103297],{"class":98,"line":1625},[96,103298,103299],{"class":211},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[96,103301,103302],{"class":98,"line":1630},[96,103303,101346],{"class":211},[96,103305,103306],{"class":98,"line":1636},[96,103307,101351],{"class":211},[96,103309,103310],{"class":98,"line":1657},[96,103311,101356],{"class":211},[96,103313,103314],{"class":98,"line":1662},[96,103315,95677],{"class":211},[96,103317,103318],{"class":98,"line":1676},[96,103319,2383],{"emptyLinePlaceholder":23},[96,103321,103322],{"class":98,"line":1681},[96,103323,2383],{"emptyLinePlaceholder":23},[96,103325,103326,103328,103330,103332,103334],{"class":98,"line":1710},[96,103327,31926],{"class":102},[96,103329,1956],{"class":1946},[96,103331,101377],{"class":106},[96,103333,95665],{"class":155},[96,103335,3722],{"class":106},[96,103337,103338,103340,103342,103344,103346],{"class":98,"line":1715},[96,103339,101386],{"class":106},[96,103341,152],{"class":102},[96,103343,101391],{"class":106},[96,103345,101293],{"class":155},[96,103347,113],{"class":106},[96,103349,103350,103352,103354],{"class":98,"line":1732},[96,103351,101400],{"class":106},[96,103353,152],{"class":102},[96,103355,101405],{"class":106},[96,103357,103358],{"class":98,"line":1737},[96,103359,2383],{"emptyLinePlaceholder":23},[96,103361,103362,103365,103367,103370,103373],{"class":98,"line":1742},[96,103363,103364],{"class":106},"    box_body_id ",[96,103366,152],{"class":102},[96,103368,103369],{"class":106}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[96,103371,103372],{"class":211},"\"red_box\"",[96,103374,113],{"class":106},[96,103376,103377,103380,103382,103385,103388],{"class":98,"line":1747},[96,103378,103379],{"class":106},"    site_id ",[96,103381,152],{"class":102},[96,103383,103384],{"class":106}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[96,103386,103387],{"class":211},"\"box_center\"",[96,103389,113],{"class":106},[96,103391,103392],{"class":98,"line":1761},[96,103393,2383],{"emptyLinePlaceholder":23},[96,103395,103396,103398,103401,103403,103405],{"class":98,"line":1766},[96,103397,3084],{"class":102},[96,103399,103400],{"class":106}," box_body_id ",[96,103402,1017],{"class":102},[96,103404,4076],{"class":155},[96,103406,3722],{"class":106},[96,103408,103409,103412,103415,103417,103420],{"class":98,"line":2560},[96,103410,103411],{"class":102},"        raise",[96,103413,103414],{"class":155}," RuntimeError",[96,103416,107],{"class":106},[96,103418,103419],{"class":211},"\"body red_box not found\"",[96,103421,113],{"class":106},[96,103423,103424,103426,103429,103431,103433],{"class":98,"line":2574},[96,103425,3084],{"class":102},[96,103427,103428],{"class":106}," site_id ",[96,103430,1017],{"class":102},[96,103432,4076],{"class":155},[96,103434,3722],{"class":106},[96,103436,103437,103439,103441,103443,103446],{"class":98,"line":2582},[96,103438,103411],{"class":102},[96,103440,103414],{"class":155},[96,103442,107],{"class":106},[96,103444,103445],{"class":211},"\"site box_center not found\"",[96,103447,113],{"class":106},[96,103449,103450],{"class":98,"line":2587},[96,103451,2383],{"emptyLinePlaceholder":23},[96,103453,103454,103456,103458,103460,103462,103464,103466],{"class":98,"line":2593},[96,103455,3184],{"class":102},[96,103457,101480],{"class":106},[96,103459,26022],{"class":102},[96,103461,32422],{"class":155},[96,103463,107],{"class":106},[96,103465,1705],{"class":155},[96,103467,30765],{"class":106},[96,103469,103470],{"class":98,"line":2599},[96,103471,101495],{"class":106},[96,103473,103474],{"class":98,"line":2604},[96,103475,2383],{"emptyLinePlaceholder":23},[96,103477,103478,103480,103482,103485],{"class":98,"line":7932},[96,103479,31278],{"class":155},[96,103481,107],{"class":106},[96,103483,103484],{"class":211},"\"simulation time:\"",[96,103486,101457],{"class":106},[96,103488,103489,103491,103493,103496],{"class":98,"line":7956},[96,103490,31278],{"class":155},[96,103492,107],{"class":106},[96,103494,103495],{"class":211},"\"box body position:\"",[96,103497,103498],{"class":106},", data.xpos[box_body_id].copy())\n",[96,103500,103501,103503,103505,103508],{"class":98,"line":7961},[96,103502,31278],{"class":155},[96,103504,107],{"class":106},[96,103506,103507],{"class":211},"\"site position:\"",[96,103509,103510],{"class":106},", data.site_xpos[site_id].copy())\n",[96,103512,103513,103515,103517,103520],{"class":98,"line":7967},[96,103514,31278],{"class":155},[96,103516,107],{"class":106},[96,103518,103519],{"class":211},"\"box qpos:\"",[96,103521,103522],{"class":106},", np.array(data.qpos))\n",[96,103524,103525],{"class":98,"line":7994},[96,103526,2383],{"emptyLinePlaceholder":23},[96,103528,103529],{"class":98,"line":7999},[96,103530,2383],{"emptyLinePlaceholder":23},[96,103532,103533,103535,103537,103539,103541],{"class":98,"line":8005},[96,103534,1514],{"class":102},[96,103536,31199],{"class":155},[96,103538,101538],{"class":102},[96,103540,101541],{"class":211},[96,103542,3722],{"class":106},[96,103544,103545],{"class":98,"line":8017},[96,103546,101548],{"class":106},[14,103548,103549],{},"保存为：",[87,103551,103553],{"className":23807,"code":103552,"language":23809,"meta":18,"style":18},"touch ch2_xml_basic.py\n",[93,103554,103555],{"__ignoreMap":18},[96,103556,103557,103559],{"class":98,"line":99},[96,103558,101262],{"class":1946},[96,103560,103561],{"class":211}," ch2_xml_basic.py\n",[14,103563,102280],{},[87,103565,103567],{"className":23807,"code":103566,"language":23809,"meta":18,"style":18},"python ch2_xml_basic.py\n",[93,103568,103569],{"__ignoreMap":18},[96,103570,103571,103573],{"class":98,"line":99},[96,103572,30359],{"class":1946},[96,103574,103561],{"class":211},[67,103576,101551],{"id":101551},[14,103578,103579],{},"用名字查找 body：",[87,103581,103583],{"className":30357,"code":103582,"language":30359,"meta":18,"style":18},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[93,103584,103585],{"__ignoreMap":18},[96,103586,103587,103590,103592,103594,103596],{"class":98,"line":99},[96,103588,103589],{"class":106},"box_body_id ",[96,103591,152],{"class":102},[96,103593,103369],{"class":106},[96,103595,103372],{"class":211},[96,103597,113],{"class":106},[14,103599,103600],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[14,103602,103603],{},"用名字查找 site：",[87,103605,103607],{"className":30357,"code":103606,"language":30359,"meta":18,"style":18},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[93,103608,103609],{"__ignoreMap":18},[96,103610,103611,103614,103616,103618,103620],{"class":98,"line":99},[96,103612,103613],{"class":106},"site_id ",[96,103615,152],{"class":102},[96,103617,103384],{"class":106},[96,103619,103387],{"class":211},[96,103621,113],{"class":106},[14,103623,103624,103625,103628,103629,103632],{},"注意第二个参数是对象类型。查 body 就用 ",[93,103626,103627],{},"mjOBJ_BODY","，查 site 就用 ",[93,103630,103631],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[14,103634,103635],{},"读取世界坐标：",[87,103637,103639],{"className":30357,"code":103638,"language":30359,"meta":18,"style":18},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[93,103640,103641,103646],{"__ignoreMap":18},[96,103642,103643],{"class":98,"line":99},[96,103644,103645],{"class":106},"data.xpos[box_body_id]\n",[96,103647,103648],{"class":98,"line":19},[96,103649,103650],{"class":106},"data.site_xpos[site_id]\n",[14,103652,103653,103656,103657,103660],{},[93,103654,103655],{},"xpos"," 是 body 的世界坐标，",[93,103658,103659],{},"site_xpos"," 是 site 的世界坐标。",[67,103662,101687],{"id":101687},[87,103664,103666],{"className":30357,"code":103665,"language":30359,"meta":18,"style":18},"import mujoco\nimport numpy as np\n",[93,103667,103668,103674],{"__ignoreMap":18},[96,103669,103670,103672],{"class":98,"line":99},[96,103671,30371],{"class":102},[96,103673,101280],{"class":106},[96,103675,103676,103678,103680,103682],{"class":98,"line":19},[96,103677,30371],{"class":102},[96,103679,31359],{"class":106},[96,103681,31362],{"class":102},[96,103683,31365],{"class":106},[14,103685,103686,103687,103690,103691,103694,103695,319,103698,28364],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[93,103688,103689],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[93,103692,103693],{},"as np"," 是习惯写法，后面就可以写 ",[93,103696,103697],{},"np.array(...)",[93,103699,103700],{},"np.round(...)",[87,103702,103703],{"className":30357,"code":101574,"language":30359,"meta":18,"style":18},[93,103704,103705,103713,103717],{"__ignoreMap":18},[96,103706,103707,103709,103711],{"class":98,"line":99},[96,103708,101293],{"class":155},[96,103710,13548],{"class":102},[96,103712,101298],{"class":211},[96,103714,103715],{"class":98,"line":19},[96,103716,101589],{"class":211},[96,103718,103719],{"class":98,"line":1162},[96,103720,95677],{"class":211},[14,103722,103723,103724,28364],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[93,103725,103726],{},"mujoco.MjModel.from_xml_string(XML)",[87,103728,103730],{"className":53046,"code":103729,"language":53048,"meta":18,"style":18},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[93,103731,103732],{"__ignoreMap":18},[96,103733,103734,103736,103738,103740,103742,103744,103746,103748,103751,103753,103755,103758,103760,103762,103765],{"class":98,"line":99},[96,103735,1017],{"class":106},[96,103737,103189],{"class":51279},[96,103739,14904],{"class":1946},[96,103741,152],{"class":106},[96,103743,103387],{"class":211},[96,103745,101085],{"class":1946},[96,103747,152],{"class":106},[96,103749,103750],{"class":211},"\"0 0 0\"",[96,103752,101115],{"class":1946},[96,103754,152],{"class":106},[96,103756,103757],{"class":211},"\"0.03\"",[96,103759,78746],{"class":1946},[96,103761,152],{"class":106},[96,103763,103764],{"class":211},"\"0 1 0 1\"",[96,103766,101123],{"class":106},[14,103768,103769,103771,103772,103775,103776,103778,103779,103782],{},[93,103770,103189],{}," 是标记点。",[93,103773,103774],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[93,103777,103149],{}," 表示显示出来的小球大小。",[93,103780,103781],{},"rgba=\"0 1 0 1\""," 表示绿色。",[87,103784,103785],{"className":30357,"code":103582,"language":30359,"meta":18,"style":18},[93,103786,103787],{"__ignoreMap":18},[96,103788,103789,103791,103793,103795,103797],{"class":98,"line":99},[96,103790,103589],{"class":106},[96,103792,152],{"class":102},[96,103794,103369],{"class":106},[96,103796,103372],{"class":211},[96,103798,113],{"class":106},[14,103800,103801,103802,103804],{},"这行的作用是：根据名字 ",[93,103803,103372],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[14,103806,103807],{},"拆开看：",[50,103809,103810,103816,103821,103827],{},[53,103811,103812,103815],{},[93,103813,103814],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[53,103817,103818,103820],{},[93,103819,102064],{}," 是被查询的模型。",[53,103822,103823,103826],{},[93,103824,103825],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[53,103828,103829,103831],{},[93,103830,103372],{}," 是 XML 里写的名字。",[87,103833,103834],{"className":30357,"code":103606,"language":30359,"meta":18,"style":18},[93,103835,103836],{"__ignoreMap":18},[96,103837,103838,103840,103842,103844,103846],{"class":98,"line":99},[96,103839,103613],{"class":106},[96,103841,152],{"class":102},[96,103843,103384],{"class":106},[96,103845,103387],{"class":211},[96,103847,113],{"class":106},[14,103849,103850,103851,28364],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[93,103852,103387],{},[87,103854,103856],{"className":30357,"code":103855,"language":30359,"meta":18,"style":18},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[93,103857,103858,103870],{"__ignoreMap":18},[96,103859,103860,103862,103864,103866,103868],{"class":98,"line":99},[96,103861,1514],{"class":102},[96,103863,103400],{"class":106},[96,103865,1017],{"class":102},[96,103867,4076],{"class":155},[96,103869,3722],{"class":106},[96,103871,103872,103875,103877,103879,103881],{"class":98,"line":19},[96,103873,103874],{"class":102},"    raise",[96,103876,103414],{"class":155},[96,103878,107],{"class":106},[96,103880,103419],{"class":211},[96,103882,113],{"class":106},[14,103884,103885,103887,103888,103891,103892,103895,103896,103899],{},[93,103886,1514],{}," 是条件判断。",[93,103889,103890],{},"mj_name2id"," 找不到对象时会返回 ",[93,103893,103894],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[93,103897,103898],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[87,103901,103903],{"className":30357,"code":103902,"language":30359,"meta":18,"style":18},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[93,103904,103905,103921],{"__ignoreMap":18},[96,103906,103907,103909,103911,103913,103915,103917,103919],{"class":98,"line":99},[96,103908,3008],{"class":102},[96,103910,101480],{"class":106},[96,103912,26022],{"class":102},[96,103914,32422],{"class":155},[96,103916,107],{"class":106},[96,103918,1705],{"class":155},[96,103920,30765],{"class":106},[96,103922,103923],{"class":98,"line":19},[96,103924,101678],{"class":106},[14,103926,103927],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[87,103929,103931],{"className":30357,"code":103930,"language":30359,"meta":18,"style":18},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[93,103932,103933],{"__ignoreMap":18},[96,103934,103935,103937,103939,103941],{"class":98,"line":99},[96,103936,30394],{"class":155},[96,103938,107],{"class":106},[96,103940,103495],{"class":211},[96,103942,103498],{"class":106},[14,103944,103945,103947,103948,103951],{},[93,103946,101058],{}," 保存所有 body 的世界坐标。",[93,103949,103950],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[87,103953,103955],{"className":30357,"code":103954,"language":30359,"meta":18,"style":18},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[93,103956,103957],{"__ignoreMap":18},[96,103958,103959,103961,103963,103965],{"class":98,"line":99},[96,103960,30394],{"class":155},[96,103962,107],{"class":106},[96,103964,103507],{"class":211},[96,103966,103510],{"class":106},[14,103968,103969,103972,103973,103975],{},[93,103970,103971],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[93,103974,102956],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[87,103977,103979],{"className":30357,"code":103978,"language":30359,"meta":18,"style":18},"print(\"box qpos:\", np.array(data.qpos))\n",[93,103980,103981],{"__ignoreMap":18},[96,103982,103983,103985,103987,103989],{"class":98,"line":99},[96,103984,30394],{"class":155},[96,103986,107],{"class":106},[96,103988,103519],{"class":211},[96,103990,103522],{"class":106},[14,103992,103993,103994,103997],{},"这里打印广义位置数组。",[93,103995,103996],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[38,103999,102295],{"id":102294},[14,104001,104002,104003,104006,104007,28364],{},"程序会输出 ",[93,104004,104005],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[93,104008,104009],{},"qpos",[14,104011,104012,104014,104015,104018,104019,104022],{},[93,104013,103950],{}," 是 body 的世界坐标位置。",[93,104016,104017],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[93,104020,104021],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[14,104024,82201,104025,82509,104027,104029],{},[93,104026,102956],{},[93,104028,103774],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[14,104031,104032],{},"如果你把 site 改成：",[87,104034,104036],{"className":53046,"code":104035,"language":53048,"meta":18,"style":18},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[93,104037,104038],{"__ignoreMap":18},[96,104039,104040,104042,104044,104046,104048,104051,104053,104055,104058,104060,104062,104064,104066,104068,104070],{"class":98,"line":99},[96,104041,1017],{"class":106},[96,104043,103189],{"class":51279},[96,104045,14904],{"class":1946},[96,104047,152],{"class":106},[96,104049,104050],{"class":211},"\"box_top\"",[96,104052,101085],{"class":1946},[96,104054,152],{"class":106},[96,104056,104057],{"class":211},"\"0 0 0.15\"",[96,104059,101115],{"class":1946},[96,104061,152],{"class":106},[96,104063,103757],{"class":211},[96,104065,78746],{"class":1946},[96,104067,152],{"class":106},[96,104069,103764],{"class":211},[96,104071,101123],{"class":106},[14,104073,104074,104075,104078],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[93,104076,104077],{},"site position"," 就会比 body position 的 z 坐标更高。",[38,104080,102327],{"id":102326},[50,104082,104083,104092,104095,104102,104108,104119],{},[53,104084,102390,104085,104087,104088,102393,104090,28364],{},[93,104086,102960],{}," 的初始高度从 ",[93,104089,324],{},[93,104091,184],{},[53,104093,104094],{},"重新运行程序。",[53,104096,104097,104098,104101],{},"观察 ",[93,104099,104100],{},"box qpos"," 和最终位置是否变化。",[53,104103,104104,104105,104107],{},"故意把 ",[93,104106,103189],{}," 名称改错，确认程序能报错。",[53,104109,102390,104110,104112,104113,102393,104115,104118],{},[93,104111,101099],{}," 的颜色 ",[93,104114,102011],{},[93,104116,104117],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[53,104120,102390,104121,82509,104123,102393,104126,104129,104130,104132],{},[93,104122,102956],{},[93,104124,104125],{},"pos",[93,104127,104128],{},"0 0 0.2","，观察 ",[93,104131,104077],{}," 如何变化。",[38,104134,102432],{"id":102431},[67,104136,104138],{"id":104137},"xml-error-schema-violation",[93,104139,104140],{},"XML Error: Schema violation",[14,104142,104143],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[67,104145,104147,81269,104149],{"id":104146},"mj_name2id-返回-1",[93,104148,103890],{},[93,104150,103894],{},[14,104152,104153,104154,104157],{},"说明名字没有找到。检查 XML 中 ",[93,104155,104156],{},"name=\"...\"","，并确认对象类型正确。",[67,104159,104160],{"id":104160},"物体不下落",[14,104162,102502],{},[50,104164,104165,104170,104175],{},[53,104166,104167,104168],{},"body 是否有 ",[93,104169,101599],{},[53,104171,104172,104173],{},"gravity 是否为 ",[93,104174,102568],{},[53,104176,104177,104178,104180],{},"body 是否被固定在 ",[93,104179,101820],{}," 中",[67,104182,104183],{"id":104183},"坐标看起来不符合预期",[14,104185,104186],{},"先区分两种坐标：",[244,104188,104189,104198],{},[247,104190,104191],{},[250,104192,104193,104196],{},[253,104194,104195],{"align":23721},"坐标",[253,104197,100679],{"align":23721},[291,104199,104200,104210],{},[250,104201,104202,104207],{},[296,104203,104204,104205],{"align":23721},"XML 里的 ",[93,104206,104125],{},[296,104208,104209],{"align":23721},"相对父 body 的局部坐标",[250,104211,104212,104218],{},[296,104213,104214,24957,104216],{"align":23721},[93,104215,101058],{},[93,104217,103971],{},[296,104219,104220],{"align":23721},"仿真更新后的世界坐标",[14,104222,104223,104224,104226,104227,82518,104230,104232],{},"如果你修改了 ",[93,104225,101049],{},"，但还没调用 ",[93,104228,104229],{},"mj_forward",[93,104231,101194],{},"，世界坐标可能还没有更新。",[38,104234,102586],{"id":102585},[14,104236,104237],{},"MJCF 建模先掌握四件事：",[50,104239,104240,104245,104250,104255],{},[53,104241,104242,104244],{},[93,104243,51779],{}," 表示刚体层级。",[53,104246,104247,104249],{},[93,104248,101099],{}," 表示形状、碰撞和质量。",[53,104251,104252,104254],{},[93,104253,102935],{}," 决定 body 能不能动、怎么动。",[53,104256,104257,104259],{},[93,104258,103189],{}," 用来标记关键点，方便 Python 读取位置。",[14,104261,104262],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[5110,104264,104265],{},"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":18,"searchDepth":19,"depth":19,"links":104267},[104268,104269,104270,104276,104280,104281,104282,104289],{"id":100625,"depth":19,"text":100626},{"id":100748,"depth":19,"text":100749},{"id":101023,"depth":19,"text":101024,"children":104271},[104272,104273,104274,104275],{"id":102939,"depth":1162,"text":102939},{"id":103053,"depth":1162,"text":103053},{"id":103079,"depth":1162,"text":103080},{"id":103183,"depth":1162,"text":103184},{"id":101231,"depth":19,"text":101232,"children":104277},[104278,104279],{"id":101551,"depth":1162,"text":101551},{"id":101687,"depth":1162,"text":101687},{"id":102294,"depth":19,"text":102295},{"id":102326,"depth":19,"text":102327},{"id":102431,"depth":19,"text":102432,"children":104283},[104284,104285,104287,104288],{"id":104137,"depth":1162,"text":104140},{"id":104146,"depth":1162,"text":104286},"mj_name2id 返回 -1",{"id":104160,"depth":1162,"text":104160},{"id":104183,"depth":1162,"text":104183},{"id":102585,"depth":19,"text":102586},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102633,"description":18},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104296,"title":104297,"body":104298,"description":18,"extension":21,"meta":105793,"navigation":23,"path":105794,"seo":105795,"stem":105796,"__hash__":105797},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104299,"toc":105765},[104300,104303,104305,104308,104311,104349,104352,104358,104361,104363,104365,104392,104394,104408,104410,104451,104453,104477,104479,104482,104491,104500,104503,104512,104520,104529,104532,104542,104545,104597,104604,104610,104618,104666,104669,104688,104691,104699,104703,104712,104745,104747,105095,105097,105109,105111,105122,105124,105127,105148,105154,105157,105182,105192,105195,105203,105206,105209,105230,105241,105243,105263,105266,105287,105296,105315,105321,105346,105349,105363,105370,105394,105397,105405,105414,105430,105442,105450,105459,105461,105464,105488,105493,105496,105518,105520,105559,105561,105568,105570,105578,105581,105584,105596,105637,105644,105655,105662,105665,105714,105717,105720,105726,105728,105733,105759,105762],[10,104301,104297],{"id":104302},"_3python-控制接口读取状态与推进仿真",[38,104304,100626],{"id":100625},[14,104306,104307],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[14,104309,104310],{},"你将学习:",[50,104312,104313,104318,104323,104327,104332,104343],{},[53,104314,104315],{},[93,104316,104317],{},"MjModel.from_xml_string",[53,104319,104320],{},[93,104321,104322],{},"MjData(model)",[53,104324,104325],{},[93,104326,101194],{},[53,104328,104329],{},[93,104330,104331],{},"mj_resetData",[53,104333,104334,104335,319,104337,319,104340],{},"读取 ",[93,104336,104009],{},[93,104338,104339],{},"qvel",[93,104341,104342],{},"ctrl",[53,104344,104345,104346],{},"使用 ",[93,104347,104348],{},"model.opt.timestep",[14,104350,104351],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[87,104353,104356],{"className":104354,"code":104355,"language":5171,"meta":18},[5169],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[93,104357,104355],{"__ignoreMap":18},[14,104359,104360],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[38,104362,100749],{"id":100748},[14,104364,100752],{},[87,104366,104368],{"className":23807,"code":104367,"language":23809,"meta":18,"style":18},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[93,104369,104370],{"__ignoreMap":18},[96,104371,104372,104374,104376,104378,104380,104383,104385,104387,104389],{"class":98,"line":99},[96,104373,24555],{"class":1946},[96,104375,26294],{"class":211},[96,104377,23819],{"class":211},[96,104379,26379],{"class":155},[96,104381,104382],{"class":211}," python3",[96,104384,100777],{"class":211},[96,104386,102480],{"class":211},[96,104388,100793],{"class":211},[96,104390,104391],{"class":211}," glfw\n",[14,104393,102798],{},[87,104395,104396],{"className":23807,"code":100898,"language":23809,"meta":18,"style":18},[93,104397,104398],{"__ignoreMap":18},[96,104399,104400,104402,104404,104406],{"class":98,"line":99},[96,104401,23816],{"class":1946},[96,104403,23819],{"class":211},[96,104405,100909],{"class":211},[96,104407,100912],{"class":211},[14,104409,102815],{},[87,104411,104413],{"className":23807,"code":104412,"language":23809,"meta":18,"style":18},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[93,104414,104415,104432,104441],{"__ignoreMap":18},[96,104416,104417,104419,104421,104423,104426,104428,104430],{"class":98,"line":99},[96,104418,30309],{"class":1946},[96,104420,29155],{"class":211},[96,104422,25094],{"class":155},[96,104424,104425],{"class":211}," mujoco-python-api",[96,104427,100954],{"class":211},[96,104429,100957],{"class":155},[96,104431,100960],{"class":155},[96,104433,104434,104436,104438],{"class":98,"line":19},[96,104435,30309],{"class":1946},[96,104437,100967],{"class":211},[96,104439,104440],{"class":211}," mujoco-python-api\n",[96,104442,104443,104445,104447,104449],{"class":98,"line":1162},[96,104444,23816],{"class":1946},[96,104446,23819],{"class":211},[96,104448,100909],{"class":211},[96,104450,100912],{"class":211},[14,104452,100983],{},[50,104454,104455,104462,104471],{},[53,104456,104457,100997,104459,104461],{},[93,104458,100654],{},[93,104460,100659],{}," 是官方 Python bindings 的类名。",[53,104463,104464,104465,104468,104469,28364],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[93,104466,104467],{},"mjModel"," 在 Python 中是 ",[93,104470,100688],{},[53,104472,104473,104474,28364],{},"不要使用 ",[93,104475,104476],{},"sim = mujoco_py.MjSim(...)",[38,104478,101024],{"id":101023},[14,104480,104481],{},"仿真推进核心代码:",[87,104483,104485],{"className":30357,"code":104484,"language":30359,"meta":18,"style":18},"mujoco.mj_step(model, data)\n",[93,104486,104487],{"__ignoreMap":18},[96,104488,104489],{"class":98,"line":99},[96,104490,104484],{"class":106},[14,104492,104493,104494,319,104496,319,104498,28364],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[93,104495,101049],{},[93,104497,101052],{},[93,104499,101046],{},[14,104501,104502],{},"重置仿真:",[87,104504,104506],{"className":30357,"code":104505,"language":30359,"meta":18,"style":18},"mujoco.mj_resetData(model, data)\n",[93,104507,104508],{"__ignoreMap":18},[96,104509,104510],{"class":98,"line":99},[96,104511,104505],{"class":106},[14,104513,104514,104515,82518,104517,104519],{},"如果手动修改了 ",[93,104516,101049],{},[93,104518,101052],{},"，通常应调用:",[87,104521,104523],{"className":30357,"code":104522,"language":30359,"meta":18,"style":18},"mujoco.mj_forward(model, data)\n",[93,104524,104525],{"__ignoreMap":18},[96,104526,104527],{"class":98,"line":99},[96,104528,104522],{"class":106},[14,104530,104531],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[67,104533,104535,319,104537,319,104539,104541],{"id":104534},"qposqvelctrl-是什么",[93,104536,104009],{},[93,104538,104339],{},[93,104540,104342],{}," 是什么",[14,104543,104544],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[244,104546,104547,104559],{},[247,104548,104549],{},[250,104550,104551,104554,104556],{},[253,104552,104553],{"align":23721},"字段",[253,104555,100679],{"align":23721},[253,104557,104558],{"align":23721},"谁来修改",[291,104560,104561,104573,104585],{},[250,104562,104563,104567,104570],{},[296,104564,104565],{"align":23721},[93,104566,101049],{},[296,104568,104569],{"align":23721},"广义位置，例如小车位置、关节角、自由物体位置姿态",[296,104571,104572],{"align":23721},"MuJoCo 更新，也可以手动设置初始状态",[250,104574,104575,104579,104582],{},[296,104576,104577],{"align":23721},[93,104578,101052],{},[296,104580,104581],{"align":23721},"广义速度，例如小车速度、关节角速度",[296,104583,104584],{"align":23721},"MuJoCo 更新，也可以手动清零",[250,104586,104587,104591,104594],{},[296,104588,104589],{"align":23721},[93,104590,101055],{},[296,104592,104593],{"align":23721},"actuator 的控制输入",[296,104595,104596],{"align":23721},"主要由你的控制代码写入",[14,104598,9009,104599,100997,104601,104603],{},[93,104600,104009],{},[93,104602,104339],{}," 不一定同维。自由刚体就是典型例子：",[87,104605,104608],{"className":104606,"code":104607,"language":5171,"meta":18},[5169],"freejoint: qpos 7 维，qvel 6 维\n",[93,104609,104607],{"__ignoreMap":18},[67,104611,104613,100997,104615,104617],{"id":104612},"mj_step-和-mj_forward-的区别",[93,104614,101194],{},[93,104616,104229],{}," 的区别",[244,104619,104620,104633],{},[247,104621,104622],{},[250,104623,104624,104627,104630],{},[253,104625,104626],{"align":23721},"函数",[253,104628,104629],{"align":23721},"是否推进时间",[253,104631,104632],{"align":23721},"什么时候用",[291,104634,104635,104648],{},[250,104636,104637,104642,104645],{},[296,104638,104639],{"align":23721},[93,104640,104641],{},"mj_step(model, data)",[296,104643,104644],{"align":23721},"是",[296,104646,104647],{"align":23721},"正常仿真循环，每调用一次前进一步",[250,104649,104650,104655,104658],{},[296,104651,104652],{"align":23721},[93,104653,104654],{},"mj_forward(model, data)",[296,104656,104657],{"align":23721},"否",[296,104659,104660,104661,319,104663,104665],{"align":23721},"手动改了 ",[93,104662,104009],{},[93,104664,104339],{}," 后，刷新派生量",[14,104667,104668],{},"例如你写：",[87,104670,104672],{"className":30357,"code":104671,"language":30359,"meta":18,"style":18},"data.qpos[2] = 2.0\n",[93,104673,104674],{"__ignoreMap":18},[96,104675,104676,104679,104681,104683,104685],{"class":98,"line":99},[96,104677,104678],{"class":106},"data.qpos[",[96,104680,184],{"class":155},[96,104682,4426],{"class":106},[96,104684,152],{"class":102},[96,104686,104687],{"class":155}," 2.0\n",[14,104689,104690],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[87,104692,104693],{"className":30357,"code":104522,"language":30359,"meta":18,"style":18},[93,104694,104695],{"__ignoreMap":18},[96,104696,104697],{"class":98,"line":99},[96,104698,104522],{"class":106},[67,104700,104702],{"id":104701},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[14,104704,104705,104708,104709,104711],{},[93,104706,104707],{},"mujoco.mj_resetData(model, data)"," 会把 ",[93,104710,33380],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[87,104713,104715],{"className":30357,"code":104714,"language":30359,"meta":18,"style":18},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[93,104716,104717,104721,104731,104741],{"__ignoreMap":18},[96,104718,104719],{"class":98,"line":99},[96,104720,104505],{"class":106},[96,104722,104723,104726,104728],{"class":98,"line":19},[96,104724,104725],{"class":106},"data.qpos[:] ",[96,104727,152],{"class":102},[96,104729,104730],{"class":106}," random_qpos\n",[96,104732,104733,104736,104738],{"class":98,"line":1162},[96,104734,104735],{"class":106},"data.qvel[:] ",[96,104737,152],{"class":102},[96,104739,104740],{"class":155}," 0.0\n",[96,104742,104743],{"class":98,"line":1177},[96,104744,104522],{"class":106},[38,104746,101232],{"id":101231},[87,104748,104750],{"className":30357,"code":104749,"language":30359,"meta":18,"style":18},"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",[93,104751,104752,104758,104768,104772,104776,104784,104789,104793,104797,104801,104806,104810,104815,104820,104825,104829,104833,104837,104841,104845,104849,104868,104875,104887,104898,104914,104930,104934,104938,104950,104962,104970,104974,104985,104989,105005,105009,105013,105022,105026,105031,105040,105044,105057,105062,105071,105075,105079,105091],{"__ignoreMap":18},[96,104753,104754,104756],{"class":98,"line":99},[96,104755,30371],{"class":102},[96,104757,101280],{"class":106},[96,104759,104760,104762,104764,104766],{"class":98,"line":19},[96,104761,30371],{"class":102},[96,104763,31359],{"class":106},[96,104765,31362],{"class":102},[96,104767,31365],{"class":106},[96,104769,104770],{"class":98,"line":1162},[96,104771,2383],{"emptyLinePlaceholder":23},[96,104773,104774],{"class":98,"line":1177},[96,104775,2383],{"emptyLinePlaceholder":23},[96,104777,104778,104780,104782],{"class":98,"line":1183},[96,104779,101293],{"class":155},[96,104781,13548],{"class":102},[96,104783,101298],{"class":211},[96,104785,104786],{"class":98,"line":1197},[96,104787,104788],{"class":211},"\u003Cmujoco model=\"state_api\">\n",[96,104790,104791],{"class":98,"line":1203},[96,104792,101308],{"class":211},[96,104794,104795],{"class":98,"line":1294},[96,104796,2383],{"emptyLinePlaceholder":23},[96,104798,104799],{"class":98,"line":1300},[96,104800,101317],{"class":211},[96,104802,104803],{"class":98,"line":1312},[96,104804,104805],{"class":211},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[96,104807,104808],{"class":98,"line":1595},[96,104809,2383],{"emptyLinePlaceholder":23},[96,104811,104812],{"class":98,"line":1600},[96,104813,104814],{"class":211},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[96,104816,104817],{"class":98,"line":1606},[96,104818,104819],{"class":211},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[96,104821,104822],{"class":98,"line":1611},[96,104823,104824],{"class":211},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[96,104826,104827],{"class":98,"line":1625},[96,104828,101346],{"class":211},[96,104830,104831],{"class":98,"line":1630},[96,104832,101351],{"class":211},[96,104834,104835],{"class":98,"line":1636},[96,104836,101356],{"class":211},[96,104838,104839],{"class":98,"line":1657},[96,104840,95677],{"class":211},[96,104842,104843],{"class":98,"line":1662},[96,104844,2383],{"emptyLinePlaceholder":23},[96,104846,104847],{"class":98,"line":1676},[96,104848,2383],{"emptyLinePlaceholder":23},[96,104850,104851,104853,104856,104859,104861,104864,104866],{"class":98,"line":1681},[96,104852,31926],{"class":102},[96,104854,104855],{"class":1946}," print_state",[96,104857,104858],{"class":106},"(prefix: ",[96,104860,1282],{"class":155},[96,104862,104863],{"class":106},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[96,104865,95665],{"class":155},[96,104867,3722],{"class":106},[96,104869,104870,104872],{"class":98,"line":1710},[96,104871,31278],{"class":155},[96,104873,104874],{"class":106},"(prefix)\n",[96,104876,104877,104879,104881,104884],{"class":98,"line":1715},[96,104878,31278],{"class":155},[96,104880,107],{"class":106},[96,104882,104883],{"class":211},"\"  timestep:\"",[96,104885,104886],{"class":106},", model.opt.timestep)\n",[96,104888,104889,104891,104893,104896],{"class":98,"line":1732},[96,104890,31278],{"class":155},[96,104892,107],{"class":106},[96,104894,104895],{"class":211},"\"  time:\"",[96,104897,101457],{"class":106},[96,104899,104900,104902,104904,104907,104910,104912],{"class":98,"line":1737},[96,104901,31278],{"class":155},[96,104903,107],{"class":106},[96,104905,104906],{"class":211},"\"  qpos:\"",[96,104908,104909],{"class":106},", np.round(data.qpos.copy(), ",[96,104911,400],{"class":155},[96,104913,30476],{"class":106},[96,104915,104916,104918,104920,104923,104926,104928],{"class":98,"line":1742},[96,104917,31278],{"class":155},[96,104919,107],{"class":106},[96,104921,104922],{"class":211},"\"  qvel:\"",[96,104924,104925],{"class":106},", np.round(data.qvel.copy(), ",[96,104927,400],{"class":155},[96,104929,30476],{"class":106},[96,104931,104932],{"class":98,"line":1747},[96,104933,2383],{"emptyLinePlaceholder":23},[96,104935,104936],{"class":98,"line":1761},[96,104937,2383],{"emptyLinePlaceholder":23},[96,104939,104940,104942,104944,104946,104948],{"class":98,"line":1766},[96,104941,31926],{"class":102},[96,104943,1956],{"class":1946},[96,104945,101377],{"class":106},[96,104947,95665],{"class":155},[96,104949,3722],{"class":106},[96,104951,104952,104954,104956,104958,104960],{"class":98,"line":2560},[96,104953,101386],{"class":106},[96,104955,152],{"class":102},[96,104957,101391],{"class":106},[96,104959,101293],{"class":155},[96,104961,113],{"class":106},[96,104963,104964,104966,104968],{"class":98,"line":2574},[96,104965,101400],{"class":106},[96,104967,152],{"class":102},[96,104969,101405],{"class":106},[96,104971,104972],{"class":98,"line":2582},[96,104973,2383],{"emptyLinePlaceholder":23},[96,104975,104976,104979,104982],{"class":98,"line":2587},[96,104977,104978],{"class":106},"    print_state(",[96,104980,104981],{"class":211},"\"initial\"",[96,104983,104984],{"class":106},", model, data)\n",[96,104986,104987],{"class":98,"line":2593},[96,104988,2383],{"emptyLinePlaceholder":23},[96,104990,104991,104993,104995,104997,104999,105001,105003],{"class":98,"line":2599},[96,104992,3184],{"class":102},[96,104994,101480],{"class":106},[96,104996,26022],{"class":102},[96,104998,32422],{"class":155},[96,105000,107],{"class":106},[96,105002,763],{"class":155},[96,105004,30765],{"class":106},[96,105006,105007],{"class":98,"line":2604},[96,105008,101495],{"class":106},[96,105010,105011],{"class":98,"line":7932},[96,105012,2383],{"emptyLinePlaceholder":23},[96,105014,105015,105017,105020],{"class":98,"line":7956},[96,105016,104978],{"class":106},[96,105018,105019],{"class":211},"\"after 50 steps\"",[96,105021,104984],{"class":106},[96,105023,105024],{"class":98,"line":7961},[96,105025,2383],{"emptyLinePlaceholder":23},[96,105027,105028],{"class":98,"line":7967},[96,105029,105030],{"class":106},"    mujoco.mj_resetData(model, data)\n",[96,105032,105033,105035,105038],{"class":98,"line":7994},[96,105034,104978],{"class":106},[96,105036,105037],{"class":211},"\"after reset\"",[96,105039,104984],{"class":106},[96,105041,105042],{"class":98,"line":7999},[96,105043,2383],{"emptyLinePlaceholder":23},[96,105045,105046,105049,105051,105053,105055],{"class":98,"line":8005},[96,105047,105048],{"class":106},"    data.qpos[",[96,105050,184],{"class":155},[96,105052,4426],{"class":106},[96,105054,152],{"class":102},[96,105056,104687],{"class":155},[96,105058,105059],{"class":98,"line":8017},[96,105060,105061],{"class":106},"    mujoco.mj_forward(model, data)\n",[96,105063,105064,105066,105069],{"class":98,"line":8029},[96,105065,104978],{"class":106},[96,105067,105068],{"class":211},"\"after manual qpos edit\"",[96,105070,104984],{"class":106},[96,105072,105073],{"class":98,"line":8041},[96,105074,2383],{"emptyLinePlaceholder":23},[96,105076,105077],{"class":98,"line":9700},[96,105078,2383],{"emptyLinePlaceholder":23},[96,105080,105081,105083,105085,105087,105089],{"class":98,"line":9725},[96,105082,1514],{"class":102},[96,105084,31199],{"class":155},[96,105086,101538],{"class":102},[96,105088,101541],{"class":211},[96,105090,3722],{"class":106},[96,105092,105093],{"class":98,"line":9748},[96,105094,101548],{"class":106},[14,105096,103549],{},[87,105098,105100],{"className":23807,"code":105099,"language":23809,"meta":18,"style":18},"touch ch3_python_state.py\n",[93,105101,105102],{"__ignoreMap":18},[96,105103,105104,105106],{"class":98,"line":99},[96,105105,101262],{"class":1946},[96,105107,105108],{"class":211}," ch3_python_state.py\n",[14,105110,102280],{},[87,105112,105114],{"className":23807,"code":105113,"language":23809,"meta":18,"style":18},"python ch3_python_state.py\n",[93,105115,105116],{"__ignoreMap":18},[96,105117,105118,105120],{"class":98,"line":99},[96,105119,30359],{"class":1946},[96,105121,105108],{"class":211},[67,105123,101551],{"id":101551},[14,105125,105126],{},"打印状态的函数：",[87,105128,105130],{"className":30357,"code":105129,"language":30359,"meta":18,"style":18},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[93,105131,105132],{"__ignoreMap":18},[96,105133,105134,105136,105138,105140,105142,105144,105146],{"class":98,"line":99},[96,105135,31926],{"class":102},[96,105137,104855],{"class":1946},[96,105139,104858],{"class":106},[96,105141,1282],{"class":155},[96,105143,104863],{"class":106},[96,105145,95665],{"class":155},[96,105147,3722],{"class":106},[14,105149,105150,105151,105153],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[93,105152,33380],{}," 里发生了什么。",[14,105155,105156],{},"推进 50 步：",[87,105158,105160],{"className":30357,"code":105159,"language":30359,"meta":18,"style":18},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[93,105161,105162,105178],{"__ignoreMap":18},[96,105163,105164,105166,105168,105170,105172,105174,105176],{"class":98,"line":99},[96,105165,3008],{"class":102},[96,105167,101480],{"class":106},[96,105169,26022],{"class":102},[96,105171,32422],{"class":155},[96,105173,107],{"class":106},[96,105175,763],{"class":155},[96,105177,30765],{"class":106},[96,105179,105180],{"class":98,"line":19},[96,105181,101678],{"class":106},[14,105183,105184,105185,105188,105189,105191],{},"由于 ",[93,105186,105187],{},"timestep=0.01","，所以 50 步后时间约为 ",[93,105190,35308],{}," 秒。",[14,105193,105194],{},"重置：",[87,105196,105197],{"className":30357,"code":104505,"language":30359,"meta":18,"style":18},[93,105198,105199],{"__ignoreMap":18},[96,105200,105201],{"class":98,"line":99},[96,105202,104505],{"class":106},[14,105204,105205],{},"这会把时间、位置、速度恢复到初始状态。",[14,105207,105208],{},"手动改高度：",[87,105210,105212],{"className":30357,"code":105211,"language":30359,"meta":18,"style":18},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[93,105213,105214,105226],{"__ignoreMap":18},[96,105215,105216,105218,105220,105222,105224],{"class":98,"line":99},[96,105217,104678],{"class":106},[96,105219,184],{"class":155},[96,105221,4426],{"class":106},[96,105223,152],{"class":102},[96,105225,104687],{"class":155},[96,105227,105228],{"class":98,"line":19},[96,105229,104522],{"class":106},[14,105231,105232,105233,105236,105237,105240],{},"这个例子里 ",[93,105234,105235],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[93,105238,105239],{},"2.0"," 表示把小球放到更高的位置。",[67,105242,101687],{"id":101687},[87,105244,105245],{"className":30357,"code":105129,"language":30359,"meta":18,"style":18},[93,105246,105247],{"__ignoreMap":18},[96,105248,105249,105251,105253,105255,105257,105259,105261],{"class":98,"line":99},[96,105250,31926],{"class":102},[96,105252,104855],{"class":1946},[96,105254,104858],{"class":106},[96,105256,1282],{"class":155},[96,105258,104863],{"class":106},[96,105260,95665],{"class":155},[96,105262,3722],{"class":106},[14,105264,105265],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[50,105267,105268,105277,105282],{},[53,105269,105270,105273,105274,105276],{},[93,105271,105272],{},"prefix","：一段文字，比如 ",[93,105275,104981],{},"，用来说明现在打印的是哪个阶段。",[53,105278,105279,105281],{},[93,105280,102064],{},"：MuJoCo 模型。",[53,105283,105284,105286],{},[93,105285,33380],{},"：MuJoCo 当前状态。",[14,105288,105289,319,105292,105295],{},[93,105290,105291],{},"prefix: str",[93,105293,105294],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[87,105297,105299],{"className":30357,"code":105298,"language":30359,"meta":18,"style":18},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[93,105300,105301],{"__ignoreMap":18},[96,105302,105303,105305,105307,105309,105311,105313],{"class":98,"line":99},[96,105304,30394],{"class":155},[96,105306,107],{"class":106},[96,105308,104906],{"class":211},[96,105310,104909],{"class":106},[96,105312,400],{"class":155},[96,105314,30476],{"class":106},[14,105316,105317,105320],{},[93,105318,105319],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[87,105322,105324],{"className":30357,"code":105323,"language":30359,"meta":18,"style":18},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[93,105325,105326,105338],{"__ignoreMap":18},[96,105327,105328,105330,105332,105334,105336],{"class":98,"line":99},[96,105329,101613],{"class":106},[96,105331,152],{"class":102},[96,105333,101391],{"class":106},[96,105335,101293],{"class":155},[96,105337,113],{"class":106},[96,105339,105340,105342,105344],{"class":98,"line":19},[96,105341,101637],{"class":106},[96,105343,152],{"class":102},[96,105345,101405],{"class":106},[14,105347,105348],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[87,105350,105352],{"className":30357,"code":105351,"language":30359,"meta":18,"style":18},"print_state(\"initial\", model, data)\n",[93,105353,105354],{"__ignoreMap":18},[96,105355,105356,105359,105361],{"class":98,"line":99},[96,105357,105358],{"class":106},"print_state(",[96,105360,104981],{"class":211},[96,105362,104984],{"class":106},[14,105364,105365,105366,105369],{},"调用刚才定义的 ",[93,105367,105368],{},"print_state"," 函数，打印初始状态。",[87,105371,105372],{"className":30357,"code":105159,"language":30359,"meta":18,"style":18},[93,105373,105374,105390],{"__ignoreMap":18},[96,105375,105376,105378,105380,105382,105384,105386,105388],{"class":98,"line":99},[96,105377,3008],{"class":102},[96,105379,101480],{"class":106},[96,105381,26022],{"class":102},[96,105383,32422],{"class":155},[96,105385,107],{"class":106},[96,105387,763],{"class":155},[96,105389,30765],{"class":106},[96,105391,105392],{"class":98,"line":19},[96,105393,101678],{"class":106},[14,105395,105396],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[87,105398,105399],{"className":30357,"code":104505,"language":30359,"meta":18,"style":18},[93,105400,105401],{"__ignoreMap":18},[96,105402,105403],{"class":98,"line":99},[96,105404,104505],{"class":106},[14,105406,105407,105408,105410,105411,105413],{},"重置 ",[93,105409,33380],{},"。注意它不会重新创建 ",[93,105412,102064],{},"，因为模型结构没有变，只是状态回到初始值。",[87,105415,105416],{"className":30357,"code":104671,"language":30359,"meta":18,"style":18},[93,105417,105418],{"__ignoreMap":18},[96,105419,105420,105422,105424,105426,105428],{"class":98,"line":99},[96,105421,104678],{"class":106},[96,105423,184],{"class":155},[96,105425,4426],{"class":106},[96,105427,152],{"class":102},[96,105429,104687],{"class":155},[14,105431,105432,105433,319,105436,319,105439,105441],{},"这行是“手动改状态”。在 freejoint 中，",[93,105434,105435],{},"qpos[0]",[93,105437,105438],{},"qpos[1]",[93,105440,105235],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[87,105443,105444],{"className":30357,"code":104522,"language":30359,"meta":18,"style":18},[93,105445,105446],{"__ignoreMap":18},[96,105447,105448],{"class":98,"line":99},[96,105449,104522],{"class":106},[14,105451,105452,105453,105455,105456,105458],{},"手动改完 ",[93,105454,104009],{}," 后，调用 ",[93,105457,104229],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[38,105460,102295],{"id":102294},[14,105462,105463],{},"你会看到:",[50,105465,105466,105471,105476,105479],{},[53,105467,105468,105469],{},"初始时间为 ",[93,105470,298],{},[53,105472,105473,105474],{},"50 步后时间约为 ",[93,105475,35308],{},[53,105477,105478],{},"reset 后状态恢复",[53,105480,105481,105482,105485,105486],{},"手动修改 ",[93,105483,105484],{},"data.qpos[2]"," 后，小球高度变为 ",[93,105487,105239],{},[14,105489,105490,105492],{},[93,105491,105235],{}," 在这个例子中表示自由刚体的 z 坐标。",[14,105494,105495],{},"输出里可以重点看三件事：",[50,105497,105498,105506,105511],{},[53,105499,105500,105502,105503,105505],{},[93,105501,2370],{}," 是否随着 ",[93,105504,101194],{}," 增加。",[53,105507,105508,105510],{},[93,105509,104009],{}," 的 z 坐标是否因为下落而变化。",[53,105512,105513,105515,105516,28364],{},[93,105514,104331],{}," 后时间是否回到 ",[93,105517,298],{},[38,105519,102327],{"id":102326},[50,105521,105522,105528,105534,105540,105543,105552],{},[53,105523,105524,105525,28364],{},"修改 timestep 为 ",[93,105526,105527],{},"0.005",[53,105529,105530,105531,28364],{},"重新运行，检查 50 步后时间是否约为 ",[93,105532,105533],{},"0.25",[53,105535,105536,105537,28364],{},"修改重力为 ",[93,105538,105539],{},"0 0 -1.0",[53,105541,105542],{},"观察小球下降速度是否变慢。",[53,105544,102390,105545,102393,105548,105551],{},[93,105546,105547],{},"data.qpos[2] = 2.0",[93,105549,105550],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[53,105553,105554,105555,105558],{},"注释掉 ",[93,105556,105557],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[38,105560,102432],{"id":102431},[67,105562,105564,105565,105567],{"id":105563},"修改-dataqpos-后位置没有更新","修改 ",[93,105566,101049],{}," 后位置没有更新",[14,105569,102441],{},[87,105571,105572],{"className":30357,"code":104522,"language":30359,"meta":18,"style":18},[93,105573,105574],{"__ignoreMap":18},[96,105575,105576],{"class":98,"line":99},[96,105577,104522],{"class":106},[67,105579,105580],{"id":105580},"数组维度看不懂",[14,105582,105583],{},"打印模型维度:",[87,105585,105587],{"className":30357,"code":105586,"language":30359,"meta":18,"style":18},"print(model.nq, model.nv, model.nu)\n",[93,105588,105589],{"__ignoreMap":18},[96,105590,105591,105593],{"class":98,"line":99},[96,105592,30394],{"class":155},[96,105594,105595],{"class":106},"(model.nq, model.nv, model.nu)\n",[244,105597,105598,105606],{},[247,105599,105600],{},[250,105601,105602,105604],{},[253,105603,104553],{"align":23721},[253,105605,100679],{"align":23721},[291,105607,105608,105618,105628],{},[250,105609,105610,105615],{},[296,105611,105612],{"align":23721},[93,105613,105614],{},"nq",[296,105616,105617],{"align":23721},"位置变量数量",[250,105619,105620,105625],{},[296,105621,105622],{"align":23721},[93,105623,105624],{},"nv",[296,105626,105627],{"align":23721},"速度变量数量",[250,105629,105630,105634],{},[296,105631,105632],{"align":23721},[93,105633,102141],{},[296,105635,105636],{"align":23721},"控制输入数量",[67,105638,105640,105641,105643],{"id":105639},"误以为-qpos-一定等于关节数","误以为 ",[93,105642,104009],{}," 一定等于关节数",[14,105645,105646,105647,82509,105649,105651,105652,105654],{},"不是。例如 ",[93,105648,101599],{},[93,105650,104009],{}," 是 7 维，但 ",[93,105653,104339],{}," 是 6 维。",[67,105656,105658,105659,105661],{"id":105657},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[93,105660,104009],{}," 的第几位",[14,105663,105664],{},"初学时可以先打印：",[87,105666,105668],{"className":30357,"code":105667,"language":30359,"meta":18,"style":18},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[93,105669,105670,105680,105690,105702],{"__ignoreMap":18},[96,105671,105672,105674,105676,105678],{"class":98,"line":99},[96,105673,30394],{"class":155},[96,105675,107],{"class":106},[96,105677,101418],{"class":211},[96,105679,101421],{"class":106},[96,105681,105682,105684,105686,105688],{"class":98,"line":19},[96,105683,30394],{"class":155},[96,105685,107],{"class":106},[96,105687,101430],{"class":211},[96,105689,101433],{"class":106},[96,105691,105692,105694,105696,105699],{"class":98,"line":1162},[96,105693,30394],{"class":155},[96,105695,107],{"class":106},[96,105697,105698],{"class":211},"\"qpos:\"",[96,105700,105701],{"class":106},", data.qpos)\n",[96,105703,105704,105706,105708,105711],{"class":98,"line":1177},[96,105705,30394],{"class":155},[96,105707,107],{"class":106},[96,105709,105710],{"class":211},"\"qvel:\"",[96,105712,105713],{"class":106},", data.qvel)\n",[14,105715,105716],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[67,105718,105719],{"id":105719},"仿真结果每次都一样",[14,105721,105722,105723,105725],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[93,105724,104009],{},"、目标点或控制输入。",[38,105727,102586],{"id":102585},[14,105729,105730,105731,24597],{},"Python 控制 MuJoCo 的核心就是读写 ",[93,105732,33380],{},[50,105734,105735,105743,105748,105753],{},[53,105736,105737,105738,100997,105740,105742],{},"用 ",[93,105739,101049],{},[93,105741,101052],{}," 读取状态。",[53,105744,105737,105745,105747],{},[93,105746,101055],{}," 写入控制。",[53,105749,105737,105750,105752],{},[93,105751,101194],{}," 推进时间。",[53,105754,105755,105756,105758],{},"手动改状态后用 ",[93,105757,104229],{}," 刷新派生量。",[14,105760,105761],{},"理解这一章后，就可以进入关节和 actuator 控制。",[5110,105763,105764],{},"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":18,"searchDepth":19,"depth":19,"links":105766},[105767,105768,105769,105776,105780,105781,105782,105792],{"id":100625,"depth":19,"text":100626},{"id":100748,"depth":19,"text":100749},{"id":101023,"depth":19,"text":101024,"children":105770},[105771,105773,105775],{"id":104534,"depth":1162,"text":105772},"qpos、qvel、ctrl 是什么",{"id":104612,"depth":1162,"text":105774},"mj_step 和 mj_forward 的区别",{"id":104701,"depth":1162,"text":104702},{"id":101231,"depth":19,"text":101232,"children":105777},[105778,105779],{"id":101551,"depth":1162,"text":101551},{"id":101687,"depth":1162,"text":101687},{"id":102294,"depth":19,"text":102295},{"id":102326,"depth":19,"text":102327},{"id":102431,"depth":19,"text":102432,"children":105783},[105784,105786,105787,105789,105791],{"id":105563,"depth":1162,"text":105785},"修改 data.qpos 后位置没有更新",{"id":105580,"depth":1162,"text":105580},{"id":105639,"depth":1162,"text":105788},"误以为 qpos 一定等于关节数",{"id":105657,"depth":1162,"text":105790},"不知道某个元素在 qpos 的第几位",{"id":105719,"depth":1162,"text":105719},{"id":102585,"depth":19,"text":102586},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104297,"description":18},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105799,"title":105800,"body":105801,"description":18,"extension":21,"meta":107491,"navigation":23,"path":107492,"seo":107493,"stem":107494,"__hash__":107495},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105802,"toc":107467},[105803,105806,105808,105811,105813,105838,105841,105860,105863,105865,105867,105891,105893,105907,105909,105950,105952,105976,105978,105981,106015,106017,106030,106033,106101,106110,106114,106117,106151,106157,106160,106164,106203,106206,106226,106230,106273,106275,106304,106307,106313,106316,106318,106712,106714,106726,106728,106739,106741,106744,106773,106781,106784,106819,106822,106824,106832,106835,106837,106848,106858,106878,106881,106917,106929,106977,106996,107038,107051,107079,107084,107105,107115,107133,107136,107170,107173,107193,107196,107215,107221,107223,107226,107232,107238,107248,107251,107257,107266,107268,107314,107316,107322,107328,107331,107334,107354,107357,107363,107369,107371,107394,107397,107400,107409,107412,107450,107452,107455,107461,107464],[10,105804,105800],{"id":105805},"_4关节actuator-与力控制",[38,105807,100626],{"id":100625},[14,105809,105810],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[14,105812,104310],{},[50,105814,105815,105821,105826,105830,105835],{},[53,105816,105817,105820],{},[93,105818,105819],{},"hinge"," 关节",[53,105822,105823],{},[93,105824,105825],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[53,105827,105828],{},[93,105829,101055],{},[53,105831,105832],{},[93,105833,105834],{},"ctrlrange",[53,105836,105837],{},"读取关节角和角速度",[14,105839,105840],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[87,105842,105844],{"className":30357,"code":105843,"language":30359,"meta":18,"style":18},"data.ctrl[0] = ...\n",[93,105845,105846],{"__ignoreMap":18},[96,105847,105848,105851,105853,105855,105857],{"class":98,"line":99},[96,105849,105850],{"class":106},"data.ctrl[",[96,105852,298],{"class":155},[96,105854,4426],{"class":106},[96,105856,152],{"class":102},[96,105858,105859],{"class":155}," ...\n",[14,105861,105862],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[38,105864,100749],{"id":100748},[14,105866,100752],{},[87,105868,105869],{"className":23807,"code":104367,"language":23809,"meta":18,"style":18},[93,105870,105871],{"__ignoreMap":18},[96,105872,105873,105875,105877,105879,105881,105883,105885,105887,105889],{"class":98,"line":99},[96,105874,24555],{"class":1946},[96,105876,26294],{"class":211},[96,105878,23819],{"class":211},[96,105880,26379],{"class":155},[96,105882,104382],{"class":211},[96,105884,100777],{"class":211},[96,105886,102480],{"class":211},[96,105888,100793],{"class":211},[96,105890,104391],{"class":211},[14,105892,102798],{},[87,105894,105895],{"className":23807,"code":100898,"language":23809,"meta":18,"style":18},[93,105896,105897],{"__ignoreMap":18},[96,105898,105899,105901,105903,105905],{"class":98,"line":99},[96,105900,23816],{"class":1946},[96,105902,23819],{"class":211},[96,105904,100909],{"class":211},[96,105906,100912],{"class":211},[14,105908,102815],{},[87,105910,105912],{"className":23807,"code":105911,"language":23809,"meta":18,"style":18},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[93,105913,105914,105931,105940],{"__ignoreMap":18},[96,105915,105916,105918,105920,105922,105925,105927,105929],{"class":98,"line":99},[96,105917,30309],{"class":1946},[96,105919,29155],{"class":211},[96,105921,25094],{"class":155},[96,105923,105924],{"class":211}," mujoco-control",[96,105926,100954],{"class":211},[96,105928,100957],{"class":155},[96,105930,100960],{"class":155},[96,105932,105933,105935,105937],{"class":98,"line":19},[96,105934,30309],{"class":1946},[96,105936,100967],{"class":211},[96,105938,105939],{"class":211}," mujoco-control\n",[96,105941,105942,105944,105946,105948],{"class":98,"line":1162},[96,105943,23816],{"class":1946},[96,105945,23819],{"class":211},[96,105947,100909],{"class":211},[96,105949,100912],{"class":211},[14,105951,100983],{},[50,105953,105954,105960,105967,105973],{},[53,105955,105956,105959],{},[93,105957,105958],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[53,105961,105962,105964,105965,28364],{},[93,105963,101055],{}," 长度等于 ",[93,105966,102137],{},[53,105968,82201,105969,105972],{},[93,105970,105971],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[53,105974,105975],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[38,105977,101024],{"id":101023},[14,105979,105980],{},"关节决定 body 如何运动:",[87,105982,105984],{"className":53046,"code":105983,"language":53048,"meta":18,"style":18},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[93,105985,105986],{"__ignoreMap":18},[96,105987,105988,105990,105992,105994,105996,105999,106001,106003,106005,106008,106010,106013],{"class":98,"line":99},[96,105989,1017],{"class":106},[96,105991,102935],{"class":51279},[96,105993,14904],{"class":1946},[96,105995,152],{"class":106},[96,105997,105998],{"class":211},"\"hinge\"",[96,106000,53803],{"class":1946},[96,106002,152],{"class":106},[96,106004,105998],{"class":211},[96,106006,106007],{"class":1946}," axis",[96,106009,152],{"class":106},[96,106011,106012],{"class":211},"\"0 1 0\"",[96,106014,101123],{"class":106},[14,106016,103031],{},[50,106018,106019,106024,106027],{},[53,106020,106021,106022],{},"名字是 ",[93,106023,105819],{},[53,106025,106026],{},"类型是旋转关节",[53,106028,106029],{},"绕 y 轴旋转",[14,106031,106032],{},"actuator 决定如何施加控制:",[87,106034,106036],{"className":53046,"code":106035,"language":53048,"meta":18,"style":18},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[93,106037,106038,106047,106093],{"__ignoreMap":18},[96,106039,106040,106042,106045],{"class":98,"line":99},[96,106041,1017],{"class":106},[96,106043,106044],{"class":51279},"actuator",[96,106046,51286],{"class":106},[96,106048,106049,106051,106054,106056,106058,106061,106064,106066,106068,106071,106073,106075,106078,106080,106083,106086,106088,106091],{"class":98,"line":19},[96,106050,52123],{"class":106},[96,106052,106053],{"class":51279},"motor",[96,106055,14904],{"class":1946},[96,106057,152],{"class":106},[96,106059,106060],{"class":211},"\"hinge_motor\"",[96,106062,106063],{"class":1946}," joint",[96,106065,152],{"class":106},[96,106067,105998],{"class":211},[96,106069,106070],{"class":1946}," gear",[96,106072,152],{"class":106},[96,106074,3661],{"class":211},[96,106076,106077],{"class":1946}," ctrlrange",[96,106079,152],{"class":106},[96,106081,106082],{"class":211},"\"-2 2\"",[96,106084,106085],{"class":1946}," ctrllimited",[96,106087,152],{"class":106},[96,106089,106090],{"class":211},"\"true\"",[96,106092,101123],{"class":106},[96,106094,106095,106097,106099],{"class":98,"line":1162},[96,106096,51764],{"class":106},[96,106098,106044],{"class":51279},[96,106100,51286],{"class":106},[14,106102,106103,106106,106107,28364],{},[93,106104,106105],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[93,106108,106109],{},"[-2, 2]",[67,106111,106113],{"id":106112},"joint-和-actuator-的关系","joint 和 actuator 的关系",[14,106115,106116],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[244,106118,106119,106129],{},[247,106120,106121],{},[250,106122,106123,106125,106127],{},[253,106124,25732],{"align":23721},[253,106126,102675],{"align":23721},[253,106128,100713],{"align":23721},[291,106130,106131,106141],{},[250,106132,106133,106135,106138],{},[296,106134,102935],{"align":23721},[296,106136,106137],{"align":23721},"定义能怎么动",[296,106139,106140],{"align":23721},"门轴允许门旋转",[250,106142,106143,106145,106148],{},[296,106144,106044],{"align":23721},[296,106146,106147],{"align":23721},"定义怎么施力或控制",[296,106149,106150],{"align":23721},"人推门、马达带动门",[14,106152,106153,106154,106156],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[93,106155,101055],{}," 主动控制它。",[14,106158,106159],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[67,106161,106163],{"id":106162},"hinge-joint","hinge joint",[87,106165,106167],{"className":53046,"code":106166,"language":53048,"meta":18,"style":18},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[93,106168,106169],{"__ignoreMap":18},[96,106170,106171,106173,106175,106177,106179,106181,106183,106185,106187,106189,106191,106193,106196,106198,106201],{"class":98,"line":99},[96,106172,1017],{"class":106},[96,106174,102935],{"class":51279},[96,106176,14904],{"class":1946},[96,106178,152],{"class":106},[96,106180,105998],{"class":211},[96,106182,53803],{"class":1946},[96,106184,152],{"class":106},[96,106186,105998],{"class":211},[96,106188,106007],{"class":1946},[96,106190,152],{"class":106},[96,106192,106012],{"class":211},[96,106194,106195],{"class":1946}," damping",[96,106197,152],{"class":106},[96,106199,106200],{"class":211},"\"0.1\"",[96,106202,101123],{"class":106},[14,106204,106205],{},"含义：",[50,106207,106208,106214,106220],{},[53,106209,106210,106213],{},[93,106211,106212],{},"type=\"hinge\"","：只能绕一个轴旋转。",[53,106215,106216,106219],{},[93,106217,106218],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[53,106221,106222,106225],{},[93,106223,106224],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[67,106227,106229],{"id":106228},"motor-actuator","motor actuator",[87,106231,106233],{"className":53046,"code":106232,"language":53048,"meta":18,"style":18},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[93,106234,106235],{"__ignoreMap":18},[96,106236,106237,106239,106241,106243,106245,106247,106249,106251,106253,106255,106257,106259,106261,106263,106265,106267,106269,106271],{"class":98,"line":99},[96,106238,1017],{"class":106},[96,106240,106053],{"class":51279},[96,106242,14904],{"class":1946},[96,106244,152],{"class":106},[96,106246,106060],{"class":211},[96,106248,106063],{"class":1946},[96,106250,152],{"class":106},[96,106252,105998],{"class":211},[96,106254,106070],{"class":1946},[96,106256,152],{"class":106},[96,106258,3661],{"class":211},[96,106260,106077],{"class":1946},[96,106262,152],{"class":106},[96,106264,106082],{"class":211},[96,106266,106085],{"class":1946},[96,106268,152],{"class":106},[96,106270,106090],{"class":211},[96,106272,101123],{"class":106},[14,106274,106205],{},[50,106276,106277,106286,106292,106298],{},[53,106278,106279,106282,106283,106285],{},[93,106280,106281],{},"joint=\"hinge\"","：这个电机作用在名为 ",[93,106284,105819],{}," 的关节上。",[53,106287,106288,106291],{},[93,106289,106290],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[53,106293,106294,106297],{},[93,106295,106296],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[53,106299,106300,106303],{},[93,106301,106302],{},"ctrllimited=\"true\"","：启用控制范围限制。",[14,106305,106306],{},"简单理解：",[87,106308,106311],{"className":106309,"code":106310,"language":5171,"meta":18},[5169],"实际施加效果 ≈ data.ctrl[0] * gear\n",[93,106312,106310],{"__ignoreMap":18},[14,106314,106315],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[38,106317,101232],{"id":101231},[87,106319,106321],{"className":30357,"code":106320,"language":30359,"meta":18,"style":18},"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",[93,106322,106323,106330,106334,106340,106350,106354,106358,106366,106371,106376,106380,106384,106389,106394,106398,106403,106408,106413,106418,106422,106426,106430,106435,106440,106445,106449,106453,106457,106461,106473,106485,106493,106497,106507,106517,106527,106531,106544,106557,106561,106578,106592,106627,106631,106635,106646,106661,106676,106688,106692,106696,106708],{"__ignoreMap":18},[96,106324,106325,106327],{"class":98,"line":99},[96,106326,30371],{"class":102},[96,106328,106329],{"class":106}," math\n",[96,106331,106332],{"class":98,"line":19},[96,106333,2383],{"emptyLinePlaceholder":23},[96,106335,106336,106338],{"class":98,"line":1162},[96,106337,30371],{"class":102},[96,106339,101280],{"class":106},[96,106341,106342,106344,106346,106348],{"class":98,"line":1177},[96,106343,30371],{"class":102},[96,106345,31359],{"class":106},[96,106347,31362],{"class":102},[96,106349,31365],{"class":106},[96,106351,106352],{"class":98,"line":1183},[96,106353,2383],{"emptyLinePlaceholder":23},[96,106355,106356],{"class":98,"line":1197},[96,106357,2383],{"emptyLinePlaceholder":23},[96,106359,106360,106362,106364],{"class":98,"line":1203},[96,106361,101293],{"class":155},[96,106363,13548],{"class":102},[96,106365,101298],{"class":211},[96,106367,106368],{"class":98,"line":1294},[96,106369,106370],{"class":211},"\u003Cmujoco model=\"one_link_motor\">\n",[96,106372,106373],{"class":98,"line":1300},[96,106374,106375],{"class":211},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[96,106377,106378],{"class":98,"line":1312},[96,106379,2383],{"emptyLinePlaceholder":23},[96,106381,106382],{"class":98,"line":1595},[96,106383,101317],{"class":211},[96,106385,106386],{"class":98,"line":1600},[96,106387,106388],{"class":211},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[96,106390,106391],{"class":98,"line":1606},[96,106392,106393],{"class":211},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[96,106395,106396],{"class":98,"line":1611},[96,106397,2383],{"emptyLinePlaceholder":23},[96,106399,106400],{"class":98,"line":1625},[96,106401,106402],{"class":211},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[96,106404,106405],{"class":98,"line":1630},[96,106406,106407],{"class":211},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[96,106409,106410],{"class":98,"line":1636},[96,106411,106412],{"class":211},"        \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",[96,106414,106415],{"class":98,"line":1657},[96,106416,106417],{"class":211},"      \u003C\u002Fbody>\n",[96,106419,106420],{"class":98,"line":1662},[96,106421,101346],{"class":211},[96,106423,106424],{"class":98,"line":1676},[96,106425,101351],{"class":211},[96,106427,106428],{"class":98,"line":1681},[96,106429,2383],{"emptyLinePlaceholder":23},[96,106431,106432],{"class":98,"line":1710},[96,106433,106434],{"class":211},"  \u003Cactuator>\n",[96,106436,106437],{"class":98,"line":1715},[96,106438,106439],{"class":211},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[96,106441,106442],{"class":98,"line":1732},[96,106443,106444],{"class":211},"  \u003C\u002Factuator>\n",[96,106446,106447],{"class":98,"line":1737},[96,106448,101356],{"class":211},[96,106450,106451],{"class":98,"line":1742},[96,106452,95677],{"class":211},[96,106454,106455],{"class":98,"line":1747},[96,106456,2383],{"emptyLinePlaceholder":23},[96,106458,106459],{"class":98,"line":1761},[96,106460,2383],{"emptyLinePlaceholder":23},[96,106462,106463,106465,106467,106469,106471],{"class":98,"line":1766},[96,106464,31926],{"class":102},[96,106466,1956],{"class":1946},[96,106468,101377],{"class":106},[96,106470,95665],{"class":155},[96,106472,3722],{"class":106},[96,106474,106475,106477,106479,106481,106483],{"class":98,"line":2560},[96,106476,101386],{"class":106},[96,106478,152],{"class":102},[96,106480,101391],{"class":106},[96,106482,101293],{"class":155},[96,106484,113],{"class":106},[96,106486,106487,106489,106491],{"class":98,"line":2574},[96,106488,101400],{"class":106},[96,106490,152],{"class":102},[96,106492,101405],{"class":106},[96,106494,106495],{"class":98,"line":2582},[96,106496,2383],{"emptyLinePlaceholder":23},[96,106498,106499,106501,106503,106505],{"class":98,"line":2587},[96,106500,31278],{"class":155},[96,106502,107],{"class":106},[96,106504,101418],{"class":211},[96,106506,101421],{"class":106},[96,106508,106509,106511,106513,106515],{"class":98,"line":2593},[96,106510,31278],{"class":155},[96,106512,107],{"class":106},[96,106514,101430],{"class":211},[96,106516,101433],{"class":106},[96,106518,106519,106521,106523,106525],{"class":98,"line":2599},[96,106520,31278],{"class":155},[96,106522,107],{"class":106},[96,106524,101442],{"class":211},[96,106526,101445],{"class":106},[96,106528,106529],{"class":98,"line":2604},[96,106530,2383],{"emptyLinePlaceholder":23},[96,106532,106533,106535,106538,106540,106542],{"class":98,"line":7932},[96,106534,3084],{"class":102},[96,106536,106537],{"class":106}," model.nu ",[96,106539,20932],{"class":102},[96,106541,25097],{"class":155},[96,106543,3722],{"class":106},[96,106545,106546,106548,106550,106552,106555],{"class":98,"line":7956},[96,106547,103411],{"class":102},[96,106549,103414],{"class":155},[96,106551,107],{"class":106},[96,106553,106554],{"class":211},"\"expected exactly one actuator\"",[96,106556,113],{"class":106},[96,106558,106559],{"class":98,"line":7961},[96,106560,2383],{"emptyLinePlaceholder":23},[96,106562,106563,106565,106567,106569,106571,106573,106576],{"class":98,"line":7967},[96,106564,3184],{"class":102},[96,106566,31595],{"class":106},[96,106568,26022],{"class":102},[96,106570,32422],{"class":155},[96,106572,107],{"class":106},[96,106574,106575],{"class":155},"2000",[96,106577,30765],{"class":106},[96,106579,106580,106583,106585,106587,106589],{"class":98,"line":7994},[96,106581,106582],{"class":106},"        t ",[96,106584,152],{"class":102},[96,106586,31595],{"class":106},[96,106588,562],{"class":102},[96,106590,106591],{"class":106}," model.opt.timestep\n",[96,106593,106594,106597,106599,106601,106603,106606,106608,106611,106613,106615,106618,106620,106622,106624],{"class":98,"line":7999},[96,106595,106596],{"class":106},"        data.ctrl[",[96,106598,298],{"class":155},[96,106600,4426],{"class":106},[96,106602,152],{"class":102},[96,106604,106605],{"class":155}," 1.5",[96,106607,6502],{"class":102},[96,106609,106610],{"class":106}," math.sin(",[96,106612,105239],{"class":155},[96,106614,6502],{"class":102},[96,106616,106617],{"class":106}," math.pi ",[96,106619,562],{"class":102},[96,106621,61846],{"class":155},[96,106623,6502],{"class":102},[96,106625,106626],{"class":106}," t)\n",[96,106628,106629],{"class":98,"line":8005},[96,106630,101495],{"class":106},[96,106632,106633],{"class":98,"line":8017},[96,106634,2383],{"emptyLinePlaceholder":23},[96,106636,106637,106639,106641,106644],{"class":98,"line":8029},[96,106638,31278],{"class":155},[96,106640,107],{"class":106},[96,106642,106643],{"class":211},"\"time:\"",[96,106645,101457],{"class":106},[96,106647,106648,106650,106652,106655,106657,106659],{"class":98,"line":8041},[96,106649,31278],{"class":155},[96,106651,107],{"class":106},[96,106653,106654],{"class":211},"\"joint qpos:\"",[96,106656,104909],{"class":106},[96,106658,400],{"class":155},[96,106660,30476],{"class":106},[96,106662,106663,106665,106667,106670,106672,106674],{"class":98,"line":9700},[96,106664,31278],{"class":155},[96,106666,107],{"class":106},[96,106668,106669],{"class":211},"\"joint qvel:\"",[96,106671,104925],{"class":106},[96,106673,400],{"class":155},[96,106675,30476],{"class":106},[96,106677,106678,106680,106682,106685],{"class":98,"line":9725},[96,106679,31278],{"class":155},[96,106681,107],{"class":106},[96,106683,106684],{"class":211},"\"last ctrl:\"",[96,106686,106687],{"class":106},", data.ctrl.copy())\n",[96,106689,106690],{"class":98,"line":9748},[96,106691,2383],{"emptyLinePlaceholder":23},[96,106693,106694],{"class":98,"line":9772},[96,106695,2383],{"emptyLinePlaceholder":23},[96,106697,106698,106700,106702,106704,106706],{"class":98,"line":9777},[96,106699,1514],{"class":102},[96,106701,31199],{"class":155},[96,106703,101538],{"class":102},[96,106705,101541],{"class":211},[96,106707,3722],{"class":106},[96,106709,106710],{"class":98,"line":9782},[96,106711,101548],{"class":106},[14,106713,103549],{},[87,106715,106717],{"className":23807,"code":106716,"language":23809,"meta":18,"style":18},"touch ch4_joint_motor.py\n",[93,106718,106719],{"__ignoreMap":18},[96,106720,106721,106723],{"class":98,"line":99},[96,106722,101262],{"class":1946},[96,106724,106725],{"class":211}," ch4_joint_motor.py\n",[14,106727,102280],{},[87,106729,106731],{"className":23807,"code":106730,"language":23809,"meta":18,"style":18},"python ch4_joint_motor.py\n",[93,106732,106733],{"__ignoreMap":18},[96,106734,106735,106737],{"class":98,"line":99},[96,106736,30359],{"class":1946},[96,106738,106725],{"class":211},[67,106740,101551],{"id":101551},[14,106742,106743],{},"检查 actuator 数量：",[87,106745,106747],{"className":30357,"code":106746,"language":30359,"meta":18,"style":18},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[93,106748,106749,106761],{"__ignoreMap":18},[96,106750,106751,106753,106755,106757,106759],{"class":98,"line":99},[96,106752,1514],{"class":102},[96,106754,106537],{"class":106},[96,106756,20932],{"class":102},[96,106758,25097],{"class":155},[96,106760,3722],{"class":106},[96,106762,106763,106765,106767,106769,106771],{"class":98,"line":19},[96,106764,103874],{"class":102},[96,106766,103414],{"class":155},[96,106768,107],{"class":106},[96,106770,106554],{"class":211},[96,106772,113],{"class":106},[14,106774,106775,106777,106778,106780],{},[93,106776,102137],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[93,106779,101055],{}," 长度应该是 1。",[14,106782,106783],{},"产生正弦控制信号：",[87,106785,106787],{"className":30357,"code":106786,"language":30359,"meta":18,"style":18},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[93,106788,106789],{"__ignoreMap":18},[96,106790,106791,106793,106795,106797,106799,106801,106803,106805,106807,106809,106811,106813,106815,106817],{"class":98,"line":99},[96,106792,105850],{"class":106},[96,106794,298],{"class":155},[96,106796,4426],{"class":106},[96,106798,152],{"class":102},[96,106800,106605],{"class":155},[96,106802,6502],{"class":102},[96,106804,106610],{"class":106},[96,106806,105239],{"class":155},[96,106808,6502],{"class":102},[96,106810,106617],{"class":106},[96,106812,562],{"class":102},[96,106814,61846],{"class":155},[96,106816,6502],{"class":102},[96,106818,106626],{"class":106},[14,106820,106821],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[14,106823,101652],{},[87,106825,106826],{"className":30357,"code":104484,"language":30359,"meta":18,"style":18},[93,106827,106828],{"__ignoreMap":18},[96,106829,106830],{"class":98,"line":99},[96,106831,104484],{"class":106},[14,106833,106834],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[67,106836,101687],{"id":101687},[87,106838,106840],{"className":30357,"code":106839,"language":30359,"meta":18,"style":18},"import math\n",[93,106841,106842],{"__ignoreMap":18},[96,106843,106844,106846],{"class":98,"line":99},[96,106845,30371],{"class":102},[96,106847,106329],{"class":106},[14,106849,106850,106851,100997,106854,106857],{},"导入 Python 标准库里的数学模块。后面要用 ",[93,106852,106853],{},"math.sin",[93,106855,106856],{},"math.pi"," 生成周期变化的控制信号。",[87,106859,106860],{"className":30357,"code":103665,"language":30359,"meta":18,"style":18},[93,106861,106862,106868],{"__ignoreMap":18},[96,106863,106864,106866],{"class":98,"line":99},[96,106865,30371],{"class":102},[96,106867,101280],{"class":106},[96,106869,106870,106872,106874,106876],{"class":98,"line":19},[96,106871,30371],{"class":102},[96,106873,31359],{"class":106},[96,106875,31362],{"class":102},[96,106877,31365],{"class":106},[14,106879,106880],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[87,106882,106883],{"className":53046,"code":106166,"language":53048,"meta":18,"style":18},[93,106884,106885],{"__ignoreMap":18},[96,106886,106887,106889,106891,106893,106895,106897,106899,106901,106903,106905,106907,106909,106911,106913,106915],{"class":98,"line":99},[96,106888,1017],{"class":106},[96,106890,102935],{"class":51279},[96,106892,14904],{"class":1946},[96,106894,152],{"class":106},[96,106896,105998],{"class":211},[96,106898,53803],{"class":1946},[96,106900,152],{"class":106},[96,106902,105998],{"class":211},[96,106904,106007],{"class":1946},[96,106906,152],{"class":106},[96,106908,106012],{"class":211},[96,106910,106195],{"class":1946},[96,106912,152],{"class":106},[96,106914,106200],{"class":211},[96,106916,101123],{"class":106},[14,106918,106919,106920,106922,106923,106925,106926,106928],{},"这行定义关节。",[93,106921,105819],{}," 表示旋转关节。",[93,106924,106218],{}," 表示绕 y 轴旋转。",[93,106927,106224],{}," 表示有一点阻尼，运动不会完全无损耗。",[87,106930,106932],{"className":53046,"code":106931,"language":53048,"meta":18,"style":18},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[93,106933,106934],{"__ignoreMap":18},[96,106935,106936,106938,106940,106942,106944,106947,106949,106951,106954,106957,106959,106962,106964,106966,106968,106970,106972,106975],{"class":98,"line":99},[96,106937,1017],{"class":106},[96,106939,101099],{"class":51279},[96,106941,14904],{"class":1946},[96,106943,152],{"class":106},[96,106945,106946],{"class":211},"\"link_geom\"",[96,106948,53803],{"class":1946},[96,106950,152],{"class":106},[96,106952,106953],{"class":211},"\"capsule\"",[96,106955,106956],{"class":1946}," fromto",[96,106958,152],{"class":106},[96,106960,106961],{"class":211},"\"0 0 0 0 0 0.5\"",[96,106963,101115],{"class":1946},[96,106965,152],{"class":106},[96,106967,103757],{"class":211},[96,106969,101980],{"class":1946},[96,106971,152],{"class":106},[96,106973,106974],{"class":211},"\"0.5\"",[96,106976,101123],{"class":106},[14,106978,106979,106980,106982,106983,106985,106986,106989,106990,28364,106993,106995],{},"这行定义摆杆的形状。",[93,106981,103144],{}," 是胶囊体，适合表示杆子。",[93,106984,103155],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[93,106987,106988],{},"(0,0,0)"," 延伸到 ",[93,106991,106992],{},"(0,0,0.5)",[93,106994,103149],{}," 是半径。",[87,106997,106998],{"className":53046,"code":106232,"language":53048,"meta":18,"style":18},[93,106999,107000],{"__ignoreMap":18},[96,107001,107002,107004,107006,107008,107010,107012,107014,107016,107018,107020,107022,107024,107026,107028,107030,107032,107034,107036],{"class":98,"line":99},[96,107003,1017],{"class":106},[96,107005,106053],{"class":51279},[96,107007,14904],{"class":1946},[96,107009,152],{"class":106},[96,107011,106060],{"class":211},[96,107013,106063],{"class":1946},[96,107015,152],{"class":106},[96,107017,105998],{"class":211},[96,107019,106070],{"class":1946},[96,107021,152],{"class":106},[96,107023,3661],{"class":211},[96,107025,106077],{"class":1946},[96,107027,152],{"class":106},[96,107029,106082],{"class":211},[96,107031,106085],{"class":1946},[96,107033,152],{"class":106},[96,107035,106090],{"class":211},[96,107037,101123],{"class":106},[14,107039,107040,107041,107043,107044,107047,107048,107050],{},"这行定义电机。它作用在 ",[93,107042,105819],{}," 关节上。",[93,107045,107046],{},"gear"," 可以理解成放大倍数。",[93,107049,105834],{}," 限制控制输入范围。",[87,107052,107053],{"className":30357,"code":106746,"language":30359,"meta":18,"style":18},[93,107054,107055,107067],{"__ignoreMap":18},[96,107056,107057,107059,107061,107063,107065],{"class":98,"line":99},[96,107058,1514],{"class":102},[96,107060,106537],{"class":106},[96,107062,20932],{"class":102},[96,107064,25097],{"class":155},[96,107066,3722],{"class":106},[96,107068,107069,107071,107073,107075,107077],{"class":98,"line":19},[96,107070,103874],{"class":102},[96,107072,103414],{"class":155},[96,107074,107],{"class":106},[96,107076,106554],{"class":211},[96,107078,113],{"class":106},[14,107080,107081,107083],{},[93,107082,102137],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[87,107085,107087],{"className":30357,"code":107086,"language":30359,"meta":18,"style":18},"for step in range(2000):\n",[93,107088,107089],{"__ignoreMap":18},[96,107090,107091,107093,107095,107097,107099,107101,107103],{"class":98,"line":99},[96,107092,3008],{"class":102},[96,107094,31595],{"class":106},[96,107096,26022],{"class":102},[96,107098,32422],{"class":155},[96,107100,107],{"class":106},[96,107102,106575],{"class":155},[96,107104,30765],{"class":106},[14,107106,107107,107108,107110,107111,107114],{},"循环 2000 步。这里没有用 ",[93,107109,1099],{},"，而是用 ",[93,107112,107113],{},"step","，因为后面要用当前步数计算时间。",[87,107116,107118],{"className":30357,"code":107117,"language":30359,"meta":18,"style":18},"t = step * model.opt.timestep\n",[93,107119,107120],{"__ignoreMap":18},[96,107121,107122,107125,107127,107129,107131],{"class":98,"line":99},[96,107123,107124],{"class":106},"t ",[96,107126,152],{"class":102},[96,107128,31595],{"class":106},[96,107130,562],{"class":102},[96,107132,106591],{"class":106},[14,107134,107135],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[87,107137,107138],{"className":30357,"code":106786,"language":30359,"meta":18,"style":18},[93,107139,107140],{"__ignoreMap":18},[96,107141,107142,107144,107146,107148,107150,107152,107154,107156,107158,107160,107162,107164,107166,107168],{"class":98,"line":99},[96,107143,105850],{"class":106},[96,107145,298],{"class":155},[96,107147,4426],{"class":106},[96,107149,152],{"class":102},[96,107151,106605],{"class":155},[96,107153,6502],{"class":102},[96,107155,106610],{"class":106},[96,107157,105239],{"class":155},[96,107159,6502],{"class":102},[96,107161,106617],{"class":106},[96,107163,562],{"class":102},[96,107165,61846],{"class":155},[96,107167,6502],{"class":102},[96,107169,106626],{"class":106},[14,107171,107172],{},"这行给电机输入一个正弦波。拆开看：",[50,107174,107175,107181,107187],{},[53,107176,107177,107180],{},[93,107178,107179],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[53,107182,107183,107186],{},[93,107184,107185],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[53,107188,107189,107192],{},[93,107190,107191],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[14,107194,107195],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[87,107197,107199],{"className":30357,"code":107198,"language":30359,"meta":18,"style":18},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[93,107200,107201],{"__ignoreMap":18},[96,107202,107203,107205,107207,107209,107211,107213],{"class":98,"line":99},[96,107204,30394],{"class":155},[96,107206,107],{"class":106},[96,107208,106654],{"class":211},[96,107210,104909],{"class":106},[96,107212,400],{"class":155},[96,107214,30476],{"class":106},[14,107216,107217,107218,107220],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[93,107219,101049],{}," 只有一个数。",[38,107222,102295],{"id":102294},[14,107224,107225],{},"输出类似:",[87,107227,107230],{"className":107228,"code":107229,"language":5171,"meta":18},[5169],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[93,107231,107229],{"__ignoreMap":18},[14,107233,107234,107235,107237],{},"这里 ",[93,107236,106105],{}," 是电机输入。",[14,107239,107240,107243,107244,107247],{},[93,107241,107242],{},"joint qpos"," 是关节角度，单位通常是弧度。",[93,107245,107246],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[14,107249,107250],{},"角度单位提示：",[87,107252,107255],{"className":107253,"code":107254,"language":5171,"meta":18},[5169],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[93,107256,107254],{"__ignoreMap":18},[14,107258,107259,107260,107262,107263,107265],{},"如果你看到 ",[93,107261,104009],{}," 是 ",[93,107264,35308],{},"，大约就是 28.6 度。",[38,107267,102327],{"id":102326},[50,107269,107270,107277,107280,107287,107290,107298,107306],{},[53,107271,102390,107272,102393,107274,28364],{},[93,107273,106290],{},[93,107275,107276],{},"gear=\"5\"",[53,107278,107279],{},"重新运行，观察关节运动是否更剧烈。",[53,107281,102390,107282,102393,107284,28364],{},[93,107283,105834],{},[93,107285,107286],{},"-0.2 0.2",[53,107288,107289],{},"重新运行，观察控制能力是否变弱。",[53,107291,107292,107293,107295,107296,28364],{},"去掉 actuator，确认 ",[93,107294,102137],{}," 变成 ",[93,107297,298],{},[53,107299,102390,107300,102393,107302,107305],{},[93,107301,106224],{},[93,107303,107304],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[53,107307,102390,107308,102393,107310,107313],{},[93,107309,106218],{},[93,107311,107312],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[38,107315,102432],{"id":102431},[67,107317,107319],{"id":107318},"indexerror-index-0-is-out-of-bounds",[93,107320,107321],{},"IndexError: index 0 is out of bounds",[14,107323,107324,107325,107327],{},"原因是 ",[93,107326,105971],{},"，没有 actuator。",[67,107329,107330],{"id":107330},"关节几乎不动",[14,107332,107333],{},"可能原因:",[50,107335,107336,107341,107345,107351],{},[53,107337,107338,107340],{},[93,107339,107046],{}," 太小",[53,107342,107343,107340],{},[93,107344,105834],{},[53,107346,107347,107350],{},[93,107348,107349],{},"damping"," 太大",[53,107352,107353],{},"重力方向导致运动不明显",[67,107355,107356],{"id":107356},"模型编译失败",[14,107358,107359,107360,107362],{},"检查 actuator 引用的 ",[93,107361,106281],{}," 是否存在，joint 名称是否拼写一致。",[67,107364,107366,107368],{"id":107365},"datactrl0-写了但没有效果",[93,107367,106105],{}," 写了但没有效果",[14,107370,102554],{},[50,107372,107373,107378,107381,107386,107391],{},[53,107374,107375,107377],{},[93,107376,102137],{}," 是否大于 0。",[53,107379,107380],{},"motor 是否引用了正确 joint。",[53,107382,107383,107385],{},[93,107384,107046],{}," 是否太小。",[53,107387,107388,107390],{},[93,107389,105834],{}," 是否把输入限制得太小。",[53,107392,107393],{},"body 是否真的有可动 joint。",[67,107395,107396],{"id":107396},"控制输入超过范围会怎样",[14,107398,107399],{},"如果设置了：",[87,107401,107403],{"className":53046,"code":107402,"language":53048,"meta":18,"style":18},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[93,107404,107405],{"__ignoreMap":18},[96,107406,107407],{"class":98,"line":99},[96,107408,107402],{"class":106},[14,107410,107411],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[87,107413,107415],{"className":30357,"code":107414,"language":30359,"meta":18,"style":18},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[93,107416,107417,107437],{"__ignoreMap":18},[96,107418,107419,107422,107424,107427,107429,107431,107433,107435],{"class":98,"line":99},[96,107420,107421],{"class":106},"action ",[96,107423,152],{"class":102},[96,107425,107426],{"class":106}," np.clip(action, ",[96,107428,639],{"class":102},[96,107430,105239],{"class":155},[96,107432,12419],{"class":106},[96,107434,105239],{"class":155},[96,107436,113],{"class":106},[96,107438,107439,107441,107443,107445,107447],{"class":98,"line":19},[96,107440,105850],{"class":106},[96,107442,298],{"class":155},[96,107444,4426],{"class":106},[96,107446,152],{"class":102},[96,107448,107449],{"class":106}," action\n",[38,107451,102586],{"id":102585},[14,107453,107454],{},"这一章建立了控制任务的基本形式：",[87,107456,107459],{"className":107457,"code":107458,"language":5171,"meta":18},[5169],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[93,107460,107458],{"__ignoreMap":18},[14,107462,107463],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[5110,107465,107466],{},"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":18,"searchDepth":19,"depth":19,"links":107468},[107469,107470,107471,107476,107480,107481,107482,107490],{"id":100625,"depth":19,"text":100626},{"id":100748,"depth":19,"text":100749},{"id":101023,"depth":19,"text":101024,"children":107472},[107473,107474,107475],{"id":106112,"depth":1162,"text":106113},{"id":106162,"depth":1162,"text":106163},{"id":106228,"depth":1162,"text":106229},{"id":101231,"depth":19,"text":101232,"children":107477},[107478,107479],{"id":101551,"depth":1162,"text":101551},{"id":101687,"depth":1162,"text":101687},{"id":102294,"depth":19,"text":102295},{"id":102326,"depth":19,"text":102327},{"id":102431,"depth":19,"text":102432,"children":107483},[107484,107485,107486,107487,107489],{"id":107318,"depth":1162,"text":107321},{"id":107330,"depth":1162,"text":107330},{"id":107356,"depth":1162,"text":107356},{"id":107365,"depth":1162,"text":107488},"data.ctrl[0] 写了但没有效果",{"id":107396,"depth":1162,"text":107396},{"id":102585,"depth":19,"text":102586},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105800,"description":18},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107497,"title":107498,"body":107499,"description":18,"extension":21,"meta":109408,"navigation":23,"path":109409,"seo":109410,"stem":109411,"__hash__":109412},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107500,"toc":109384},[107501,107504,107506,107509,107517,107520,107537,107540,107565,107568,107614,107616,107618,107673,107675,107694,107696,107739,107742,107759,107762,107778,107788,107795,107797,107800,107803,107837,107840,107888,107892,107895,107909,107918,107922,107925,107950,107953,107957,107970,107973,107979,107982,107997,107999,108002,108262,108264,108276,108279,108591,108593,108605,108607,108610,108625,108630,108633,108655,108658,108661,108695,108698,108702,108713,108716,108733,108736,108750,108757,108777,108784,108798,108801,108813,108828,108848,108851,108873,108876,108880,108895,108906,108921,108924,108954,108970,108999,109007,109031,109034,109052,109062,109074,109081,109090,109096,109105,109108,109110,109119,109122,109137,109139,109142,109153,109156,109167,109170,109188,109190,109207,109210,109238,109240,109244,109247,109277,109283,109286,109290,109298,109301,109303,109324,109327,109330,109346,109349,109365,109367,109370,109381],[10,107502,107498],{"id":107503},"_5viewer-可视化与-renderer-离屏渲染",[38,107505,100626],{"id":100625},[14,107507,107508],{},"本章掌握两类可视化方式:",[50,107510,107511,107514],{},[53,107512,107513],{},"交互式 viewer: 适合人工观察仿真",[53,107515,107516],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[14,107518,107519],{},"使用官方接口:",[87,107521,107523],{"className":30357,"code":107522,"language":30359,"meta":18,"style":18},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[93,107524,107525,107532],{"__ignoreMap":18},[96,107526,107527,107529],{"class":98,"line":99},[96,107528,30371],{"class":102},[96,107530,107531],{"class":106}," mujoco.viewer\n",[96,107533,107534],{"class":98,"line":19},[96,107535,107536],{"class":106},"mujoco.viewer.launch_passive(model, data)\n",[14,107538,107539],{},"以及:",[87,107541,107543],{"className":30357,"code":107542,"language":30359,"meta":18,"style":18},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[93,107544,107545,107555],{"__ignoreMap":18},[96,107546,107547,107550,107552],{"class":98,"line":99},[96,107548,107549],{"class":106},"renderer ",[96,107551,152],{"class":102},[96,107553,107554],{"class":106}," mujoco.Renderer(model)\n",[96,107556,107557,107560,107562],{"class":98,"line":19},[96,107558,107559],{"class":106},"image ",[96,107561,152],{"class":102},[96,107563,107564],{"class":106}," renderer.render()\n",[14,107566,107567],{},"新手建议先理解二者区别：",[244,107569,107570,107586],{},[247,107571,107572],{},[250,107573,107574,107577,107580,107583],{},[253,107575,107576],{"align":23721},"工具",[253,107578,107579],{"align":23721},"用途",[253,107581,107582],{"align":23721},"是否打开窗口",[253,107584,107585],{"align":23721},"常见场景",[291,107587,107588,107601],{},[250,107589,107590,107593,107596,107598],{},[296,107591,107592],{"align":23721},"Viewer",[296,107594,107595],{"align":23721},"人眼实时观察仿真",[296,107597,104644],{"align":23721},[296,107599,107600],{"align":23721},"调试模型、看控制效果",[250,107602,107603,107606,107609,107611],{},[296,107604,107605],{"align":23721},"Renderer",[296,107607,107608],{"align":23721},"生成图像数组",[296,107610,104657],{"align":23721},[296,107612,107613],{"align":23721},"保存图片、训练视觉策略、服务器批量采集",[38,107615,100749],{"id":100748},[14,107617,100752],{},[87,107619,107621],{"className":23807,"code":107620,"language":23809,"meta":18,"style":18},"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",[93,107622,107623,107635,107645,107653,107661],{"__ignoreMap":18},[96,107624,107625,107627,107629,107631,107633],{"class":98,"line":99},[96,107626,24555],{"class":1946},[96,107628,26294],{"class":211},[96,107630,23819],{"class":211},[96,107632,26379],{"class":155},[96,107634,24657],{"class":155},[96,107636,107637,107639,107641,107643],{"class":98,"line":19},[96,107638,100787],{"class":211},[96,107640,100790],{"class":211},[96,107642,100793],{"class":211},[96,107644,24657],{"class":155},[96,107646,107647,107649,107651],{"class":98,"line":1162},[96,107648,100800],{"class":211},[96,107650,100803],{"class":211},[96,107652,24657],{"class":155},[96,107654,107655,107657,107659],{"class":98,"line":1177},[96,107656,100810],{"class":211},[96,107658,100813],{"class":211},[96,107660,24657],{"class":155},[96,107662,107663,107665,107667,107669,107671],{"class":98,"line":1183},[96,107664,100820],{"class":211},[96,107666,100823],{"class":211},[96,107668,100826],{"class":211},[96,107670,100829],{"class":211},[96,107672,102495],{"class":211},[14,107674,102798],{},[87,107676,107678],{"className":23807,"code":107677,"language":23809,"meta":18,"style":18},"pip install \"mujoco>=2.3\" numpy pillow\n",[93,107679,107680],{"__ignoreMap":18},[96,107681,107682,107684,107686,107688,107691],{"class":98,"line":99},[96,107683,23816],{"class":1946},[96,107685,23819],{"class":211},[96,107687,100909],{"class":211},[96,107689,107690],{"class":211}," numpy",[96,107692,107693],{"class":211}," pillow\n",[14,107695,102815],{},[87,107697,107699],{"className":23807,"code":107698,"language":23809,"meta":18,"style":18},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[93,107700,107701,107718,107727],{"__ignoreMap":18},[96,107702,107703,107705,107707,107709,107712,107714,107716],{"class":98,"line":99},[96,107704,30309],{"class":1946},[96,107706,29155],{"class":211},[96,107708,25094],{"class":155},[96,107710,107711],{"class":211}," mujoco-render",[96,107713,100954],{"class":211},[96,107715,100957],{"class":155},[96,107717,100960],{"class":155},[96,107719,107720,107722,107724],{"class":98,"line":19},[96,107721,30309],{"class":1946},[96,107723,100967],{"class":211},[96,107725,107726],{"class":211}," mujoco-render\n",[96,107728,107729,107731,107733,107735,107737],{"class":98,"line":1162},[96,107730,23816],{"class":1946},[96,107732,23819],{"class":211},[96,107734,100909],{"class":211},[96,107736,107690],{"class":211},[96,107738,107693],{"class":211},[14,107740,107741],{},"离屏渲染后端:",[87,107743,107745],{"className":23807,"code":107744,"language":23809,"meta":18,"style":18},"export MUJOCO_GL=egl\n",[93,107746,107747],{"__ignoreMap":18},[96,107748,107749,107751,107754,107756],{"class":98,"line":99},[96,107750,25021],{"class":102},[96,107752,107753],{"class":106}," MUJOCO_GL",[96,107755,152],{"class":102},[96,107757,107758],{"class":106},"egl\n",[14,107760,107761],{},"或:",[87,107763,107765],{"className":23807,"code":107764,"language":23809,"meta":18,"style":18},"export MUJOCO_GL=osmesa\n",[93,107766,107767],{"__ignoreMap":18},[96,107768,107769,107771,107773,107775],{"class":98,"line":99},[96,107770,25021],{"class":102},[96,107772,107753],{"class":106},[96,107774,152],{"class":102},[96,107776,107777],{"class":106},"osmesa\n",[14,107779,107780,107781,107784,107785,28364],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[93,107782,107783],{},"egl"," 失败，再尝试 ",[93,107786,107787],{},"osmesa",[14,107789,107790,107791,107794],{},"如果你在本机桌面环境运行，通常先不要设置 ",[93,107792,107793],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[38,107796,101024],{"id":101023},[14,107798,107799],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[14,107801,107802],{},"典型 viewer 流程:",[87,107804,107806],{"className":30357,"code":107805,"language":30359,"meta":18,"style":18},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[93,107807,107808,107821,107828,107832],{"__ignoreMap":18},[96,107809,107810,107813,107816,107818],{"class":98,"line":99},[96,107811,107812],{"class":102},"with",[96,107814,107815],{"class":106}," mujoco.viewer.launch_passive(model, data) ",[96,107817,31362],{"class":102},[96,107819,107820],{"class":106}," viewer:\n",[96,107822,107823,107825],{"class":98,"line":19},[96,107824,2234],{"class":102},[96,107826,107827],{"class":106}," viewer.is_running():\n",[96,107829,107830],{"class":98,"line":1162},[96,107831,101495],{"class":106},[96,107833,107834],{"class":98,"line":1177},[96,107835,107836],{"class":106},"        viewer.sync()\n",[14,107838,107839],{},"典型 renderer 流程:",[87,107841,107843],{"className":30357,"code":107842,"language":30359,"meta":18,"style":18},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[93,107844,107845,107871,107875,107880],{"__ignoreMap":18},[96,107846,107847,107849,107851,107854,107856,107858,107860,107862,107864,107866,107869],{"class":98,"line":99},[96,107848,107549],{"class":106},[96,107850,152],{"class":102},[96,107852,107853],{"class":106}," mujoco.Renderer(model, ",[96,107855,24960],{"class":5200},[96,107857,152],{"class":102},[96,107859,42321],{"class":155},[96,107861,12419],{"class":106},[96,107863,24956],{"class":5200},[96,107865,152],{"class":102},[96,107867,107868],{"class":155},"640",[96,107870,113],{"class":106},[96,107872,107873],{"class":98,"line":19},[96,107874,104484],{"class":106},[96,107876,107877],{"class":98,"line":1162},[96,107878,107879],{"class":106},"renderer.update_scene(data)\n",[96,107881,107882,107884,107886],{"class":98,"line":1177},[96,107883,107559],{"class":106},[96,107885,152],{"class":102},[96,107887,107564],{"class":106},[67,107889,107891],{"id":107890},"viewer-的同步逻辑","viewer 的同步逻辑",[14,107893,107894],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[87,107896,107898],{"className":30357,"code":107897,"language":30359,"meta":18,"style":18},"mujoco.mj_step(model, data)\nviewer.sync()\n",[93,107899,107900,107904],{"__ignoreMap":18},[96,107901,107902],{"class":98,"line":99},[96,107903,104484],{"class":106},[96,107905,107906],{"class":98,"line":19},[96,107907,107908],{"class":106},"viewer.sync()\n",[14,107910,107911,107913,107914,107917],{},[93,107912,101194],{}," 负责算物理，",[93,107915,107916],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[67,107919,107921],{"id":107920},"为什么要-sleep","为什么要 sleep",[14,107923,107924],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[87,107926,107928],{"className":30357,"code":107927,"language":30359,"meta":18,"style":18},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[93,107929,107930],{"__ignoreMap":18},[96,107931,107932,107935,107937,107940,107942,107945,107947],{"class":98,"line":99},[96,107933,107934],{"class":106},"sleep_time ",[96,107936,152],{"class":102},[96,107938,107939],{"class":106}," model.opt.timestep ",[96,107941,639],{"class":102},[96,107943,107944],{"class":106}," (time.time() ",[96,107946,639],{"class":102},[96,107948,107949],{"class":106}," step_start)\n",[14,107951,107952],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[67,107954,107956],{"id":107955},"renderer-输出是什么","renderer 输出是什么",[87,107958,107960],{"className":30357,"code":107959,"language":30359,"meta":18,"style":18},"image = renderer.render()\n",[93,107961,107962],{"__ignoreMap":18},[96,107963,107964,107966,107968],{"class":98,"line":99},[96,107965,107559],{"class":106},[96,107967,152],{"class":102},[96,107969,107564],{"class":106},[14,107971,107972],{},"得到的是 NumPy 数组，形状通常是：",[87,107974,107977],{"className":107975,"code":107976,"language":5171,"meta":18},[5169],"(height, width, 3)\n",[93,107978,107976],{"__ignoreMap":18},[14,107980,107981],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[87,107983,107985],{"className":30357,"code":107984,"language":30359,"meta":18,"style":18},"Image.fromarray(image).save(\"render_output.png\")\n",[93,107986,107987],{"__ignoreMap":18},[96,107988,107989,107992,107995],{"class":98,"line":99},[96,107990,107991],{"class":106},"Image.fromarray(image).save(",[96,107993,107994],{"class":211},"\"render_output.png\"",[96,107996,113],{"class":106},[38,107998,101232],{"id":101231},[14,108000,108001],{},"交互式 Viewer:",[87,108003,108005],{"className":30357,"code":108004,"language":30359,"meta":18,"style":18},"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",[93,108006,108007,108013,108017,108023,108029,108033,108037,108045,108050,108054,108058,108062,108067,108072,108076,108080,108084,108089,108093,108097,108101,108105,108109,108113,108125,108137,108145,108149,108159,108179,108189,108194,108199,108203,108220,108233,108238,108242,108246,108258],{"__ignoreMap":18},[96,108008,108009,108011],{"class":98,"line":99},[96,108010,30371],{"class":102},[96,108012,31808],{"class":106},[96,108014,108015],{"class":98,"line":19},[96,108016,2383],{"emptyLinePlaceholder":23},[96,108018,108019,108021],{"class":98,"line":1162},[96,108020,30371],{"class":102},[96,108022,101280],{"class":106},[96,108024,108025,108027],{"class":98,"line":1177},[96,108026,30371],{"class":102},[96,108028,107531],{"class":106},[96,108030,108031],{"class":98,"line":1183},[96,108032,2383],{"emptyLinePlaceholder":23},[96,108034,108035],{"class":98,"line":1197},[96,108036,2383],{"emptyLinePlaceholder":23},[96,108038,108039,108041,108043],{"class":98,"line":1203},[96,108040,101293],{"class":155},[96,108042,13548],{"class":102},[96,108044,101298],{"class":211},[96,108046,108047],{"class":98,"line":1294},[96,108048,108049],{"class":211},"\u003Cmujoco model=\"viewer_demo\">\n",[96,108051,108052],{"class":98,"line":1300},[96,108053,101308],{"class":211},[96,108055,108056],{"class":98,"line":1312},[96,108057,2383],{"emptyLinePlaceholder":23},[96,108059,108060],{"class":98,"line":1595},[96,108061,101317],{"class":211},[96,108063,108064],{"class":98,"line":1600},[96,108065,108066],{"class":211},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[96,108068,108069],{"class":98,"line":1606},[96,108070,108071],{"class":211},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[96,108073,108074],{"class":98,"line":1611},[96,108075,2383],{"emptyLinePlaceholder":23},[96,108077,108078],{"class":98,"line":1625},[96,108079,101331],{"class":211},[96,108081,108082],{"class":98,"line":1630},[96,108083,101336],{"class":211},[96,108085,108086],{"class":98,"line":1636},[96,108087,108088],{"class":211},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[96,108090,108091],{"class":98,"line":1657},[96,108092,101346],{"class":211},[96,108094,108095],{"class":98,"line":1662},[96,108096,101351],{"class":211},[96,108098,108099],{"class":98,"line":1676},[96,108100,101356],{"class":211},[96,108102,108103],{"class":98,"line":1681},[96,108104,95677],{"class":211},[96,108106,108107],{"class":98,"line":1710},[96,108108,2383],{"emptyLinePlaceholder":23},[96,108110,108111],{"class":98,"line":1715},[96,108112,2383],{"emptyLinePlaceholder":23},[96,108114,108115,108117,108119,108121,108123],{"class":98,"line":1732},[96,108116,31926],{"class":102},[96,108118,1956],{"class":1946},[96,108120,101377],{"class":106},[96,108122,95665],{"class":155},[96,108124,3722],{"class":106},[96,108126,108127,108129,108131,108133,108135],{"class":98,"line":1737},[96,108128,101386],{"class":106},[96,108130,152],{"class":102},[96,108132,101391],{"class":106},[96,108134,101293],{"class":155},[96,108136,113],{"class":106},[96,108138,108139,108141,108143],{"class":98,"line":1742},[96,108140,101400],{"class":106},[96,108142,152],{"class":102},[96,108144,101405],{"class":106},[96,108146,108147],{"class":98,"line":1747},[96,108148,2383],{"emptyLinePlaceholder":23},[96,108150,108151,108153,108155,108157],{"class":98,"line":1761},[96,108152,34157],{"class":102},[96,108154,107815],{"class":106},[96,108156,31362],{"class":102},[96,108158,107820],{"class":106},[96,108160,108161,108164,108167,108169,108172,108174,108177],{"class":98,"line":1766},[96,108162,108163],{"class":102},"        while",[96,108165,108166],{"class":106}," viewer.is_running() ",[96,108168,30441],{"class":102},[96,108170,108171],{"class":106}," data.time ",[96,108173,1017],{"class":102},[96,108175,108176],{"class":155}," 5.0",[96,108178,3722],{"class":106},[96,108180,108181,108184,108186],{"class":98,"line":2560},[96,108182,108183],{"class":106},"            step_start ",[96,108185,152],{"class":102},[96,108187,108188],{"class":106}," time.time()\n",[96,108190,108191],{"class":98,"line":2574},[96,108192,108193],{"class":106},"            mujoco.mj_step(model, data)\n",[96,108195,108196],{"class":98,"line":2582},[96,108197,108198],{"class":106},"            viewer.sync()\n",[96,108200,108201],{"class":98,"line":2587},[96,108202,2383],{"emptyLinePlaceholder":23},[96,108204,108205,108208,108210,108212,108214,108216,108218],{"class":98,"line":2593},[96,108206,108207],{"class":106},"            sleep_time ",[96,108209,152],{"class":102},[96,108211,107939],{"class":106},[96,108213,639],{"class":102},[96,108215,107944],{"class":106},[96,108217,639],{"class":102},[96,108219,107949],{"class":106},[96,108221,108222,108224,108227,108229,108231],{"class":98,"line":2599},[96,108223,4625],{"class":102},[96,108225,108226],{"class":106}," sleep_time ",[96,108228,1067],{"class":102},[96,108230,4076],{"class":155},[96,108232,3722],{"class":106},[96,108234,108235],{"class":98,"line":2604},[96,108236,108237],{"class":106},"                time.sleep(sleep_time)\n",[96,108239,108240],{"class":98,"line":7932},[96,108241,2383],{"emptyLinePlaceholder":23},[96,108243,108244],{"class":98,"line":7956},[96,108245,2383],{"emptyLinePlaceholder":23},[96,108247,108248,108250,108252,108254,108256],{"class":98,"line":7961},[96,108249,1514],{"class":102},[96,108251,31199],{"class":155},[96,108253,101538],{"class":102},[96,108255,101541],{"class":211},[96,108257,3722],{"class":106},[96,108259,108260],{"class":98,"line":7967},[96,108261,101548],{"class":106},[14,108263,103549],{},[87,108265,108267],{"className":23807,"code":108266,"language":23809,"meta":18,"style":18},"touch ch5_viewer.py\n",[93,108268,108269],{"__ignoreMap":18},[96,108270,108271,108273],{"class":98,"line":99},[96,108272,101262],{"class":1946},[96,108274,108275],{"class":211}," ch5_viewer.py\n",[14,108277,108278],{},"离屏 Renderer 保存图片:",[87,108280,108282],{"className":30357,"code":108281,"language":30359,"meta":18,"style":18},"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",[93,108283,108284,108296,108300,108306,108316,108320,108324,108332,108337,108341,108345,108349,108353,108358,108362,108366,108370,108374,108378,108382,108386,108390,108394,108398,108402,108414,108426,108434,108459,108463,108479,108483,108487,108502,108511,108515,108529,108534,108539,108543,108555,108567,108571,108575,108587],{"__ignoreMap":18},[96,108285,108286,108288,108291,108293],{"class":98,"line":99},[96,108287,30716],{"class":102},[96,108289,108290],{"class":106}," pathlib ",[96,108292,30371],{"class":102},[96,108294,108295],{"class":106}," Path\n",[96,108297,108298],{"class":98,"line":19},[96,108299,2383],{"emptyLinePlaceholder":23},[96,108301,108302,108304],{"class":98,"line":1162},[96,108303,30371],{"class":102},[96,108305,101280],{"class":106},[96,108307,108308,108310,108312,108314],{"class":98,"line":1177},[96,108309,30716],{"class":102},[96,108311,47242],{"class":155},[96,108313,47245],{"class":102},[96,108315,47248],{"class":106},[96,108317,108318],{"class":98,"line":1183},[96,108319,2383],{"emptyLinePlaceholder":23},[96,108321,108322],{"class":98,"line":1197},[96,108323,2383],{"emptyLinePlaceholder":23},[96,108325,108326,108328,108330],{"class":98,"line":1203},[96,108327,101293],{"class":155},[96,108329,13548],{"class":102},[96,108331,101298],{"class":211},[96,108333,108334],{"class":98,"line":1294},[96,108335,108336],{"class":211},"\u003Cmujoco model=\"renderer_demo\">\n",[96,108338,108339],{"class":98,"line":1300},[96,108340,101308],{"class":211},[96,108342,108343],{"class":98,"line":1312},[96,108344,2383],{"emptyLinePlaceholder":23},[96,108346,108347],{"class":98,"line":1595},[96,108348,101317],{"class":211},[96,108350,108351],{"class":98,"line":1600},[96,108352,108066],{"class":211},[96,108354,108355],{"class":98,"line":1606},[96,108356,108357],{"class":211},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[96,108359,108360],{"class":98,"line":1611},[96,108361,108071],{"class":211},[96,108363,108364],{"class":98,"line":1625},[96,108365,2383],{"emptyLinePlaceholder":23},[96,108367,108368],{"class":98,"line":1630},[96,108369,101331],{"class":211},[96,108371,108372],{"class":98,"line":1636},[96,108373,101336],{"class":211},[96,108375,108376],{"class":98,"line":1657},[96,108377,108088],{"class":211},[96,108379,108380],{"class":98,"line":1662},[96,108381,101346],{"class":211},[96,108383,108384],{"class":98,"line":1676},[96,108385,101351],{"class":211},[96,108387,108388],{"class":98,"line":1681},[96,108389,101356],{"class":211},[96,108391,108392],{"class":98,"line":1710},[96,108393,95677],{"class":211},[96,108395,108396],{"class":98,"line":1715},[96,108397,2383],{"emptyLinePlaceholder":23},[96,108399,108400],{"class":98,"line":1732},[96,108401,2383],{"emptyLinePlaceholder":23},[96,108403,108404,108406,108408,108410,108412],{"class":98,"line":1737},[96,108405,31926],{"class":102},[96,108407,1956],{"class":1946},[96,108409,101377],{"class":106},[96,108411,95665],{"class":155},[96,108413,3722],{"class":106},[96,108415,108416,108418,108420,108422,108424],{"class":98,"line":1742},[96,108417,101386],{"class":106},[96,108419,152],{"class":102},[96,108421,101391],{"class":106},[96,108423,101293],{"class":155},[96,108425,113],{"class":106},[96,108427,108428,108430,108432],{"class":98,"line":1747},[96,108429,101400],{"class":106},[96,108431,152],{"class":102},[96,108433,101405],{"class":106},[96,108435,108436,108439,108441,108443,108445,108447,108449,108451,108453,108455,108457],{"class":98,"line":1761},[96,108437,108438],{"class":106},"    renderer ",[96,108440,152],{"class":102},[96,108442,107853],{"class":106},[96,108444,24960],{"class":5200},[96,108446,152],{"class":102},[96,108448,42321],{"class":155},[96,108450,12419],{"class":106},[96,108452,24956],{"class":5200},[96,108454,152],{"class":102},[96,108456,107868],{"class":155},[96,108458,113],{"class":106},[96,108460,108461],{"class":98,"line":1766},[96,108462,2383],{"emptyLinePlaceholder":23},[96,108464,108465,108467,108469,108471,108473,108475,108477],{"class":98,"line":2560},[96,108466,3184],{"class":102},[96,108468,101480],{"class":106},[96,108470,26022],{"class":102},[96,108472,32422],{"class":155},[96,108474,107],{"class":106},[96,108476,418],{"class":155},[96,108478,30765],{"class":106},[96,108480,108481],{"class":98,"line":2574},[96,108482,101495],{"class":106},[96,108484,108485],{"class":98,"line":2582},[96,108486,2383],{"emptyLinePlaceholder":23},[96,108488,108489,108492,108495,108497,108500],{"class":98,"line":2587},[96,108490,108491],{"class":106},"    renderer.update_scene(data, ",[96,108493,108494],{"class":5200},"camera",[96,108496,152],{"class":102},[96,108498,108499],{"class":211},"\"fixed_camera\"",[96,108501,113],{"class":106},[96,108503,108504,108507,108509],{"class":98,"line":2593},[96,108505,108506],{"class":106},"    image ",[96,108508,152],{"class":102},[96,108510,107564],{"class":106},[96,108512,108513],{"class":98,"line":2599},[96,108514,2383],{"emptyLinePlaceholder":23},[96,108516,108517,108520,108522,108525,108527],{"class":98,"line":2604},[96,108518,108519],{"class":106},"    output_path ",[96,108521,152],{"class":102},[96,108523,108524],{"class":106}," Path(",[96,108526,107994],{"class":211},[96,108528,113],{"class":106},[96,108530,108531],{"class":98,"line":7932},[96,108532,108533],{"class":106},"    Image.fromarray(image).save(output_path)\n",[96,108535,108536],{"class":98,"line":7956},[96,108537,108538],{"class":106},"    renderer.close()\n",[96,108540,108541],{"class":98,"line":7961},[96,108542,2383],{"emptyLinePlaceholder":23},[96,108544,108545,108547,108549,108552],{"class":98,"line":7967},[96,108546,31278],{"class":155},[96,108548,107],{"class":106},[96,108550,108551],{"class":211},"\"saved:\"",[96,108553,108554],{"class":106},", output_path.resolve())\n",[96,108556,108557,108559,108561,108564],{"class":98,"line":7994},[96,108558,31278],{"class":155},[96,108560,107],{"class":106},[96,108562,108563],{"class":211},"\"image shape:\"",[96,108565,108566],{"class":106},", image.shape)\n",[96,108568,108569],{"class":98,"line":7999},[96,108570,2383],{"emptyLinePlaceholder":23},[96,108572,108573],{"class":98,"line":8005},[96,108574,2383],{"emptyLinePlaceholder":23},[96,108576,108577,108579,108581,108583,108585],{"class":98,"line":8017},[96,108578,1514],{"class":102},[96,108580,31199],{"class":155},[96,108582,101538],{"class":102},[96,108584,101541],{"class":211},[96,108586,3722],{"class":106},[96,108588,108589],{"class":98,"line":8029},[96,108590,101548],{"class":106},[14,108592,103549],{},[87,108594,108596],{"className":23807,"code":108595,"language":23809,"meta":18,"style":18},"touch ch5_renderer.py\n",[93,108597,108598],{"__ignoreMap":18},[96,108599,108600,108602],{"class":98,"line":99},[96,108601,101262],{"class":1946},[96,108603,108604],{"class":211}," ch5_renderer.py\n",[67,108606,101551],{"id":101551},[14,108608,108609],{},"viewer 上下文：",[87,108611,108613],{"className":30357,"code":108612,"language":30359,"meta":18,"style":18},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[93,108614,108615],{"__ignoreMap":18},[96,108616,108617,108619,108621,108623],{"class":98,"line":99},[96,108618,107812],{"class":102},[96,108620,107815],{"class":106},[96,108622,31362],{"class":102},[96,108624,107820],{"class":106},[14,108626,108627,108629],{},[93,108628,107812],{}," 语句会创建窗口，并在退出时自动清理资源。",[14,108631,108632],{},"窗口循环：",[87,108634,108636],{"className":30357,"code":108635,"language":30359,"meta":18,"style":18},"while viewer.is_running() and data.time \u003C 5.0:\n",[93,108637,108638],{"__ignoreMap":18},[96,108639,108640,108643,108645,108647,108649,108651,108653],{"class":98,"line":99},[96,108641,108642],{"class":102},"while",[96,108644,108166],{"class":106},[96,108646,30441],{"class":102},[96,108648,108171],{"class":106},[96,108650,1017],{"class":102},[96,108652,108176],{"class":155},[96,108654,3722],{"class":106},[14,108656,108657],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[14,108659,108660],{},"固定相机：",[87,108662,108664],{"className":53046,"code":108663,"language":53048,"meta":18,"style":18},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[93,108665,108666],{"__ignoreMap":18},[96,108667,108668,108670,108672,108674,108676,108678,108680,108682,108685,108688,108690,108693],{"class":98,"line":99},[96,108669,1017],{"class":106},[96,108671,108494],{"class":51279},[96,108673,14904],{"class":1946},[96,108675,152],{"class":106},[96,108677,108499],{"class":211},[96,108679,101085],{"class":1946},[96,108681,152],{"class":106},[96,108683,108684],{"class":211},"\"1.5 -2.0 1.2\"",[96,108686,108687],{"class":1946}," xyaxes",[96,108689,152],{"class":106},[96,108691,108692],{"class":211},"\"1 0.75 0 0 0 1\"",[96,108694,101123],{"class":106},[14,108696,108697],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[67,108699,108701],{"id":108700},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[87,108703,108705],{"className":30357,"code":108704,"language":30359,"meta":18,"style":18},"import time\n",[93,108706,108707],{"__ignoreMap":18},[96,108708,108709,108711],{"class":98,"line":99},[96,108710,30371],{"class":102},[96,108712,31808],{"class":106},[14,108714,108715],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[87,108717,108719],{"className":30357,"code":108718,"language":30359,"meta":18,"style":18},"import mujoco\nimport mujoco.viewer\n",[93,108720,108721,108727],{"__ignoreMap":18},[96,108722,108723,108725],{"class":98,"line":99},[96,108724,30371],{"class":102},[96,108726,101280],{"class":106},[96,108728,108729,108731],{"class":98,"line":19},[96,108730,30371],{"class":102},[96,108732,107531],{"class":106},[14,108734,108735],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[87,108737,108738],{"className":30357,"code":108612,"language":30359,"meta":18,"style":18},[93,108739,108740],{"__ignoreMap":18},[96,108741,108742,108744,108746,108748],{"class":98,"line":99},[96,108743,107812],{"class":102},[96,108745,107815],{"class":106},[96,108747,31362],{"class":102},[96,108749,107820],{"class":106},[14,108751,108752,108753,108756],{},"打开一个 viewer 窗口。",[93,108754,108755],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[87,108758,108759],{"className":30357,"code":108635,"language":30359,"meta":18,"style":18},[93,108760,108761],{"__ignoreMap":18},[96,108762,108763,108765,108767,108769,108771,108773,108775],{"class":98,"line":99},[96,108764,108642],{"class":102},[96,108766,108166],{"class":106},[96,108768,30441],{"class":102},[96,108770,108171],{"class":106},[96,108772,1017],{"class":102},[96,108774,108176],{"class":155},[96,108776,3722],{"class":106},[14,108778,108779,108780,108783],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[93,108781,108782],{},"viewer.is_running()"," 会变成 false，循环结束。",[87,108785,108787],{"className":30357,"code":108786,"language":30359,"meta":18,"style":18},"step_start = time.time()\n",[93,108788,108789],{"__ignoreMap":18},[96,108790,108791,108794,108796],{"class":98,"line":99},[96,108792,108793],{"class":106},"step_start ",[96,108795,152],{"class":102},[96,108797,108188],{"class":106},[14,108799,108800],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[87,108802,108803],{"className":30357,"code":107897,"language":30359,"meta":18,"style":18},[93,108804,108805,108809],{"__ignoreMap":18},[96,108806,108807],{"class":98,"line":99},[96,108808,104484],{"class":106},[96,108810,108811],{"class":98,"line":19},[96,108812,107908],{"class":106},[14,108814,108815,108817,108818,108820,108821,108823,108824,108827],{},[93,108816,101194],{}," 推进物理仿真。",[93,108819,107916],{}," 把最新的 ",[93,108822,33380],{}," 同步到窗口里显示。没有 ",[93,108825,108826],{},"sync()","，窗口可能看不到最新状态。",[87,108829,108830],{"className":30357,"code":107927,"language":30359,"meta":18,"style":18},[93,108831,108832],{"__ignoreMap":18},[96,108833,108834,108836,108838,108840,108842,108844,108846],{"class":98,"line":99},[96,108835,107934],{"class":106},[96,108837,152],{"class":102},[96,108839,107939],{"class":106},[96,108841,639],{"class":102},[96,108843,107944],{"class":106},[96,108845,639],{"class":102},[96,108847,107949],{"class":106},[14,108849,108850],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[87,108852,108854],{"className":30357,"code":108853,"language":30359,"meta":18,"style":18},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[93,108855,108856,108868],{"__ignoreMap":18},[96,108857,108858,108860,108862,108864,108866],{"class":98,"line":99},[96,108859,1514],{"class":102},[96,108861,108226],{"class":106},[96,108863,1067],{"class":102},[96,108865,4076],{"class":155},[96,108867,3722],{"class":106},[96,108869,108870],{"class":98,"line":19},[96,108871,108872],{"class":106},"    time.sleep(sleep_time)\n",[14,108874,108875],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[67,108877,108879],{"id":108878},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[87,108881,108883],{"className":30357,"code":108882,"language":30359,"meta":18,"style":18},"from pathlib import Path\n",[93,108884,108885],{"__ignoreMap":18},[96,108886,108887,108889,108891,108893],{"class":98,"line":99},[96,108888,30716],{"class":102},[96,108890,108290],{"class":106},[96,108892,30371],{"class":102},[96,108894,108295],{"class":106},[14,108896,108897,108898,108901,108902,108905],{},"导入 ",[93,108899,108900],{},"Path","，用来处理文件路径。相比直接写字符串，",[93,108903,108904],{},"Path(\"render_output.png\")"," 更清晰。",[87,108907,108909],{"className":30357,"code":108908,"language":30359,"meta":18,"style":18},"from PIL import Image\n",[93,108910,108911],{"__ignoreMap":18},[96,108912,108913,108915,108917,108919],{"class":98,"line":99},[96,108914,30716],{"class":102},[96,108916,47242],{"class":155},[96,108918,47245],{"class":102},[96,108920,47248],{"class":106},[14,108922,108923],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[87,108925,108926],{"className":53046,"code":108663,"language":53048,"meta":18,"style":18},[93,108927,108928],{"__ignoreMap":18},[96,108929,108930,108932,108934,108936,108938,108940,108942,108944,108946,108948,108950,108952],{"class":98,"line":99},[96,108931,1017],{"class":106},[96,108933,108494],{"class":51279},[96,108935,14904],{"class":1946},[96,108937,152],{"class":106},[96,108939,108499],{"class":211},[96,108941,101085],{"class":1946},[96,108943,152],{"class":106},[96,108945,108684],{"class":211},[96,108947,108687],{"class":1946},[96,108949,152],{"class":106},[96,108951,108692],{"class":211},[96,108953,101123],{"class":106},[14,108955,108956,108957,108959,108960,108962,108963,108966,108967,108969],{},"定义一个相机。",[93,108958,79789],{}," 是相机名字。",[93,108961,104125],{}," 是相机在世界里的位置。",[93,108964,108965],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[93,108968,104125],{}," 来调视角。",[87,108971,108973],{"className":30357,"code":108972,"language":30359,"meta":18,"style":18},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[93,108974,108975],{"__ignoreMap":18},[96,108976,108977,108979,108981,108983,108985,108987,108989,108991,108993,108995,108997],{"class":98,"line":99},[96,108978,107549],{"class":106},[96,108980,152],{"class":102},[96,108982,107853],{"class":106},[96,108984,24960],{"class":5200},[96,108986,152],{"class":102},[96,108988,42321],{"class":155},[96,108990,12419],{"class":106},[96,108992,24956],{"class":5200},[96,108994,152],{"class":102},[96,108996,107868],{"class":155},[96,108998,113],{"class":106},[14,109000,109001,109002,100997,109004,109006],{},"创建离屏渲染器。",[93,109003,24960],{},[93,109005,24956],{}," 决定输出图片大小。",[87,109008,109009],{"className":30357,"code":101655,"language":30359,"meta":18,"style":18},[93,109010,109011,109027],{"__ignoreMap":18},[96,109012,109013,109015,109017,109019,109021,109023,109025],{"class":98,"line":99},[96,109014,3008],{"class":102},[96,109016,101480],{"class":106},[96,109018,26022],{"class":102},[96,109020,32422],{"class":155},[96,109022,107],{"class":106},[96,109024,418],{"class":155},[96,109026,30765],{"class":106},[96,109028,109029],{"class":98,"line":19},[96,109030,101678],{"class":106},[14,109032,109033],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[87,109035,109037],{"className":30357,"code":109036,"language":30359,"meta":18,"style":18},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[93,109038,109039],{"__ignoreMap":18},[96,109040,109041,109044,109046,109048,109050],{"class":98,"line":99},[96,109042,109043],{"class":106},"renderer.update_scene(data, ",[96,109045,108494],{"class":5200},[96,109047,152],{"class":102},[96,109049,108499],{"class":211},[96,109051,113],{"class":106},[14,109053,109054,109055,109057,109058,109061],{},"告诉 renderer：用当前 ",[93,109056,33380],{}," 的状态更新画面，并使用名为 ",[93,109059,109060],{},"fixed_camera"," 的相机视角。",[87,109063,109064],{"className":30357,"code":107959,"language":30359,"meta":18,"style":18},[93,109065,109066],{"__ignoreMap":18},[96,109067,109068,109070,109072],{"class":98,"line":99},[96,109069,107559],{"class":106},[96,109071,152],{"class":102},[96,109073,107564],{"class":106},[14,109075,109076,109077,109080],{},"真正渲染出图像。",[93,109078,109079],{},"image"," 是一个 NumPy 数组，不是文件。",[87,109082,109084],{"className":30357,"code":109083,"language":30359,"meta":18,"style":18},"Image.fromarray(image).save(output_path)\n",[93,109085,109086],{"__ignoreMap":18},[96,109087,109088],{"class":98,"line":99},[96,109089,109083],{"class":106},[14,109091,109092,109093,28364],{},"把数组转换成图片，并保存到 ",[93,109094,109095],{},"render_output.png",[87,109097,109099],{"className":30357,"code":109098,"language":30359,"meta":18,"style":18},"renderer.close()\n",[93,109100,109101],{"__ignoreMap":18},[96,109102,109103],{"class":98,"line":99},[96,109104,109098],{"class":106},[14,109106,109107],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[38,109109,102295],{"id":102294},[14,109111,109112,109113,109115,109116,28364],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[93,109114,109095],{},"，并输出图像数组形状，例如 ",[93,109117,109118],{},"(480, 640, 3)",[14,109120,109121],{},"如果图片里看不到方块，先检查：",[50,109123,109124,109127,109130],{},[53,109125,109126],{},"方块是否掉到相机视野外。",[53,109128,109129],{},"camera 位置是否合理。",[53,109131,109132,109133,109136],{},"是否在 ",[93,109134,109135],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[38,109138,102327],{"id":102326},[14,109140,109141],{},"运行 viewer:",[87,109143,109145],{"className":23807,"code":109144,"language":23809,"meta":18,"style":18},"python ch5_viewer.py\n",[93,109146,109147],{"__ignoreMap":18},[96,109148,109149,109151],{"class":98,"line":99},[96,109150,30359],{"class":1946},[96,109152,108275],{"class":211},[14,109154,109155],{},"运行 renderer:",[87,109157,109159],{"className":23807,"code":109158,"language":23809,"meta":18,"style":18},"python ch5_renderer.py\n",[93,109160,109161],{"__ignoreMap":18},[96,109162,109163,109165],{"class":98,"line":99},[96,109164,30359],{"class":1946},[96,109166,108604],{"class":211},[14,109168,109169],{},"如果在服务器上运行:",[87,109171,109173],{"className":23807,"code":109172,"language":23809,"meta":18,"style":18},"MUJOCO_GL=egl python ch5_renderer.py\n",[93,109174,109175],{"__ignoreMap":18},[96,109176,109177,109179,109181,109183,109186],{"class":98,"line":99},[96,109178,107793],{"class":106},[96,109180,152],{"class":102},[96,109182,107783],{"class":211},[96,109184,109185],{"class":1946}," python",[96,109187,108604],{"class":211},[14,109189,107761],{},[87,109191,109193],{"className":23807,"code":109192,"language":23809,"meta":18,"style":18},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[93,109194,109195],{"__ignoreMap":18},[96,109196,109197,109199,109201,109203,109205],{"class":98,"line":99},[96,109198,107793],{"class":106},[96,109200,152],{"class":102},[96,109202,107787],{"class":211},[96,109204,109185],{"class":1946},[96,109206,108604],{"class":211},[14,109208,109209],{},"再做几个练习：",[50,109211,109212,109219,109222,109228],{},[53,109213,109214,109215,109218],{},"把 renderer 分辨率改成 ",[93,109216,109217],{},"height=240, width=320","，观察输出 shape。",[53,109220,109221],{},"把方块颜色改成蓝色，重新保存图片。",[53,109223,109224,109225,109227],{},"把相机 ",[93,109226,104125],{}," 改远一点，观察画面中物体是否变小。",[53,109229,109230,109231,102393,109234,109237],{},"把 viewer 示例中的 ",[93,109232,109233],{},"data.time \u003C 5.0",[93,109235,109236],{},"data.time \u003C 20.0","，观察更长时间。",[38,109239,102432],{"id":102431},[67,109241,109243],{"id":109242},"viewer-窗口打不开","viewer 窗口打不开",[14,109245,109246],{},"安装:",[87,109248,109250],{"className":23807,"code":109249,"language":23809,"meta":18,"style":18},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[93,109251,109252],{"__ignoreMap":18},[96,109253,109254,109256,109258,109260,109262,109264,109266,109268,109270,109272,109274],{"class":98,"line":99},[96,109255,24555],{"class":1946},[96,109257,26294],{"class":211},[96,109259,23819],{"class":211},[96,109261,26379],{"class":155},[96,109263,102485],{"class":211},[96,109265,100813],{"class":211},[96,109267,102490],{"class":211},[96,109269,100826],{"class":211},[96,109271,100832],{"class":211},[96,109273,100823],{"class":211},[96,109275,109276],{"class":211}," libXinerama\n",[67,109278,109280],{"id":109279},"glfwerror",[93,109281,109282],{},"GLFWError",[14,109284,109285],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[67,109287,109289],{"id":109288},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[14,109291,109292,109293,82518,109295,109297],{},"尝试 ",[93,109294,101016],{},[93,109296,101019],{},"。可能存在版本差异。",[67,109299,109300],{"id":109300},"保存图片是黑的",[14,109302,102554],{},[50,109304,109305,109308,109311,109321],{},[53,109306,109307],{},"XML 里是否有 light。",[53,109309,109310],{},"相机是否对着模型。",[53,109312,109313,109314,109317,109318,28364],{},"是否先 ",[93,109315,109316],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[93,109319,109320],{},"renderer.render()",[53,109322,109323],{},"物体是否已经掉出视野。",[67,109325,109326],{"id":109326},"远程服务器没有显示器",[14,109328,109329],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[87,109331,109332],{"className":23807,"code":109172,"language":23809,"meta":18,"style":18},[93,109333,109334],{"__ignoreMap":18},[96,109335,109336,109338,109340,109342,109344],{"class":98,"line":99},[96,109337,107793],{"class":106},[96,109339,152],{"class":102},[96,109341,107783],{"class":211},[96,109343,109185],{"class":1946},[96,109345,108604],{"class":211},[14,109347,109348],{},"如果 EGL 不可用，再尝试：",[87,109350,109351],{"className":23807,"code":109192,"language":23809,"meta":18,"style":18},[93,109352,109353],{"__ignoreMap":18},[96,109354,109355,109357,109359,109361,109363],{"class":98,"line":99},[96,109356,107793],{"class":106},[96,109358,152],{"class":102},[96,109360,107787],{"class":211},[96,109362,109185],{"class":1946},[96,109364,108604],{"class":211},[38,109366,102586],{"id":102585},[14,109368,109369],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[50,109371,109372,109375,109378],{},[53,109373,109374],{},"先用 viewer 看模型和控制是否正常。",[53,109376,109377],{},"再用 renderer 保存图片或构造视觉观测。",[53,109379,109380],{},"最后把状态、动作、图像、奖励组织成训练数据。",[5110,109382,109383],{},"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":18,"searchDepth":19,"depth":19,"links":109385},[109386,109387,109388,109393,109398,109399,109400,109407],{"id":100625,"depth":19,"text":100626},{"id":100748,"depth":19,"text":100749},{"id":101023,"depth":19,"text":101024,"children":109389},[109390,109391,109392],{"id":107890,"depth":1162,"text":107891},{"id":107920,"depth":1162,"text":107921},{"id":107955,"depth":1162,"text":107956},{"id":101231,"depth":19,"text":101232,"children":109394},[109395,109396,109397],{"id":101551,"depth":1162,"text":101551},{"id":108700,"depth":1162,"text":108701},{"id":108878,"depth":1162,"text":108879},{"id":102294,"depth":19,"text":102295},{"id":102326,"depth":19,"text":102327},{"id":102431,"depth":19,"text":102432,"children":109401},[109402,109403,109404,109405,109406],{"id":109242,"depth":1162,"text":109243},{"id":109279,"depth":1162,"text":109282},{"id":109288,"depth":1162,"text":109289},{"id":109300,"depth":1162,"text":109300},{"id":109326,"depth":1162,"text":109326},{"id":102585,"depth":19,"text":102586},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107498,"description":18},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109414,"title":109415,"body":109416,"description":18,"extension":21,"meta":111327,"navigation":23,"path":111328,"seo":111329,"stem":111330,"__hash__":111331},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109417,"toc":111303},[109418,109421,109423,109426,109428,109447,109450,109456,109459,109461,109463,109487,109489,109503,109505,109546,109548,109559,109561,109564,109570,109573,109607,109610,109642,109645,109677,109681,109684,109724,109727,109733,109736,109742,109746,109749,109755,109758,109762,109765,109805,109807,109820,109823,109825,110407,110409,110421,110424,110435,110437,110440,110459,110471,110474,110495,110498,110501,110544,110547,110550,110570,110577,110579,110597,110612,110615,110621,110624,110630,110647,110654,110685,110696,110730,110741,110758,110767,110775,110780,110794,110797,110818,110824,110838,110843,110873,110883,110908,110916,110939,110942,110958,110961,110969,110975,110997,111010,111031,111040,111079,111090,111092,111095,111101,111104,111107,111113,111116,111136,111139,111141,111180,111182,111185,111193,111196,111199,111226,111229,111239,111245,111248,111254,111256,111262,111266,111269,111271,111274,111298,111301],[10,109419,109415],{"id":109420},"_6控制任务cartpole",[38,109422,100626],{"id":100625},[14,109424,109425],{},"本章搭建一个最小 Cartpole 控制任务。",[14,109427,104310],{},[50,109429,109430,109433,109435,109438,109441,109444],{},[53,109431,109432],{},"slide joint",[53,109434,106163],{},[53,109436,109437],{},"cart force actuator",[53,109439,109440],{},"状态观测",[53,109442,109443],{},"简单控制循环",[53,109445,109446],{},"reward 设计雏形",[14,109448,109449],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[87,109451,109454],{"className":109452,"code":109453,"language":5171,"meta":18},[5169],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[93,109455,109453],{"__ignoreMap":18},[14,109457,109458],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[38,109460,100749],{"id":100748},[14,109462,100752],{},[87,109464,109465],{"className":23807,"code":104367,"language":23809,"meta":18,"style":18},[93,109466,109467],{"__ignoreMap":18},[96,109468,109469,109471,109473,109475,109477,109479,109481,109483,109485],{"class":98,"line":99},[96,109470,24555],{"class":1946},[96,109472,26294],{"class":211},[96,109474,23819],{"class":211},[96,109476,26379],{"class":155},[96,109478,104382],{"class":211},[96,109480,100777],{"class":211},[96,109482,102480],{"class":211},[96,109484,100793],{"class":211},[96,109486,104391],{"class":211},[14,109488,102798],{},[87,109490,109491],{"className":23807,"code":100898,"language":23809,"meta":18,"style":18},[93,109492,109493],{"__ignoreMap":18},[96,109494,109495,109497,109499,109501],{"class":98,"line":99},[96,109496,23816],{"class":1946},[96,109498,23819],{"class":211},[96,109500,100909],{"class":211},[96,109502,100912],{"class":211},[14,109504,102815],{},[87,109506,109508],{"className":23807,"code":109507,"language":23809,"meta":18,"style":18},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[93,109509,109510,109527,109536],{"__ignoreMap":18},[96,109511,109512,109514,109516,109518,109521,109523,109525],{"class":98,"line":99},[96,109513,30309],{"class":1946},[96,109515,29155],{"class":211},[96,109517,25094],{"class":155},[96,109519,109520],{"class":211}," mujoco-cartpole",[96,109522,100954],{"class":211},[96,109524,100957],{"class":155},[96,109526,100960],{"class":155},[96,109528,109529,109531,109533],{"class":98,"line":19},[96,109530,30309],{"class":1946},[96,109532,100967],{"class":211},[96,109534,109535],{"class":211}," mujoco-cartpole\n",[96,109537,109538,109540,109542,109544],{"class":98,"line":1162},[96,109539,23816],{"class":1946},[96,109541,23819],{"class":211},[96,109543,100909],{"class":211},[96,109545,100912],{"class":211},[14,109547,100983],{},[50,109549,109550,109553,109556],{},[53,109551,109552],{},"本章不依赖 Gymnasium。",[53,109554,109555],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[53,109557,109558],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[38,109560,101024],{"id":101023},[14,109562,109563],{},"Cartpole 的模型结构:",[87,109565,109568],{"className":109566,"code":109567,"language":5171,"meta":18},[5169],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[93,109569,109567],{"__ignoreMap":18},[14,109571,109572],{},"小车通过 slide joint 左右移动:",[87,109574,109576],{"className":53046,"code":109575,"language":53048,"meta":18,"style":18},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[93,109577,109578],{"__ignoreMap":18},[96,109579,109580,109582,109584,109586,109588,109591,109593,109595,109598,109600,109602,109605],{"class":98,"line":99},[96,109581,1017],{"class":106},[96,109583,102935],{"class":51279},[96,109585,14904],{"class":1946},[96,109587,152],{"class":106},[96,109589,109590],{"class":211},"\"cart_x\"",[96,109592,53803],{"class":1946},[96,109594,152],{"class":106},[96,109596,109597],{"class":211},"\"slide\"",[96,109599,106007],{"class":1946},[96,109601,152],{"class":106},[96,109603,109604],{"class":211},"\"1 0 0\"",[96,109606,101123],{"class":106},[14,109608,109609],{},"杆子通过 hinge joint 旋转:",[87,109611,109613],{"className":53046,"code":109612,"language":53048,"meta":18,"style":18},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[93,109614,109615],{"__ignoreMap":18},[96,109616,109617,109619,109621,109623,109625,109628,109630,109632,109634,109636,109638,109640],{"class":98,"line":99},[96,109618,1017],{"class":106},[96,109620,102935],{"class":51279},[96,109622,14904],{"class":1946},[96,109624,152],{"class":106},[96,109626,109627],{"class":211},"\"pole_hinge\"",[96,109629,53803],{"class":1946},[96,109631,152],{"class":106},[96,109633,105998],{"class":211},[96,109635,106007],{"class":1946},[96,109637,152],{"class":106},[96,109639,106012],{"class":211},[96,109641,101123],{"class":106},[14,109643,109644],{},"控制力作用在小车 slide joint 上:",[87,109646,109648],{"className":53046,"code":109647,"language":53048,"meta":18,"style":18},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[93,109649,109650],{"__ignoreMap":18},[96,109651,109652,109654,109656,109658,109660,109663,109665,109667,109669,109671,109673,109675],{"class":98,"line":99},[96,109653,1017],{"class":106},[96,109655,106053],{"class":51279},[96,109657,14904],{"class":1946},[96,109659,152],{"class":106},[96,109661,109662],{"class":211},"\"cart_motor\"",[96,109664,106063],{"class":1946},[96,109666,152],{"class":106},[96,109668,109590],{"class":211},[96,109670,106070],{"class":1946},[96,109672,152],{"class":106},[96,109674,54295],{"class":211},[96,109676,101123],{"class":106},[67,109678,109680],{"id":109679},"cartpole-的状态是什么","Cartpole 的状态是什么",[14,109682,109683],{},"这个简化模型有两个关节：",[244,109685,109686,109697],{},[247,109687,109688],{},[250,109689,109690,109692,109694],{},[253,109691,102738],{"align":23721},[253,109693,23722],{"align":23721},[253,109695,109696],{"align":23721},"对应状态",[291,109698,109699,109712],{},[250,109700,109701,109706,109709],{},[296,109702,109703],{"align":23721},[93,109704,109705],{},"cart_x",[296,109707,109708],{"align":23721},"slide",[296,109710,109711],{"align":23721},"小车 x 位置",[250,109713,109714,109719,109721],{},[296,109715,109716],{"align":23721},[93,109717,109718],{},"pole_hinge",[296,109720,105819],{"align":23721},[296,109722,109723],{"align":23721},"杆子角度",[14,109725,109726],{},"所以：",[87,109728,109731],{"className":109729,"code":109730,"language":5171,"meta":18},[5169],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[93,109732,109730],{"__ignoreMap":18},[14,109734,109735],{},"把它们拼起来就是观测：",[87,109737,109740],{"className":109738,"code":109739,"language":5171,"meta":18},[5169],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[93,109741,109739],{"__ignoreMap":18},[67,109743,109745],{"id":109744},"action-是什么","action 是什么",[14,109747,109748],{},"本章只有一个 actuator：",[87,109750,109753],{"className":109751,"code":109752,"language":5171,"meta":18},[5169],"data.ctrl[0] = action\n",[93,109754,109752],{"__ignoreMap":18},[14,109756,109757],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[67,109759,109761],{"id":109760},"reward-是什么","reward 是什么",[14,109763,109764],{},"奖励函数：",[87,109766,109768],{"className":30357,"code":109767,"language":30359,"meta":18,"style":18},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[93,109769,109770],{"__ignoreMap":18},[96,109771,109772,109774,109777,109779,109781,109783,109786,109788,109791,109793,109795,109797,109800,109802],{"class":98,"line":99},[96,109773,17030],{"class":102},[96,109775,109776],{"class":155}," float",[96,109778,107],{"class":106},[96,109780,102382],{"class":155},[96,109782,52250],{"class":102},[96,109784,109785],{"class":155}," 0.1",[96,109787,6502],{"class":102},[96,109789,109790],{"class":106}," cart_x ",[96,109792,562],{"class":102},[96,109794,109790],{"class":106},[96,109796,639],{"class":102},[96,109798,109799],{"class":106}," pole_angle ",[96,109801,562],{"class":102},[96,109803,109804],{"class":106}," pole_angle)\n",[14,109806,106205],{},[50,109808,109809,109814,109817],{},[53,109810,109811,109812,28364],{},"基础奖励是 ",[93,109813,102382],{},[53,109815,109816],{},"小车离中心越远，扣分越多。",[53,109818,109819],{},"杆子角度越大，扣分越多。",[14,109821,109822],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[38,109824,101232],{"id":101231},[87,109826,109828],{"className":30357,"code":109827,"language":30359,"meta":18,"style":18},"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",[93,109829,109830,109836,109846,109850,109854,109862,109867,109871,109875,109879,109884,109888,109893,109898,109903,109907,109912,109917,109922,109926,109930,109934,109938,109942,109947,109951,109955,109959,109963,109967,109977,109984,109988,109992,110006,110020,110033,110063,110067,110071,110083,110095,110103,110107,110120,110124,110128,110137,110141,110157,110167,110180,110193,110197,110220,110238,110242,110254,110258,110262,110272,110282,110286,110302,110343,110347,110367,110383,110387,110391,110403],{"__ignoreMap":18},[96,109831,109832,109834],{"class":98,"line":99},[96,109833,30371],{"class":102},[96,109835,101280],{"class":106},[96,109837,109838,109840,109842,109844],{"class":98,"line":19},[96,109839,30371],{"class":102},[96,109841,31359],{"class":106},[96,109843,31362],{"class":102},[96,109845,31365],{"class":106},[96,109847,109848],{"class":98,"line":1162},[96,109849,2383],{"emptyLinePlaceholder":23},[96,109851,109852],{"class":98,"line":1177},[96,109853,2383],{"emptyLinePlaceholder":23},[96,109855,109856,109858,109860],{"class":98,"line":1183},[96,109857,101293],{"class":155},[96,109859,13548],{"class":102},[96,109861,101298],{"class":211},[96,109863,109864],{"class":98,"line":1197},[96,109865,109866],{"class":211},"\u003Cmujoco model=\"cartpole\">\n",[96,109868,109869],{"class":98,"line":1203},[96,109870,101308],{"class":211},[96,109872,109873],{"class":98,"line":1294},[96,109874,2383],{"emptyLinePlaceholder":23},[96,109876,109877],{"class":98,"line":1300},[96,109878,101317],{"class":211},[96,109880,109881],{"class":98,"line":1312},[96,109882,109883],{"class":211},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[96,109885,109886],{"class":98,"line":1595},[96,109887,2383],{"emptyLinePlaceholder":23},[96,109889,109890],{"class":98,"line":1600},[96,109891,109892],{"class":211},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[96,109894,109895],{"class":98,"line":1606},[96,109896,109897],{"class":211},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[96,109899,109900],{"class":98,"line":1611},[96,109901,109902],{"class":211},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[96,109904,109905],{"class":98,"line":1625},[96,109906,2383],{"emptyLinePlaceholder":23},[96,109908,109909],{"class":98,"line":1630},[96,109910,109911],{"class":211},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[96,109913,109914],{"class":98,"line":1636},[96,109915,109916],{"class":211},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[96,109918,109919],{"class":98,"line":1657},[96,109920,109921],{"class":211},"        \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",[96,109923,109924],{"class":98,"line":1662},[96,109925,106417],{"class":211},[96,109927,109928],{"class":98,"line":1676},[96,109929,101346],{"class":211},[96,109931,109932],{"class":98,"line":1681},[96,109933,101351],{"class":211},[96,109935,109936],{"class":98,"line":1710},[96,109937,2383],{"emptyLinePlaceholder":23},[96,109939,109940],{"class":98,"line":1715},[96,109941,106434],{"class":211},[96,109943,109944],{"class":98,"line":1732},[96,109945,109946],{"class":211},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[96,109948,109949],{"class":98,"line":1737},[96,109950,106444],{"class":211},[96,109952,109953],{"class":98,"line":1742},[96,109954,101356],{"class":211},[96,109956,109957],{"class":98,"line":1747},[96,109958,95677],{"class":211},[96,109960,109961],{"class":98,"line":1761},[96,109962,2383],{"emptyLinePlaceholder":23},[96,109964,109965],{"class":98,"line":1766},[96,109966,2383],{"emptyLinePlaceholder":23},[96,109968,109969,109971,109974],{"class":98,"line":2560},[96,109970,31926],{"class":102},[96,109972,109973],{"class":1946}," get_observation",[96,109975,109976],{"class":106},"(data: mujoco.MjData) -> np.ndarray:\n",[96,109978,109979,109981],{"class":98,"line":2574},[96,109980,4073],{"class":102},[96,109982,109983],{"class":106}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[96,109985,109986],{"class":98,"line":2582},[96,109987,2383],{"emptyLinePlaceholder":23},[96,109989,109990],{"class":98,"line":2587},[96,109991,2383],{"emptyLinePlaceholder":23},[96,109993,109994,109996,109999,110002,110004],{"class":98,"line":2593},[96,109995,31926],{"class":102},[96,109997,109998],{"class":1946}," compute_reward",[96,110000,110001],{"class":106},"(obs: np.ndarray) -> ",[96,110003,146],{"class":155},[96,110005,3722],{"class":106},[96,110007,110008,110011,110013,110016,110018],{"class":98,"line":2599},[96,110009,110010],{"class":106},"    cart_x ",[96,110012,152],{"class":102},[96,110014,110015],{"class":106}," obs[",[96,110017,298],{"class":155},[96,110019,33225],{"class":106},[96,110021,110022,110025,110027,110029,110031],{"class":98,"line":2604},[96,110023,110024],{"class":106},"    pole_angle ",[96,110026,152],{"class":102},[96,110028,110015],{"class":106},[96,110030,324],{"class":155},[96,110032,33225],{"class":106},[96,110034,110035,110037,110039,110041,110043,110045,110047,110049,110051,110053,110055,110057,110059,110061],{"class":98,"line":7932},[96,110036,4073],{"class":102},[96,110038,109776],{"class":155},[96,110040,107],{"class":106},[96,110042,102382],{"class":155},[96,110044,52250],{"class":102},[96,110046,109785],{"class":155},[96,110048,6502],{"class":102},[96,110050,109790],{"class":106},[96,110052,562],{"class":102},[96,110054,109790],{"class":106},[96,110056,639],{"class":102},[96,110058,109799],{"class":106},[96,110060,562],{"class":102},[96,110062,109804],{"class":106},[96,110064,110065],{"class":98,"line":7956},[96,110066,2383],{"emptyLinePlaceholder":23},[96,110068,110069],{"class":98,"line":7961},[96,110070,2383],{"emptyLinePlaceholder":23},[96,110072,110073,110075,110077,110079,110081],{"class":98,"line":7967},[96,110074,31926],{"class":102},[96,110076,1956],{"class":1946},[96,110078,101377],{"class":106},[96,110080,95665],{"class":155},[96,110082,3722],{"class":106},[96,110084,110085,110087,110089,110091,110093],{"class":98,"line":7994},[96,110086,101386],{"class":106},[96,110088,152],{"class":102},[96,110090,101391],{"class":106},[96,110092,101293],{"class":155},[96,110094,113],{"class":106},[96,110096,110097,110099,110101],{"class":98,"line":7999},[96,110098,101400],{"class":106},[96,110100,152],{"class":102},[96,110102,101405],{"class":106},[96,110104,110105],{"class":98,"line":8005},[96,110106,2383],{"emptyLinePlaceholder":23},[96,110108,110109,110111,110113,110115,110117],{"class":98,"line":8017},[96,110110,105048],{"class":106},[96,110112,324],{"class":155},[96,110114,4426],{"class":106},[96,110116,152],{"class":102},[96,110118,110119],{"class":155}," 0.1\n",[96,110121,110122],{"class":98,"line":8029},[96,110123,105061],{"class":106},[96,110125,110126],{"class":98,"line":8041},[96,110127,2383],{"emptyLinePlaceholder":23},[96,110129,110130,110133,110135],{"class":98,"line":9700},[96,110131,110132],{"class":106},"    total_reward ",[96,110134,152],{"class":102},[96,110136,104740],{"class":155},[96,110138,110139],{"class":98,"line":9725},[96,110140,2383],{"emptyLinePlaceholder":23},[96,110142,110143,110145,110147,110149,110151,110153,110155],{"class":98,"line":9748},[96,110144,3184],{"class":102},[96,110146,31595],{"class":106},[96,110148,26022],{"class":102},[96,110150,32422],{"class":155},[96,110152,107],{"class":106},[96,110154,6394],{"class":155},[96,110156,30765],{"class":106},[96,110158,110159,110162,110164],{"class":98,"line":9772},[96,110160,110161],{"class":106},"        obs ",[96,110163,152],{"class":102},[96,110165,110166],{"class":106}," get_observation(data)\n",[96,110168,110169,110172,110174,110176,110178],{"class":98,"line":9777},[96,110170,110171],{"class":106},"        pole_angle ",[96,110173,152],{"class":102},[96,110175,110015],{"class":106},[96,110177,324],{"class":155},[96,110179,33225],{"class":106},[96,110181,110182,110185,110187,110189,110191],{"class":98,"line":9782},[96,110183,110184],{"class":106},"        pole_angular_velocity ",[96,110186,152],{"class":102},[96,110188,110015],{"class":106},[96,110190,178],{"class":155},[96,110192,33225],{"class":106},[96,110194,110195],{"class":98,"line":9787},[96,110196,2383],{"emptyLinePlaceholder":23},[96,110198,110199,110202,110204,110207,110209,110211,110213,110215,110217],{"class":98,"line":9796},[96,110200,110201],{"class":106},"        action ",[96,110203,152],{"class":102},[96,110205,110206],{"class":155}," 2.0",[96,110208,6502],{"class":102},[96,110210,109799],{"class":106},[96,110212,588],{"class":102},[96,110214,61846],{"class":155},[96,110216,6502],{"class":102},[96,110218,110219],{"class":106}," pole_angular_velocity\n",[96,110221,110222,110224,110226,110228,110230,110232,110234,110236],{"class":98,"line":9801},[96,110223,110201],{"class":106},[96,110225,152],{"class":102},[96,110227,107426],{"class":106},[96,110229,639],{"class":102},[96,110231,102382],{"class":155},[96,110233,12419],{"class":106},[96,110235,102382],{"class":155},[96,110237,113],{"class":106},[96,110239,110240],{"class":98,"line":9807},[96,110241,2383],{"emptyLinePlaceholder":23},[96,110243,110244,110246,110248,110250,110252],{"class":98,"line":9828},[96,110245,106596],{"class":106},[96,110247,298],{"class":155},[96,110249,4426],{"class":106},[96,110251,152],{"class":102},[96,110253,107449],{"class":106},[96,110255,110256],{"class":98,"line":9834},[96,110257,101495],{"class":106},[96,110259,110260],{"class":98,"line":9848},[96,110261,2383],{"emptyLinePlaceholder":23},[96,110263,110264,110267,110269],{"class":98,"line":9854},[96,110265,110266],{"class":106},"        reward ",[96,110268,152],{"class":102},[96,110270,110271],{"class":106}," compute_reward(get_observation(data))\n",[96,110273,110274,110277,110279],{"class":98,"line":9881},[96,110275,110276],{"class":106},"        total_reward ",[96,110278,9461],{"class":102},[96,110280,110281],{"class":106}," reward\n",[96,110283,110284],{"class":98,"line":9890},[96,110285,2383],{"emptyLinePlaceholder":23},[96,110287,110288,110290,110292,110294,110296,110298,110300],{"class":98,"line":9896},[96,110289,2480],{"class":102},[96,110291,31595],{"class":106},[96,110293,435],{"class":102},[96,110295,5738],{"class":155},[96,110297,101538],{"class":102},[96,110299,4076],{"class":155},[96,110301,3722],{"class":106},[96,110303,110304,110306,110308,110311,110314,110317,110320,110322,110325,110328,110330,110332,110334,110336,110339,110341],{"class":98,"line":9904},[96,110305,34629],{"class":155},[96,110307,107],{"class":106},[96,110309,110310],{"class":211},"\"step:\"",[96,110312,110313],{"class":106},", step, ",[96,110315,110316],{"class":211},"\"obs:\"",[96,110318,110319],{"class":106},", np.round(obs, ",[96,110321,178],{"class":155},[96,110323,110324],{"class":106},"), ",[96,110326,110327],{"class":211},"\"action:\"",[96,110329,12419],{"class":106},[96,110331,31997],{"class":155},[96,110333,107],{"class":106},[96,110335,146],{"class":155},[96,110337,110338],{"class":106},"(action), ",[96,110340,178],{"class":155},[96,110342,30476],{"class":106},[96,110344,110345],{"class":98,"line":9909},[96,110346,2383],{"emptyLinePlaceholder":23},[96,110348,110349,110351,110353,110356,110358,110360,110363,110365],{"class":98,"line":16588},[96,110350,31278],{"class":155},[96,110352,107],{"class":106},[96,110354,110355],{"class":211},"\"total_reward:\"",[96,110357,12419],{"class":106},[96,110359,31997],{"class":155},[96,110361,110362],{"class":106},"(total_reward, ",[96,110364,178],{"class":155},[96,110366,30476],{"class":106},[96,110368,110369,110371,110373,110376,110379,110381],{"class":98,"line":16594},[96,110370,31278],{"class":155},[96,110372,107],{"class":106},[96,110374,110375],{"class":211},"\"final obs:\"",[96,110377,110378],{"class":106},", np.round(get_observation(data), ",[96,110380,178],{"class":155},[96,110382,30476],{"class":106},[96,110384,110385],{"class":98,"line":16617},[96,110386,2383],{"emptyLinePlaceholder":23},[96,110388,110389],{"class":98,"line":16623},[96,110390,2383],{"emptyLinePlaceholder":23},[96,110392,110393,110395,110397,110399,110401],{"class":98,"line":16646},[96,110394,1514],{"class":102},[96,110396,31199],{"class":155},[96,110398,101538],{"class":102},[96,110400,101541],{"class":211},[96,110402,3722],{"class":106},[96,110404,110405],{"class":98,"line":16660},[96,110406,101548],{"class":106},[14,110408,103549],{},[87,110410,110412],{"className":23807,"code":110411,"language":23809,"meta":18,"style":18},"touch ch6_cartpole.py\n",[93,110413,110414],{"__ignoreMap":18},[96,110415,110416,110418],{"class":98,"line":99},[96,110417,101262],{"class":1946},[96,110419,110420],{"class":211}," ch6_cartpole.py\n",[14,110422,110423],{},"运行：",[87,110425,110427],{"className":23807,"code":110426,"language":23809,"meta":18,"style":18},"python ch6_cartpole.py\n",[93,110428,110429],{"__ignoreMap":18},[96,110430,110431,110433],{"class":98,"line":99},[96,110432,30359],{"class":1946},[96,110434,110420],{"class":211},[67,110436,101551],{"id":101551},[14,110438,110439],{},"构造观测：",[87,110441,110443],{"className":30357,"code":110442,"language":30359,"meta":18,"style":18},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[93,110444,110445,110453],{"__ignoreMap":18},[96,110446,110447,110449,110451],{"class":98,"line":99},[96,110448,31926],{"class":102},[96,110450,109973],{"class":1946},[96,110452,109976],{"class":106},[96,110454,110455,110457],{"class":98,"line":19},[96,110456,4073],{"class":102},[96,110458,109983],{"class":106},[14,110460,110461,110464,110465,110467,110468,110470],{},[93,110462,110463],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[93,110466,104009],{}," 2 维，",[93,110469,104339],{}," 2 维，所以 obs 是 4 维。",[14,110472,110473],{},"设置初始角度：",[87,110475,110477],{"className":30357,"code":110476,"language":30359,"meta":18,"style":18},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[93,110478,110479,110491],{"__ignoreMap":18},[96,110480,110481,110483,110485,110487,110489],{"class":98,"line":99},[96,110482,104678],{"class":106},[96,110484,324],{"class":155},[96,110486,4426],{"class":106},[96,110488,152],{"class":102},[96,110490,110119],{"class":155},[96,110492,110493],{"class":98,"line":19},[96,110494,104522],{"class":106},[14,110496,110497],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[14,110499,110500],{},"简单反馈控制：",[87,110502,110504],{"className":30357,"code":110503,"language":30359,"meta":18,"style":18},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[93,110505,110506,110526],{"__ignoreMap":18},[96,110507,110508,110510,110512,110514,110516,110518,110520,110522,110524],{"class":98,"line":99},[96,110509,107421],{"class":106},[96,110511,152],{"class":102},[96,110513,110206],{"class":155},[96,110515,6502],{"class":102},[96,110517,109799],{"class":106},[96,110519,588],{"class":102},[96,110521,61846],{"class":155},[96,110523,6502],{"class":102},[96,110525,110219],{"class":106},[96,110527,110528,110530,110532,110534,110536,110538,110540,110542],{"class":98,"line":19},[96,110529,107421],{"class":106},[96,110531,152],{"class":102},[96,110533,107426],{"class":106},[96,110535,639],{"class":102},[96,110537,102382],{"class":155},[96,110539,12419],{"class":106},[96,110541,102382],{"class":155},[96,110543,113],{"class":106},[14,110545,110546],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[14,110548,110549],{},"限制动作：",[87,110551,110553],{"className":30357,"code":110552,"language":30359,"meta":18,"style":18},"np.clip(action, -1.0, 1.0)\n",[93,110554,110555],{"__ignoreMap":18},[96,110556,110557,110560,110562,110564,110566,110568],{"class":98,"line":99},[96,110558,110559],{"class":106},"np.clip(action, ",[96,110561,639],{"class":102},[96,110563,102382],{"class":155},[96,110565,12419],{"class":106},[96,110567,102382],{"class":155},[96,110569,113],{"class":106},[14,110571,110572,110573,110576],{},"因为 XML 里 ",[93,110574,110575],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[67,110578,101687],{"id":101687},[87,110580,110581],{"className":30357,"code":110442,"language":30359,"meta":18,"style":18},[93,110582,110583,110591],{"__ignoreMap":18},[96,110584,110585,110587,110589],{"class":98,"line":99},[96,110586,31926],{"class":102},[96,110588,109973],{"class":1946},[96,110590,109976],{"class":106},[96,110592,110593,110595],{"class":98,"line":19},[96,110594,4073],{"class":102},[96,110596,109983],{"class":106},[14,110598,110599,110600,110603,110604,110607,110608,110611],{},"这段定义了一个函数，用来获取当前观测。",[93,110601,110602],{},"data.qpos.copy()"," 是位置数组副本，",[93,110605,110606],{},"data.qvel.copy()"," 是速度数组副本。",[93,110609,110610],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[14,110613,110614],{},"在本章模型里：",[87,110616,110619],{"className":110617,"code":110618,"language":5171,"meta":18},[5169],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[93,110620,110618],{"__ignoreMap":18},[14,110622,110623],{},"所以返回的 obs 是：",[87,110625,110628],{"className":110626,"code":110627,"language":5171,"meta":18},[5169],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[93,110629,110627],{"__ignoreMap":18},[87,110631,110633],{"className":30357,"code":110632,"language":30359,"meta":18,"style":18},"def compute_reward(obs: np.ndarray) -> float:\n",[93,110634,110635],{"__ignoreMap":18},[96,110636,110637,110639,110641,110643,110645],{"class":98,"line":99},[96,110638,31926],{"class":102},[96,110640,109998],{"class":1946},[96,110642,110001],{"class":106},[96,110644,146],{"class":155},[96,110646,3722],{"class":106},[14,110648,110649,110650,110653],{},"这行定义奖励函数。输入是观测 ",[93,110651,110652],{},"obs","，输出是一个浮点数奖励。",[87,110655,110657],{"className":30357,"code":110656,"language":30359,"meta":18,"style":18},"cart_x = obs[0]\npole_angle = obs[1]\n",[93,110658,110659,110672],{"__ignoreMap":18},[96,110660,110661,110664,110666,110668,110670],{"class":98,"line":99},[96,110662,110663],{"class":106},"cart_x ",[96,110665,152],{"class":102},[96,110667,110015],{"class":106},[96,110669,298],{"class":155},[96,110671,33225],{"class":106},[96,110673,110674,110677,110679,110681,110683],{"class":98,"line":19},[96,110675,110676],{"class":106},"pole_angle ",[96,110678,152],{"class":102},[96,110680,110015],{"class":106},[96,110682,324],{"class":155},[96,110684,33225],{"class":106},[14,110686,110687,110688,110691,110692,110695],{},"数组索引从 0 开始。",[93,110689,110690],{},"obs[0]"," 是第一个元素，也就是小车位置。",[93,110693,110694],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[87,110697,110698],{"className":30357,"code":109767,"language":30359,"meta":18,"style":18},[93,110699,110700],{"__ignoreMap":18},[96,110701,110702,110704,110706,110708,110710,110712,110714,110716,110718,110720,110722,110724,110726,110728],{"class":98,"line":99},[96,110703,17030],{"class":102},[96,110705,109776],{"class":155},[96,110707,107],{"class":106},[96,110709,102382],{"class":155},[96,110711,52250],{"class":102},[96,110713,109785],{"class":155},[96,110715,6502],{"class":102},[96,110717,109790],{"class":106},[96,110719,562],{"class":102},[96,110721,109790],{"class":106},[96,110723,639],{"class":102},[96,110725,109799],{"class":106},[96,110727,562],{"class":102},[96,110729,109804],{"class":106},[14,110731,110732,110733,110736,110737,110740],{},"这行计算奖励。",[93,110734,110735],{},"cart_x * cart_x"," 是小车位置的平方，",[93,110738,110739],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[87,110742,110744],{"className":30357,"code":110743,"language":30359,"meta":18,"style":18},"data.qpos[1] = 0.1\n",[93,110745,110746],{"__ignoreMap":18},[96,110747,110748,110750,110752,110754,110756],{"class":98,"line":99},[96,110749,104678],{"class":106},[96,110751,324],{"class":155},[96,110753,4426],{"class":106},[96,110755,152],{"class":102},[96,110757,110119],{"class":155},[14,110759,110760,110761,110763,110764,110766],{},"手动设置杆子的初始角度。因为 ",[93,110762,105435],{}," 是小车位置，",[93,110765,105438],{}," 是杆子角度，所以这里改的是杆子。",[87,110768,110769],{"className":30357,"code":104522,"language":30359,"meta":18,"style":18},[93,110770,110771],{"__ignoreMap":18},[96,110772,110773],{"class":98,"line":99},[96,110774,104522],{"class":106},[14,110776,105481,110777,110779],{},[93,110778,104009],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[87,110781,110783],{"className":30357,"code":110782,"language":30359,"meta":18,"style":18},"total_reward = 0.0\n",[93,110784,110785],{"__ignoreMap":18},[96,110786,110787,110790,110792],{"class":98,"line":99},[96,110788,110789],{"class":106},"total_reward ",[96,110791,152],{"class":102},[96,110793,104740],{"class":155},[14,110795,110796],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[87,110798,110800],{"className":30357,"code":110799,"language":30359,"meta":18,"style":18},"for step in range(1000):\n",[93,110801,110802],{"__ignoreMap":18},[96,110803,110804,110806,110808,110810,110812,110814,110816],{"class":98,"line":99},[96,110805,3008],{"class":102},[96,110807,31595],{"class":106},[96,110809,26022],{"class":102},[96,110811,32422],{"class":155},[96,110813,107],{"class":106},[96,110815,6394],{"class":155},[96,110817,30765],{"class":106},[14,110819,110820,110821,110823],{},"循环 1000 步。",[93,110822,107113],{}," 是当前步数，从 0 到 999。",[87,110825,110827],{"className":30357,"code":110826,"language":30359,"meta":18,"style":18},"obs = get_observation(data)\n",[93,110828,110829],{"__ignoreMap":18},[96,110830,110831,110834,110836],{"class":98,"line":99},[96,110832,110833],{"class":106},"obs ",[96,110835,152],{"class":102},[96,110837,110166],{"class":106},[14,110839,110840,110841,28364],{},"读取当前状态，保存到 ",[93,110842,110652],{},[87,110844,110846],{"className":30357,"code":110845,"language":30359,"meta":18,"style":18},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[93,110847,110848,110860],{"__ignoreMap":18},[96,110849,110850,110852,110854,110856,110858],{"class":98,"line":99},[96,110851,110676],{"class":106},[96,110853,152],{"class":102},[96,110855,110015],{"class":106},[96,110857,324],{"class":155},[96,110859,33225],{"class":106},[96,110861,110862,110865,110867,110869,110871],{"class":98,"line":19},[96,110863,110864],{"class":106},"pole_angular_velocity ",[96,110866,152],{"class":102},[96,110868,110015],{"class":106},[96,110870,178],{"class":155},[96,110872,33225],{"class":106},[14,110874,110875,110876,110879,110880,28364],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[93,110877,110878],{},"obs[3]","？因为 obs 的顺序是 ",[93,110881,110882],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[87,110884,110886],{"className":30357,"code":110885,"language":30359,"meta":18,"style":18},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[93,110887,110888],{"__ignoreMap":18},[96,110889,110890,110892,110894,110896,110898,110900,110902,110904,110906],{"class":98,"line":99},[96,110891,107421],{"class":106},[96,110893,152],{"class":102},[96,110895,110206],{"class":155},[96,110897,6502],{"class":102},[96,110899,109799],{"class":106},[96,110901,588],{"class":102},[96,110903,61846],{"class":155},[96,110905,6502],{"class":102},[96,110907,110219],{"class":106},[14,110909,110910,110911,100997,110913,110915],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[93,110912,105239],{},[93,110914,35308],{}," 是人为设置的系数，不是固定公式。",[87,110917,110919],{"className":30357,"code":110918,"language":30359,"meta":18,"style":18},"action = np.clip(action, -1.0, 1.0)\n",[93,110920,110921],{"__ignoreMap":18},[96,110922,110923,110925,110927,110929,110931,110933,110935,110937],{"class":98,"line":99},[96,110924,107421],{"class":106},[96,110926,152],{"class":102},[96,110928,107426],{"class":106},[96,110930,639],{"class":102},[96,110932,102382],{"class":155},[96,110934,12419],{"class":106},[96,110936,102382],{"class":155},[96,110938,113],{"class":106},[14,110940,110941],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[87,110943,110944],{"className":30357,"code":109752,"language":30359,"meta":18,"style":18},[93,110945,110946],{"__ignoreMap":18},[96,110947,110948,110950,110952,110954,110956],{"class":98,"line":99},[96,110949,105850],{"class":106},[96,110951,298],{"class":155},[96,110953,4426],{"class":106},[96,110955,152],{"class":102},[96,110957,107449],{"class":106},[14,110959,110960],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[87,110962,110963],{"className":30357,"code":104484,"language":30359,"meta":18,"style":18},[93,110964,110965],{"__ignoreMap":18},[96,110966,110967],{"class":98,"line":99},[96,110968,104484],{"class":106},[14,110970,110971,110972,110974],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[93,110973,106105],{}," 计算小车和杆子的下一刻状态。",[87,110976,110978],{"className":30357,"code":110977,"language":30359,"meta":18,"style":18},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[93,110979,110980,110989],{"__ignoreMap":18},[96,110981,110982,110985,110987],{"class":98,"line":99},[96,110983,110984],{"class":106},"reward ",[96,110986,152],{"class":102},[96,110988,110271],{"class":106},[96,110990,110991,110993,110995],{"class":98,"line":19},[96,110992,110789],{"class":106},[96,110994,9461],{"class":102},[96,110996,110281],{"class":106},[14,110998,110999,111000,111002,111003,111006,111007,28364],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[93,111001,9461],{}," 是简写，",[93,111004,111005],{},"total_reward += reward"," 等价于 ",[93,111008,111009],{},"total_reward = total_reward + reward",[87,111011,111013],{"className":30357,"code":111012,"language":30359,"meta":18,"style":18},"if step % 100 == 0:\n",[93,111014,111015],{"__ignoreMap":18},[96,111016,111017,111019,111021,111023,111025,111027,111029],{"class":98,"line":99},[96,111018,1514],{"class":102},[96,111020,31595],{"class":106},[96,111022,435],{"class":102},[96,111024,5738],{"class":155},[96,111026,101538],{"class":102},[96,111028,4076],{"class":155},[96,111030,3722],{"class":106},[14,111032,111033,111035,111036,111039],{},[93,111034,435],{}," 是取余数。",[93,111037,111038],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[87,111041,111043],{"className":30357,"code":111042,"language":30359,"meta":18,"style":18},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[93,111044,111045],{"__ignoreMap":18},[96,111046,111047,111049,111051,111053,111055,111057,111059,111061,111063,111065,111067,111069,111071,111073,111075,111077],{"class":98,"line":99},[96,111048,30394],{"class":155},[96,111050,107],{"class":106},[96,111052,110310],{"class":211},[96,111054,110313],{"class":106},[96,111056,110316],{"class":211},[96,111058,110319],{"class":106},[96,111060,178],{"class":155},[96,111062,110324],{"class":106},[96,111064,110327],{"class":211},[96,111066,12419],{"class":106},[96,111068,31997],{"class":155},[96,111070,107],{"class":106},[96,111072,146],{"class":155},[96,111074,110338],{"class":106},[96,111076,178],{"class":155},[96,111078,30476],{"class":106},[14,111080,111081,111082,111085,111086,111089],{},"打印当前步数、观测和动作。",[93,111083,111084],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[93,111087,111088],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[38,111091,102295],{"id":102294},[14,111093,111094],{},"观测向量:",[87,111096,111099],{"className":111097,"code":111098,"language":5171,"meta":18},[5169],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[93,111100,111098],{"__ignoreMap":18},[14,111102,111103],{},"控制器是教学用的简单线性反馈，不保证最优。",[14,111105,111106],{},"每隔 100 步会打印一次：",[87,111108,111111],{"className":111109,"code":111110,"language":5171,"meta":18},[5169],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[93,111112,111110],{"__ignoreMap":18},[14,111114,111115],{},"重点观察：",[50,111117,111118,111124,111129],{},[53,111119,111120,111123],{},[93,111121,111122],{},"pole_angle"," 是否越来越大。",[53,111125,111126,111128],{},[93,111127,109705],{}," 是否跑得太远。",[53,111130,111131,111132,82518,111134,28364],{},"action 是否经常被 clip 到 ",[93,111133,103894],{},[93,111135,324],{},[14,111137,111138],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[38,111140,102327],{"id":102326},[50,111142,111143,111149,111152,111158,111168,111174,111177],{},[53,111144,111145,111146,28364],{},"把初始角度改为 ",[93,111147,111148],{},"data.qpos[1] = 0.3",[53,111150,111151],{},"重新运行，观察控制是否变差。",[53,111153,111154,111155,111157],{},"把 actuator ",[93,111156,107046],{}," 改小。",[53,111159,111160,111161,111164,111165,28364],{},"打印 ",[93,111162,111163],{},"model.nq, model.nv, model.nu","，应为 ",[93,111166,111167],{},"2 2 1",[53,111169,111170,111171,111173],{},"把 reward 里的 ",[93,111172,110739],{}," 系数改大，观察总奖励变化。",[53,111175,111176],{},"把控制器改成反号，观察杆子是否更容易倒。",[53,111178,111179],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[38,111181,102432],{"id":102431},[67,111183,111184],{"id":111184},"杆子方向和预期不一致",[14,111186,102375,111187,111189,111190,111192],{},[93,111188,106218],{}," 和 capsule 的 ",[93,111191,103155],{},"，必要时用 viewer 可视化确认。",[67,111194,111195],{"id":111195},"控制器越控越倒",[14,111197,111198],{},"说明反馈符号可能反了，尝试:",[87,111200,111202],{"className":30357,"code":111201,"language":30359,"meta":18,"style":18},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[93,111203,111204],{"__ignoreMap":18},[96,111205,111206,111208,111210,111212,111214,111216,111218,111220,111222,111224],{"class":98,"line":99},[96,111207,107421],{"class":106},[96,111209,152],{"class":102},[96,111211,52250],{"class":102},[96,111213,105239],{"class":155},[96,111215,6502],{"class":102},[96,111217,109799],{"class":106},[96,111219,639],{"class":102},[96,111221,61846],{"class":155},[96,111223,6502],{"class":102},[96,111225,110219],{"class":106},[67,111227,111228],{"id":111228},"小车飞走",[14,111230,111231,111232,111234,111235,111238],{},"降低 ",[93,111233,107046],{}," 或缩小 ",[93,111236,111237],{},"action"," 的 clip 范围。",[67,111240,111242,111244],{"id":111241},"obs3-为什么是杆子角速度",[93,111243,110878],{}," 为什么是杆子角速度",[14,111246,111247],{},"因为这个模型里：",[87,111249,111252],{"className":111250,"code":111251,"language":5171,"meta":18},[5169],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[93,111253,111251],{"__ignoreMap":18},[14,111255,109726],{},[87,111257,111260],{"className":111258,"code":111259,"language":5171,"meta":18},[5169],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[93,111261,111259],{"__ignoreMap":18},[67,111263,111265],{"id":111264},"reward-变成负数是否错误","reward 变成负数是否错误",[14,111267,111268],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[38,111270,102586],{"id":102585},[14,111272,111273],{},"一个控制任务通常包含：",[50,111275,111276,111279,111287,111292,111295],{},[53,111277,111278],{},"模型：Cartpole 的 body、joint、actuator。",[53,111280,111281,111282,319,111284,111286],{},"观测：从 ",[93,111283,104009],{},[93,111285,104339],{}," 里取状态。",[53,111288,111289,111290,28364],{},"动作：写入 ",[93,111291,101055],{},[53,111293,111294],{},"奖励：根据任务目标打分。",[53,111296,111297],{},"循环：obs -> action -> step -> reward。",[14,111299,111300],{},"这就是后面 Gymnasium 环境的基本骨架。",[5110,111302,104265],{},{"title":18,"searchDepth":19,"depth":19,"links":111304},[111305,111306,111307,111312,111316,111317,111318,111326],{"id":100625,"depth":19,"text":100626},{"id":100748,"depth":19,"text":100749},{"id":101023,"depth":19,"text":101024,"children":111308},[111309,111310,111311],{"id":109679,"depth":1162,"text":109680},{"id":109744,"depth":1162,"text":109745},{"id":109760,"depth":1162,"text":109761},{"id":101231,"depth":19,"text":101232,"children":111313},[111314,111315],{"id":101551,"depth":1162,"text":101551},{"id":101687,"depth":1162,"text":101687},{"id":102294,"depth":19,"text":102295},{"id":102326,"depth":19,"text":102327},{"id":102431,"depth":19,"text":102432,"children":111319},[111320,111321,111322,111323,111325],{"id":111184,"depth":1162,"text":111184},{"id":111195,"depth":1162,"text":111195},{"id":111228,"depth":1162,"text":111228},{"id":111241,"depth":1162,"text":111324},"obs[3] 为什么是杆子角速度",{"id":111264,"depth":1162,"text":111265},{"id":102585,"depth":19,"text":102586},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109415,"description":18},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111333,"title":111334,"body":111335,"description":18,"extension":21,"meta":113349,"navigation":23,"path":113350,"seo":113351,"stem":113352,"__hash__":113353},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111336,"toc":113325},[111337,111340,111342,111345,111347,111364,111367,111370,111376,111379,111381,111383,111407,111409,111423,111425,111466,111468,111486,111488,111491,111497,111500,111528,111532,111538,111563,111566,111597,111604,111607,111610,111616,111619,111625,111628,111634,111638,111641,111666,111669,111671,112431,112433,112445,112447,112458,112460,112463,112480,112483,112485,112496,112499,112501,112547,112550,112563,112566,112648,112651,112653,112669,112679,112692,112695,112734,112744,112755,112765,112778,112781,112810,112813,112823,112826,112832,112849,112860,112862,112868,112885,112896,112917,112920,112932,112935,112956,112959,112967,112975,112992,112995,113064,113071,113079,113082,113095,113102,113104,113107,113113,113116,113119,113125,113131,113133,113173,113175,113181,113190,113193,113195,113215,113218,113221,113227,113231,113233,113260,113263,113266,113293,113299,113302,113305,113307,113310,113313,113319,113322],[10,111338,111334],{"id":111339},"_7控制任务reacher-机械臂到达目标",[38,111341,100626],{"id":100625},[14,111343,111344],{},"本章搭建一个二维两关节 reacher 任务。",[14,111346,104310],{},[50,111348,111349,111352,111355,111358,111361],{},[53,111350,111351],{},"两个 hinge joint",[53,111353,111354],{},"两个 motor actuator",[53,111356,111357],{},"site 作为末端点和目标点",[53,111359,111360],{},"根据末端和目标距离设计 reward",[53,111362,111363],{},"构造机械臂任务的基本形式",[14,111365,111366],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[14,111368,111369],{},"Reacher 任务可以理解为：",[87,111371,111374],{"className":111372,"code":111373,"language":5171,"meta":18},[5169],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[93,111375,111373],{"__ignoreMap":18},[14,111377,111378],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[38,111380,100749],{"id":100748},[14,111382,100752],{},[87,111384,111385],{"className":23807,"code":104367,"language":23809,"meta":18,"style":18},[93,111386,111387],{"__ignoreMap":18},[96,111388,111389,111391,111393,111395,111397,111399,111401,111403,111405],{"class":98,"line":99},[96,111390,24555],{"class":1946},[96,111392,26294],{"class":211},[96,111394,23819],{"class":211},[96,111396,26379],{"class":155},[96,111398,104382],{"class":211},[96,111400,100777],{"class":211},[96,111402,102480],{"class":211},[96,111404,100793],{"class":211},[96,111406,104391],{"class":211},[14,111408,102798],{},[87,111410,111411],{"className":23807,"code":100898,"language":23809,"meta":18,"style":18},[93,111412,111413],{"__ignoreMap":18},[96,111414,111415,111417,111419,111421],{"class":98,"line":99},[96,111416,23816],{"class":1946},[96,111418,23819],{"class":211},[96,111420,100909],{"class":211},[96,111422,100912],{"class":211},[14,111424,102815],{},[87,111426,111428],{"className":23807,"code":111427,"language":23809,"meta":18,"style":18},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[93,111429,111430,111447,111456],{"__ignoreMap":18},[96,111431,111432,111434,111436,111438,111441,111443,111445],{"class":98,"line":99},[96,111433,30309],{"class":1946},[96,111435,29155],{"class":211},[96,111437,25094],{"class":155},[96,111439,111440],{"class":211}," mujoco-reacher",[96,111442,100954],{"class":211},[96,111444,100957],{"class":155},[96,111446,100960],{"class":155},[96,111448,111449,111451,111453],{"class":98,"line":19},[96,111450,30309],{"class":1946},[96,111452,100967],{"class":211},[96,111454,111455],{"class":211}," mujoco-reacher\n",[96,111457,111458,111460,111462,111464],{"class":98,"line":1162},[96,111459,23816],{"class":1946},[96,111461,23819],{"class":211},[96,111463,100909],{"class":211},[96,111465,100912],{"class":211},[14,111467,100983],{},[50,111469,111470,111473,111476],{},[53,111471,111472],{},"本章使用低维状态，不使用图像输入。",[53,111474,111475],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[53,111477,111478,111479,319,111481,319,111483,111485],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[93,111480,104009],{},[93,111482,104339],{},[93,111484,103659],{}," 的方法一致。",[38,111487,101024],{"id":101023},[14,111489,111490],{},"Reacher 任务核心:",[87,111492,111495],{"className":111493,"code":111494,"language":5171,"meta":18},[5169],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[93,111496,111494],{"__ignoreMap":18},[14,111498,111499],{},"读取 site 世界坐标:",[87,111501,111503],{"className":30357,"code":111502,"language":30359,"meta":18,"style":18},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[93,111504,111505,111518],{"__ignoreMap":18},[96,111506,111507,111509,111511,111513,111516],{"class":98,"line":99},[96,111508,103613],{"class":106},[96,111510,152],{"class":102},[96,111512,103384],{"class":106},[96,111514,111515],{"class":211},"\"tip\"",[96,111517,113],{"class":106},[96,111519,111520,111523,111525],{"class":98,"line":19},[96,111521,111522],{"class":106},"tip_pos ",[96,111524,152],{"class":102},[96,111526,111527],{"class":106}," data.site_xpos[site_id]\n",[67,111529,111531],{"id":111530},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[14,111533,111534,111535,111537],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[93,111536,104009],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[87,111539,111541],{"className":30357,"code":111540,"language":30359,"meta":18,"style":18},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[93,111542,111543,111553],{"__ignoreMap":18},[96,111544,111545,111548,111550],{"class":98,"line":99},[96,111546,111547],{"class":106},"tip ",[96,111549,152],{"class":102},[96,111551,111552],{"class":106}," data.site_xpos[tip_site_id]\n",[96,111554,111555,111558,111560],{"class":98,"line":19},[96,111556,111557],{"class":106},"target ",[96,111559,152],{"class":102},[96,111561,111562],{"class":106}," data.site_xpos[target_site_id]\n",[14,111564,111565],{},"这样 reward 就很容易写：",[87,111567,111569],{"className":30357,"code":111568,"language":30359,"meta":18,"style":18},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[93,111570,111571,111586],{"__ignoreMap":18},[96,111572,111573,111576,111578,111581,111583],{"class":98,"line":99},[96,111574,111575],{"class":106},"dist ",[96,111577,152],{"class":102},[96,111579,111580],{"class":106}," np.linalg.norm(tip ",[96,111582,639],{"class":102},[96,111584,111585],{"class":106}," target)\n",[96,111587,111588,111590,111592,111594],{"class":98,"line":19},[96,111589,110984],{"class":106},[96,111591,152],{"class":102},[96,111593,52250],{"class":102},[96,111595,111596],{"class":106},"dist\n",[14,111598,111599,111600,111603],{},"距离越小，",[93,111601,111602],{},"-dist"," 越接近 0，奖励越高。",[67,111605,111606],{"id":111606},"两关节机械臂的状态",[14,111608,111609],{},"这个模型有两个 hinge joint：",[87,111611,111614],{"className":111612,"code":111613,"language":5171,"meta":18},[5169],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[93,111615,111613],{"__ignoreMap":18},[14,111617,111618],{},"再加上末端和目标位置：",[87,111620,111623],{"className":111621,"code":111622,"language":5171,"meta":18},[5169],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[93,111624,111622],{"__ignoreMap":18},[14,111626,111627],{},"总维度：",[87,111629,111632],{"className":111630,"code":111631,"language":5171,"meta":18},[5169],"2 + 2 + 3 + 3 = 10\n",[93,111633,111631],{"__ignoreMap":18},[67,111635,111637],{"id":111636},"为什么-gravity-是-0","为什么 gravity 是 0",[14,111639,111640],{},"本章把重力设为：",[87,111642,111644],{"className":53046,"code":111643,"language":53048,"meta":18,"style":18},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[93,111645,111646],{"__ignoreMap":18},[96,111647,111648,111650,111652,111654,111656,111658,111660,111662,111664],{"class":98,"line":99},[96,111649,1017],{"class":106},[96,111651,69145],{"class":51279},[96,111653,101173],{"class":1946},[96,111655,152],{"class":106},[96,111657,101178],{"class":211},[96,111659,101181],{"class":1946},[96,111661,152],{"class":106},[96,111663,103750],{"class":211},[96,111665,101123],{"class":106},[14,111667,111668],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[38,111670,101232],{"id":101231},[87,111672,111674],{"className":30357,"code":111673,"language":30359,"meta":18,"style":18},"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",[93,111675,111676,111682,111692,111696,111700,111708,111713,111718,111722,111726,111731,111736,111740,111745,111750,111755,111759,111764,111769,111774,111779,111783,111787,111791,111795,111799,111804,111809,111813,111817,111821,111825,111829,111844,111853,111865,111888,111895,111899,111903,111913,111927,111941,111948,111952,111956,111970,111982,111994,112007,112022,112039,112043,112047,112059,112071,112079,112087,112091,112107,112112,112125,112138,112153,112157,112192,112224,112228,112232,112241,112245,112261,112271,112282,112298,112314,112330,112346,112350,112368,112388,112407,112411,112415,112427],{"__ignoreMap":18},[96,111677,111678,111680],{"class":98,"line":99},[96,111679,30371],{"class":102},[96,111681,101280],{"class":106},[96,111683,111684,111686,111688,111690],{"class":98,"line":19},[96,111685,30371],{"class":102},[96,111687,31359],{"class":106},[96,111689,31362],{"class":102},[96,111691,31365],{"class":106},[96,111693,111694],{"class":98,"line":1162},[96,111695,2383],{"emptyLinePlaceholder":23},[96,111697,111698],{"class":98,"line":1177},[96,111699,2383],{"emptyLinePlaceholder":23},[96,111701,111702,111704,111706],{"class":98,"line":1183},[96,111703,101293],{"class":155},[96,111705,13548],{"class":102},[96,111707,101298],{"class":211},[96,111709,111710],{"class":98,"line":1197},[96,111711,111712],{"class":211},"\u003Cmujoco model=\"two_link_reacher\">\n",[96,111714,111715],{"class":98,"line":1203},[96,111716,111717],{"class":211},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[96,111719,111720],{"class":98,"line":1294},[96,111721,2383],{"emptyLinePlaceholder":23},[96,111723,111724],{"class":98,"line":1300},[96,111725,101317],{"class":211},[96,111727,111728],{"class":98,"line":1312},[96,111729,111730],{"class":211},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[96,111732,111733],{"class":98,"line":1595},[96,111734,111735],{"class":211},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[96,111737,111738],{"class":98,"line":1600},[96,111739,2383],{"emptyLinePlaceholder":23},[96,111741,111742],{"class":98,"line":1606},[96,111743,111744],{"class":211},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[96,111746,111747],{"class":98,"line":1611},[96,111748,111749],{"class":211},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[96,111751,111752],{"class":98,"line":1625},[96,111753,111754],{"class":211},"      \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",[96,111756,111757],{"class":98,"line":1630},[96,111758,2383],{"emptyLinePlaceholder":23},[96,111760,111761],{"class":98,"line":1636},[96,111762,111763],{"class":211},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[96,111765,111766],{"class":98,"line":1657},[96,111767,111768],{"class":211},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[96,111770,111771],{"class":98,"line":1662},[96,111772,111773],{"class":211},"        \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",[96,111775,111776],{"class":98,"line":1676},[96,111777,111778],{"class":211},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[96,111780,111781],{"class":98,"line":1681},[96,111782,106417],{"class":211},[96,111784,111785],{"class":98,"line":1710},[96,111786,101346],{"class":211},[96,111788,111789],{"class":98,"line":1715},[96,111790,101351],{"class":211},[96,111792,111793],{"class":98,"line":1732},[96,111794,2383],{"emptyLinePlaceholder":23},[96,111796,111797],{"class":98,"line":1737},[96,111798,106434],{"class":211},[96,111800,111801],{"class":98,"line":1742},[96,111802,111803],{"class":211},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[96,111805,111806],{"class":98,"line":1747},[96,111807,111808],{"class":211},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[96,111810,111811],{"class":98,"line":1761},[96,111812,106444],{"class":211},[96,111814,111815],{"class":98,"line":1766},[96,111816,101356],{"class":211},[96,111818,111819],{"class":98,"line":2560},[96,111820,95677],{"class":211},[96,111822,111823],{"class":98,"line":2574},[96,111824,2383],{"emptyLinePlaceholder":23},[96,111826,111827],{"class":98,"line":2582},[96,111828,2383],{"emptyLinePlaceholder":23},[96,111830,111831,111833,111836,111839,111841],{"class":98,"line":2587},[96,111832,31926],{"class":102},[96,111834,111835],{"class":1946}," site_position",[96,111837,111838],{"class":106},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[96,111840,1282],{"class":155},[96,111842,111843],{"class":106},") -> np.ndarray:\n",[96,111845,111846,111848,111850],{"class":98,"line":2593},[96,111847,103379],{"class":106},[96,111849,152],{"class":102},[96,111851,111852],{"class":106}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[96,111854,111855,111857,111859,111861,111863],{"class":98,"line":2599},[96,111856,3084],{"class":102},[96,111858,103428],{"class":106},[96,111860,1017],{"class":102},[96,111862,4076],{"class":155},[96,111864,3722],{"class":106},[96,111866,111867,111869,111871,111873,111875,111878,111880,111882,111884,111886],{"class":98,"line":2604},[96,111868,103411],{"class":102},[96,111870,103414],{"class":155},[96,111872,107],{"class":106},[96,111874,159],{"class":102},[96,111876,111877],{"class":211},"\"site not found: ",[96,111879,1003],{"class":155},[96,111881,79789],{"class":106},[96,111883,1053],{"class":155},[96,111885,358],{"class":211},[96,111887,113],{"class":106},[96,111889,111890,111892],{"class":98,"line":7932},[96,111891,4073],{"class":102},[96,111893,111894],{"class":106}," data.site_xpos[site_id].copy()\n",[96,111896,111897],{"class":98,"line":7956},[96,111898,2383],{"emptyLinePlaceholder":23},[96,111900,111901],{"class":98,"line":7961},[96,111902,2383],{"emptyLinePlaceholder":23},[96,111904,111905,111907,111910],{"class":98,"line":7967},[96,111906,31926],{"class":102},[96,111908,111909],{"class":1946}," get_obs",[96,111911,111912],{"class":106},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[96,111914,111915,111918,111920,111923,111925],{"class":98,"line":7994},[96,111916,111917],{"class":106},"    tip ",[96,111919,152],{"class":102},[96,111921,111922],{"class":106}," site_position(model, data, ",[96,111924,111515],{"class":211},[96,111926,113],{"class":106},[96,111928,111929,111932,111934,111936,111939],{"class":98,"line":7999},[96,111930,111931],{"class":106},"    target ",[96,111933,152],{"class":102},[96,111935,111922],{"class":106},[96,111937,111938],{"class":211},"\"target\"",[96,111940,113],{"class":106},[96,111942,111943,111945],{"class":98,"line":8005},[96,111944,4073],{"class":102},[96,111946,111947],{"class":106}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[96,111949,111950],{"class":98,"line":8017},[96,111951,2383],{"emptyLinePlaceholder":23},[96,111953,111954],{"class":98,"line":8029},[96,111955,2383],{"emptyLinePlaceholder":23},[96,111957,111958,111960,111963,111966,111968],{"class":98,"line":8041},[96,111959,31926],{"class":102},[96,111961,111962],{"class":1946}," reward",[96,111964,111965],{"class":106},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[96,111967,146],{"class":155},[96,111969,3722],{"class":106},[96,111971,111972,111974,111976,111978,111980],{"class":98,"line":9700},[96,111973,111917],{"class":106},[96,111975,152],{"class":102},[96,111977,111922],{"class":106},[96,111979,111515],{"class":211},[96,111981,113],{"class":106},[96,111983,111984,111986,111988,111990,111992],{"class":98,"line":9725},[96,111985,111931],{"class":106},[96,111987,152],{"class":102},[96,111989,111922],{"class":106},[96,111991,111938],{"class":211},[96,111993,113],{"class":106},[96,111995,111996,111999,112001,112003,112005],{"class":98,"line":9748},[96,111997,111998],{"class":106},"    dist ",[96,112000,152],{"class":102},[96,112002,111580],{"class":106},[96,112004,639],{"class":102},[96,112006,111585],{"class":106},[96,112008,112009,112012,112014,112017,112019],{"class":98,"line":9772},[96,112010,112011],{"class":106},"    control_cost ",[96,112013,152],{"class":102},[96,112015,112016],{"class":155}," 0.01",[96,112018,6502],{"class":102},[96,112020,112021],{"class":106}," np.sum(np.square(data.ctrl))\n",[96,112023,112024,112026,112028,112030,112032,112034,112036],{"class":98,"line":9777},[96,112025,4073],{"class":102},[96,112027,109776],{"class":155},[96,112029,107],{"class":106},[96,112031,639],{"class":102},[96,112033,111575],{"class":106},[96,112035,639],{"class":102},[96,112037,112038],{"class":106}," control_cost)\n",[96,112040,112041],{"class":98,"line":9782},[96,112042,2383],{"emptyLinePlaceholder":23},[96,112044,112045],{"class":98,"line":9787},[96,112046,2383],{"emptyLinePlaceholder":23},[96,112048,112049,112051,112053,112055,112057],{"class":98,"line":9796},[96,112050,31926],{"class":102},[96,112052,1956],{"class":1946},[96,112054,101377],{"class":106},[96,112056,95665],{"class":155},[96,112058,3722],{"class":106},[96,112060,112061,112063,112065,112067,112069],{"class":98,"line":9801},[96,112062,101386],{"class":106},[96,112064,152],{"class":102},[96,112066,101391],{"class":106},[96,112068,101293],{"class":155},[96,112070,113],{"class":106},[96,112072,112073,112075,112077],{"class":98,"line":9807},[96,112074,101400],{"class":106},[96,112076,152],{"class":102},[96,112078,101405],{"class":106},[96,112080,112081,112083,112085],{"class":98,"line":9828},[96,112082,110132],{"class":106},[96,112084,152],{"class":102},[96,112086,104740],{"class":155},[96,112088,112089],{"class":98,"line":9834},[96,112090,2383],{"emptyLinePlaceholder":23},[96,112092,112093,112095,112097,112099,112101,112103,112105],{"class":98,"line":9848},[96,112094,3184],{"class":102},[96,112096,31595],{"class":106},[96,112098,26022],{"class":102},[96,112100,32422],{"class":155},[96,112102,107],{"class":106},[96,112104,65053],{"class":155},[96,112106,30765],{"class":106},[96,112108,112109],{"class":98,"line":9854},[96,112110,112111],{"class":106},"        mujoco.mj_forward(model, data)\n",[96,112113,112114,112117,112119,112121,112123],{"class":98,"line":9881},[96,112115,112116],{"class":106},"        tip ",[96,112118,152],{"class":102},[96,112120,111922],{"class":106},[96,112122,111515],{"class":211},[96,112124,113],{"class":106},[96,112126,112127,112130,112132,112134,112136],{"class":98,"line":9890},[96,112128,112129],{"class":106},"        target ",[96,112131,152],{"class":102},[96,112133,111922],{"class":106},[96,112135,111938],{"class":211},[96,112137,113],{"class":106},[96,112139,112140,112143,112145,112148,112150],{"class":98,"line":9896},[96,112141,112142],{"class":106},"        error ",[96,112144,152],{"class":102},[96,112146,112147],{"class":106}," target ",[96,112149,639],{"class":102},[96,112151,112152],{"class":106}," tip\n",[96,112154,112155],{"class":98,"line":9904},[96,112156,2383],{"emptyLinePlaceholder":23},[96,112158,112159,112161,112163,112165,112167,112170,112172,112174,112177,112179,112182,112184,112186,112188,112190],{"class":98,"line":9909},[96,112160,106596],{"class":106},[96,112162,298],{"class":155},[96,112164,4426],{"class":106},[96,112166,152],{"class":102},[96,112168,112169],{"class":106}," np.clip(",[96,112171,105239],{"class":155},[96,112173,6502],{"class":102},[96,112175,112176],{"class":106}," error[",[96,112178,184],{"class":155},[96,112180,112181],{"class":106},"], ",[96,112183,639],{"class":102},[96,112185,102382],{"class":155},[96,112187,12419],{"class":106},[96,112189,102382],{"class":155},[96,112191,113],{"class":106},[96,112193,112194,112196,112198,112200,112202,112204,112206,112208,112210,112212,112214,112216,112218,112220,112222],{"class":98,"line":16588},[96,112195,106596],{"class":106},[96,112197,324],{"class":155},[96,112199,4426],{"class":106},[96,112201,152],{"class":102},[96,112203,112169],{"class":106},[96,112205,105239],{"class":155},[96,112207,6502],{"class":102},[96,112209,112176],{"class":106},[96,112211,298],{"class":155},[96,112213,112181],{"class":106},[96,112215,639],{"class":102},[96,112217,102382],{"class":155},[96,112219,12419],{"class":106},[96,112221,102382],{"class":155},[96,112223,113],{"class":106},[96,112225,112226],{"class":98,"line":16594},[96,112227,2383],{"emptyLinePlaceholder":23},[96,112229,112230],{"class":98,"line":16617},[96,112231,101495],{"class":106},[96,112233,112234,112236,112238],{"class":98,"line":16623},[96,112235,110276],{"class":106},[96,112237,9461],{"class":102},[96,112239,112240],{"class":106}," reward(model, data)\n",[96,112242,112243],{"class":98,"line":16646},[96,112244,2383],{"emptyLinePlaceholder":23},[96,112246,112247,112249,112251,112253,112255,112257,112259],{"class":98,"line":16660},[96,112248,2480],{"class":102},[96,112250,31595],{"class":106},[96,112252,435],{"class":102},[96,112254,5738],{"class":155},[96,112256,101538],{"class":102},[96,112258,4076],{"class":155},[96,112260,3722],{"class":106},[96,112262,112263,112266,112268],{"class":98,"line":16680},[96,112264,112265],{"class":106},"            obs ",[96,112267,152],{"class":102},[96,112269,112270],{"class":106}," get_obs(model, data)\n",[96,112272,112273,112275,112277,112279],{"class":98,"line":16686},[96,112274,34629],{"class":155},[96,112276,107],{"class":106},[96,112278,110310],{"class":211},[96,112280,112281],{"class":106},", step)\n",[96,112283,112284,112286,112288,112291,112294,112296],{"class":98,"line":16697},[96,112285,34629],{"class":155},[96,112287,107],{"class":106},[96,112289,112290],{"class":211},"\"  tip:\"",[96,112292,112293],{"class":106},", np.round(tip, ",[96,112295,178],{"class":155},[96,112297,30476],{"class":106},[96,112299,112300,112302,112304,112307,112310,112312],{"class":98,"line":16720},[96,112301,34629],{"class":155},[96,112303,107],{"class":106},[96,112305,112306],{"class":211},"\"  target:\"",[96,112308,112309],{"class":106},", np.round(target, ",[96,112311,178],{"class":155},[96,112313,30476],{"class":106},[96,112315,112316,112318,112320,112323,112326,112328],{"class":98,"line":16742},[96,112317,34629],{"class":155},[96,112319,107],{"class":106},[96,112321,112322],{"class":211},"\"  ctrl:\"",[96,112324,112325],{"class":106},", np.round(data.ctrl.copy(), ",[96,112327,178],{"class":155},[96,112329,30476],{"class":106},[96,112331,112332,112334,112336,112339,112342,112344],{"class":98,"line":16747},[96,112333,34629],{"class":155},[96,112335,107],{"class":106},[96,112337,112338],{"class":211},"\"  obs_dim:\"",[96,112340,112341],{"class":106},", obs.shape[",[96,112343,298],{"class":155},[96,112345,4640],{"class":106},[96,112347,112348],{"class":98,"line":16753},[96,112349,2383],{"emptyLinePlaceholder":23},[96,112351,112352,112354,112356,112358,112360,112362,112364,112366],{"class":98,"line":16767},[96,112353,31278],{"class":155},[96,112355,107],{"class":106},[96,112357,110355],{"class":211},[96,112359,12419],{"class":106},[96,112361,31997],{"class":155},[96,112363,110362],{"class":106},[96,112365,178],{"class":155},[96,112367,30476],{"class":106},[96,112369,112370,112372,112374,112377,112380,112382,112384,112386],{"class":98,"line":16780},[96,112371,31278],{"class":155},[96,112373,107],{"class":106},[96,112375,112376],{"class":211},"\"final tip:\"",[96,112378,112379],{"class":106},", np.round(site_position(model, data, ",[96,112381,111515],{"class":211},[96,112383,110324],{"class":106},[96,112385,178],{"class":155},[96,112387,30476],{"class":106},[96,112389,112390,112392,112394,112397,112399,112401,112403,112405],{"class":98,"line":16785},[96,112391,31278],{"class":155},[96,112393,107],{"class":106},[96,112395,112396],{"class":211},"\"target:\"",[96,112398,112379],{"class":106},[96,112400,111938],{"class":211},[96,112402,110324],{"class":106},[96,112404,178],{"class":155},[96,112406,30476],{"class":106},[96,112408,112409],{"class":98,"line":16799},[96,112410,2383],{"emptyLinePlaceholder":23},[96,112412,112413],{"class":98,"line":16804},[96,112414,2383],{"emptyLinePlaceholder":23},[96,112416,112417,112419,112421,112423,112425],{"class":98,"line":16810},[96,112418,1514],{"class":102},[96,112420,31199],{"class":155},[96,112422,101538],{"class":102},[96,112424,101541],{"class":211},[96,112426,3722],{"class":106},[96,112428,112429],{"class":98,"line":16815},[96,112430,101548],{"class":106},[14,112432,103549],{},[87,112434,112436],{"className":23807,"code":112435,"language":23809,"meta":18,"style":18},"touch ch7_reacher.py\n",[93,112437,112438],{"__ignoreMap":18},[96,112439,112440,112442],{"class":98,"line":99},[96,112441,101262],{"class":1946},[96,112443,112444],{"class":211}," ch7_reacher.py\n",[14,112446,110423],{},[87,112448,112450],{"className":23807,"code":112449,"language":23809,"meta":18,"style":18},"python ch7_reacher.py\n",[93,112451,112452],{"__ignoreMap":18},[96,112453,112454,112456],{"class":98,"line":99},[96,112455,30359],{"class":1946},[96,112457,112444],{"class":211},[67,112459,101551],{"id":101551},[14,112461,112462],{},"读取 site 坐标：",[87,112464,112466],{"className":30357,"code":112465,"language":30359,"meta":18,"style":18},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[93,112467,112468],{"__ignoreMap":18},[96,112469,112470,112472,112474,112476,112478],{"class":98,"line":99},[96,112471,31926],{"class":102},[96,112473,111835],{"class":1946},[96,112475,111838],{"class":106},[96,112477,1282],{"class":155},[96,112479,111843],{"class":106},[14,112481,112482],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[14,112484,110439],{},[87,112486,112488],{"className":30357,"code":112487,"language":30359,"meta":18,"style":18},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[93,112489,112490],{"__ignoreMap":18},[96,112491,112492,112494],{"class":98,"line":99},[96,112493,17030],{"class":102},[96,112495,111947],{"class":106},[14,112497,112498],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[14,112500,109764],{},[87,112502,112504],{"className":30357,"code":112503,"language":30359,"meta":18,"style":18},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[93,112505,112506,112518,112531],{"__ignoreMap":18},[96,112507,112508,112510,112512,112514,112516],{"class":98,"line":99},[96,112509,111575],{"class":106},[96,112511,152],{"class":102},[96,112513,111580],{"class":106},[96,112515,639],{"class":102},[96,112517,111585],{"class":106},[96,112519,112520,112523,112525,112527,112529],{"class":98,"line":19},[96,112521,112522],{"class":106},"control_cost ",[96,112524,152],{"class":102},[96,112526,112016],{"class":155},[96,112528,6502],{"class":102},[96,112530,112021],{"class":106},[96,112532,112533,112535,112537,112539,112541,112543,112545],{"class":98,"line":1162},[96,112534,17030],{"class":102},[96,112536,109776],{"class":155},[96,112538,107],{"class":106},[96,112540,639],{"class":102},[96,112542,111575],{"class":106},[96,112544,639],{"class":102},[96,112546,112038],{"class":106},[14,112548,112549],{},"奖励由两部分组成：",[50,112551,112552,112557],{},[53,112553,112554,112556],{},[93,112555,111602],{},"：末端离目标越远，奖励越低。",[53,112558,112559,112562],{},[93,112560,112561],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[14,112564,112565],{},"简单控制器：",[87,112567,112569],{"className":30357,"code":112568,"language":30359,"meta":18,"style":18},"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",[93,112570,112571,112584,112616],{"__ignoreMap":18},[96,112572,112573,112576,112578,112580,112582],{"class":98,"line":99},[96,112574,112575],{"class":106},"error ",[96,112577,152],{"class":102},[96,112579,112147],{"class":106},[96,112581,639],{"class":102},[96,112583,112152],{"class":106},[96,112585,112586,112588,112590,112592,112594,112596,112598,112600,112602,112604,112606,112608,112610,112612,112614],{"class":98,"line":19},[96,112587,105850],{"class":106},[96,112589,298],{"class":155},[96,112591,4426],{"class":106},[96,112593,152],{"class":102},[96,112595,112169],{"class":106},[96,112597,105239],{"class":155},[96,112599,6502],{"class":102},[96,112601,112176],{"class":106},[96,112603,184],{"class":155},[96,112605,112181],{"class":106},[96,112607,639],{"class":102},[96,112609,102382],{"class":155},[96,112611,12419],{"class":106},[96,112613,102382],{"class":155},[96,112615,113],{"class":106},[96,112617,112618,112620,112622,112624,112626,112628,112630,112632,112634,112636,112638,112640,112642,112644,112646],{"class":98,"line":1162},[96,112619,105850],{"class":106},[96,112621,324],{"class":155},[96,112623,4426],{"class":106},[96,112625,152],{"class":102},[96,112627,112169],{"class":106},[96,112629,105239],{"class":155},[96,112631,6502],{"class":102},[96,112633,112176],{"class":106},[96,112635,298],{"class":155},[96,112637,112181],{"class":106},[96,112639,639],{"class":102},[96,112641,102382],{"class":155},[96,112643,12419],{"class":106},[96,112645,102382],{"class":155},[96,112647,113],{"class":106},[14,112649,112650],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[67,112652,101687],{"id":101687},[87,112654,112655],{"className":30357,"code":112465,"language":30359,"meta":18,"style":18},[93,112656,112657],{"__ignoreMap":18},[96,112658,112659,112661,112663,112665,112667],{"class":98,"line":99},[96,112660,31926],{"class":102},[96,112662,111835],{"class":1946},[96,112664,111838],{"class":106},[96,112666,1282],{"class":155},[96,112668,111843],{"class":106},[14,112670,112671,112672,112674,112675,82518,112677,28364],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[93,112673,79789],{}," 是 site 的名字，比如 ",[93,112676,111515],{},[93,112678,111938],{},[87,112680,112682],{"className":30357,"code":112681,"language":30359,"meta":18,"style":18},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[93,112683,112684],{"__ignoreMap":18},[96,112685,112686,112688,112690],{"class":98,"line":99},[96,112687,103613],{"class":106},[96,112689,152],{"class":102},[96,112691,111852],{"class":106},[14,112693,112694],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[87,112696,112698],{"className":30357,"code":112697,"language":30359,"meta":18,"style":18},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[93,112699,112700,112712],{"__ignoreMap":18},[96,112701,112702,112704,112706,112708,112710],{"class":98,"line":99},[96,112703,1514],{"class":102},[96,112705,103428],{"class":106},[96,112707,1017],{"class":102},[96,112709,4076],{"class":155},[96,112711,3722],{"class":106},[96,112713,112714,112716,112718,112720,112722,112724,112726,112728,112730,112732],{"class":98,"line":19},[96,112715,103874],{"class":102},[96,112717,103414],{"class":155},[96,112719,107],{"class":106},[96,112721,159],{"class":102},[96,112723,111877],{"class":211},[96,112725,1003],{"class":155},[96,112727,79789],{"class":106},[96,112729,1053],{"class":155},[96,112731,358],{"class":211},[96,112733,113],{"class":106},[14,112735,112736,112737,112740,112741,112743],{},"如果 site 没找到，就主动报错。",[93,112738,112739],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[93,112742,79789],{}," 的值放进字符串里。",[87,112745,112747],{"className":30357,"code":112746,"language":30359,"meta":18,"style":18},"return data.site_xpos[site_id].copy()\n",[93,112748,112749],{"__ignoreMap":18},[96,112750,112751,112753],{"class":98,"line":99},[96,112752,17030],{"class":102},[96,112754,111894],{"class":106},[14,112756,112757,112758,112760,112761,112764],{},"返回这个 site 的世界坐标。",[93,112759,103659],{}," 里的每一行都是一个 site 的 ",[93,112762,112763],{},"(x, y, z)"," 坐标。",[87,112766,112768],{"className":30357,"code":112767,"language":30359,"meta":18,"style":18},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[93,112769,112770],{"__ignoreMap":18},[96,112771,112772,112774,112776],{"class":98,"line":99},[96,112773,31926],{"class":102},[96,112775,111909],{"class":1946},[96,112777,111912],{"class":106},[14,112779,112780],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[87,112782,112784],{"className":30357,"code":112783,"language":30359,"meta":18,"style":18},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[93,112785,112786,112798],{"__ignoreMap":18},[96,112787,112788,112790,112792,112794,112796],{"class":98,"line":99},[96,112789,111547],{"class":106},[96,112791,152],{"class":102},[96,112793,111922],{"class":106},[96,112795,111515],{"class":211},[96,112797,113],{"class":106},[96,112799,112800,112802,112804,112806,112808],{"class":98,"line":19},[96,112801,111557],{"class":106},[96,112803,152],{"class":102},[96,112805,111922],{"class":106},[96,112807,111938],{"class":211},[96,112809,113],{"class":106},[14,112811,112812],{},"分别读取末端点和目标点的世界坐标。",[87,112814,112815],{"className":30357,"code":112487,"language":30359,"meta":18,"style":18},[93,112816,112817],{"__ignoreMap":18},[96,112818,112819,112821],{"class":98,"line":99},[96,112820,17030],{"class":102},[96,112822,111947],{"class":106},[14,112824,112825],{},"把四部分拼成一个观测数组：",[87,112827,112830],{"className":112828,"code":112829,"language":5171,"meta":18},[5169],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[93,112831,112829],{"__ignoreMap":18},[87,112833,112835],{"className":30357,"code":112834,"language":30359,"meta":18,"style":18},"dist = np.linalg.norm(tip - target)\n",[93,112836,112837],{"__ignoreMap":18},[96,112838,112839,112841,112843,112845,112847],{"class":98,"line":99},[96,112840,111575],{"class":106},[96,112842,152],{"class":102},[96,112844,111580],{"class":106},[96,112846,639],{"class":102},[96,112848,111585],{"class":106},[14,112850,112851,112852,112855,112856,112859],{},"计算 tip 到 target 的距离。",[93,112853,112854],{},"tip - target"," 得到一个三维向量，",[93,112857,112858],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[14,112861,14617],{},[87,112863,112866],{"className":112864,"code":112865,"language":5171,"meta":18},[5169],"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",[93,112867,112865],{"__ignoreMap":18},[87,112869,112871],{"className":30357,"code":112870,"language":30359,"meta":18,"style":18},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[93,112872,112873],{"__ignoreMap":18},[96,112874,112875,112877,112879,112881,112883],{"class":98,"line":99},[96,112876,112522],{"class":106},[96,112878,152],{"class":102},[96,112880,112016],{"class":155},[96,112882,6502],{"class":102},[96,112884,112021],{"class":106},[14,112886,112887,112888,112891,112892,112895],{},"计算动作惩罚。",[93,112889,112890],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[93,112893,112894],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[87,112897,112899],{"className":30357,"code":112898,"language":30359,"meta":18,"style":18},"return float(-dist - control_cost)\n",[93,112900,112901],{"__ignoreMap":18},[96,112902,112903,112905,112907,112909,112911,112913,112915],{"class":98,"line":99},[96,112904,17030],{"class":102},[96,112906,109776],{"class":155},[96,112908,107],{"class":106},[96,112910,639],{"class":102},[96,112912,111575],{"class":106},[96,112914,639],{"class":102},[96,112916,112038],{"class":106},[14,112918,112919],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[87,112921,112922],{"className":30357,"code":110782,"language":30359,"meta":18,"style":18},[93,112923,112924],{"__ignoreMap":18},[96,112925,112926,112928,112930],{"class":98,"line":99},[96,112927,110789],{"class":106},[96,112929,152],{"class":102},[96,112931,104740],{"class":155},[14,112933,112934],{},"累计奖励变量，记录整个运行过程的总分。",[87,112936,112938],{"className":30357,"code":112937,"language":30359,"meta":18,"style":18},"for step in range(500):\n",[93,112939,112940],{"__ignoreMap":18},[96,112941,112942,112944,112946,112948,112950,112952,112954],{"class":98,"line":99},[96,112943,3008],{"class":102},[96,112945,31595],{"class":106},[96,112947,26022],{"class":102},[96,112949,32422],{"class":155},[96,112951,107],{"class":106},[96,112953,65053],{"class":155},[96,112955,30765],{"class":106},[14,112957,112958],{},"运行 500 个控制步。",[87,112960,112961],{"className":30357,"code":104522,"language":30359,"meta":18,"style":18},[93,112962,112963],{"__ignoreMap":18},[96,112964,112965],{"class":98,"line":99},[96,112966,104522],{"class":106},[14,112968,112969,112970,100997,112972,112974],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[93,112971,103210],{},[93,112973,103213],{}," 是当前状态下的坐标。",[87,112976,112978],{"className":30357,"code":112977,"language":30359,"meta":18,"style":18},"error = target - tip\n",[93,112979,112980],{"__ignoreMap":18},[96,112981,112982,112984,112986,112988,112990],{"class":98,"line":99},[96,112983,112575],{"class":106},[96,112985,152],{"class":102},[96,112987,112147],{"class":106},[96,112989,639],{"class":102},[96,112991,112152],{"class":106},[14,112993,112994],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[87,112996,112998],{"className":30357,"code":112997,"language":30359,"meta":18,"style":18},"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",[93,112999,113000,113032],{"__ignoreMap":18},[96,113001,113002,113004,113006,113008,113010,113012,113014,113016,113018,113020,113022,113024,113026,113028,113030],{"class":98,"line":99},[96,113003,105850],{"class":106},[96,113005,298],{"class":155},[96,113007,4426],{"class":106},[96,113009,152],{"class":102},[96,113011,112169],{"class":106},[96,113013,105239],{"class":155},[96,113015,6502],{"class":102},[96,113017,112176],{"class":106},[96,113019,184],{"class":155},[96,113021,112181],{"class":106},[96,113023,639],{"class":102},[96,113025,102382],{"class":155},[96,113027,12419],{"class":106},[96,113029,102382],{"class":155},[96,113031,113],{"class":106},[96,113033,113034,113036,113038,113040,113042,113044,113046,113048,113050,113052,113054,113056,113058,113060,113062],{"class":98,"line":19},[96,113035,105850],{"class":106},[96,113037,324],{"class":155},[96,113039,4426],{"class":106},[96,113041,152],{"class":102},[96,113043,112169],{"class":106},[96,113045,105239],{"class":155},[96,113047,6502],{"class":102},[96,113049,112176],{"class":106},[96,113051,298],{"class":155},[96,113053,112181],{"class":106},[96,113055,639],{"class":102},[96,113057,102382],{"class":155},[96,113059,12419],{"class":106},[96,113061,102382],{"class":155},[96,113063,113],{"class":106},[14,113065,113066,113067,113070],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[93,113068,113069],{},"error -> ctrl -> step"," 的流程。",[87,113072,113073],{"className":30357,"code":104484,"language":30359,"meta":18,"style":18},[93,113074,113075],{"__ignoreMap":18},[96,113076,113077],{"class":98,"line":99},[96,113078,104484],{"class":106},[14,113080,113081],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[87,113083,113085],{"className":30357,"code":113084,"language":30359,"meta":18,"style":18},"obs = get_obs(model, data)\n",[93,113086,113087],{"__ignoreMap":18},[96,113088,113089,113091,113093],{"class":98,"line":99},[96,113090,110833],{"class":106},[96,113092,152],{"class":102},[96,113094,112270],{"class":106},[14,113096,113097,113098,113101],{},"读取最新观测。后面打印 ",[93,113099,113100],{},"obs.shape[0]","，用来确认观测维度是 10。",[38,113103,102295],{"id":102294},[14,113105,113106],{},"观测维度为:",[87,113108,113111],{"className":113109,"code":113110,"language":5171,"meta":18},[5169],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[93,113112,113110],{"__ignoreMap":18},[14,113114,113115],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[14,113117,113118],{},"程序每 100 步打印：",[87,113120,113123],{"className":113121,"code":113122,"language":5171,"meta":18},[5169],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[93,113124,113122],{"__ignoreMap":18},[14,113126,113127,113128,113130],{},"如果控制有效，你应该看到最终 ",[93,113129,103210],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[38,113132,102327],{"id":102326},[50,113134,113135,113138,113141,113147,113153,113160,113170],{},[53,113136,113137],{},"修改目标点位置。",[53,113139,113140],{},"重新运行，观察最终 tip 是否变化。",[53,113142,113143,113144,113146],{},"把 gravity 改成 ",[93,113145,102568],{},"，观察控制是否变差。",[53,113148,111160,113149,111164,113151,28364],{},[93,113150,102137],{},[93,113152,184],{},[53,113154,102390,113155,102393,113157,113159],{},[93,113156,110575],{},[93,113158,107286],{},"，观察机械臂是否更难移动。",[53,113161,102390,113162,82509,113164,102393,113166,113169],{},[93,113163,103213],{},[93,113165,104125],{},[93,113167,113168],{},"0.2 0 0.6","，观察 reward 和 final tip。",[53,113171,113172],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[38,113174,102432],{"id":102431},[67,113176,113178],{"id":113177},"site-not-found",[93,113179,113180],{},"site not found",[14,113182,113183,113184,100997,113187,28364],{},"检查 XML 中是否有 ",[93,113185,113186],{},"site name=\"tip\"",[93,113188,113189],{},"site name=\"target\"",[67,113191,113192],{"id":113192},"机械臂完全不动",[14,113194,102502],{},[50,113196,113197,113202,113205,113210],{},[53,113198,113199,113201],{},[93,113200,102137],{}," 是否为 2",[53,113203,113204],{},"actuator 是否引用正确 joint",[53,113206,113207,113209],{},[93,113208,101055],{}," 是否被赋值",[53,113211,113212,113213],{},"是否执行了 ",[93,113214,100664],{},[67,113216,113217],{"id":113217},"控制效果不好",[14,113219,113220],{},"正常。本章重点不是控制器最优，而是任务结构:",[87,113222,113225],{"className":113223,"code":113224,"language":5171,"meta":18},[5169],"obs → action → mj_step → reward → next_obs\n",[93,113226,113224],{"__ignoreMap":18},[67,113228,113230],{"id":113229},"tip-坐标不变化","tip 坐标不变化",[14,113232,102554],{},[50,113234,113235,113240,113248,113257],{},[53,113236,113237,113238,28364],{},"是否每步调用了 ",[93,113239,100664],{},[53,113241,113242,113243,100997,113245,28364],{},"是否写入了 ",[93,113244,106105],{},[93,113246,113247],{},"data.ctrl[1]",[53,113249,113250,113251,319,113254,28364],{},"actuator 是否正确引用 ",[93,113252,113253],{},"joint1",[93,113255,113256],{},"joint2",[53,113258,113259],{},"控制输入是否太小。",[67,113261,113262],{"id":113262},"目标点不会动",[14,113264,113265],{},"本章的 target 是固定 site：",[87,113267,113269],{"className":53046,"code":113268,"language":53048,"meta":18,"style":18},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[93,113270,113271],{"__ignoreMap":18},[96,113272,113273,113275,113277,113279,113281,113283,113285,113287,113290],{"class":98,"line":99},[96,113274,1017],{"class":106},[96,113276,103189],{"class":51279},[96,113278,14904],{"class":1946},[96,113280,152],{"class":106},[96,113282,111938],{"class":211},[96,113284,101085],{"class":1946},[96,113286,152],{"class":106},[96,113288,113289],{"class":211},"\"0.5 0 0.4\"",[96,113291,113292],{"class":106}," ...\u002F>\n",[14,113294,113295,113296,113298],{},"它直接挂在 ",[93,113297,101820],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[67,113300,113301],{"id":113301},"机械臂不像真实机械臂",[14,113303,113304],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[38,113306,102586],{"id":102585},[14,113308,113309],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[14,113311,113312],{},"核心公式：",[87,113314,113317],{"className":113315,"code":113316,"language":5171,"meta":18},[5169],"distance = ||tip - target||\nreward = -distance - action_cost\n",[93,113318,113316],{"__ignoreMap":18},[14,113320,113321],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[5110,113323,113324],{},"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":18,"searchDepth":19,"depth":19,"links":113326},[113327,113328,113329,113334,113338,113339,113340,113348],{"id":100625,"depth":19,"text":100626},{"id":100748,"depth":19,"text":100749},{"id":101023,"depth":19,"text":101024,"children":113330},[113331,113332,113333],{"id":111530,"depth":1162,"text":111531},{"id":111606,"depth":1162,"text":111606},{"id":111636,"depth":1162,"text":111637},{"id":101231,"depth":19,"text":101232,"children":113335},[113336,113337],{"id":101551,"depth":1162,"text":101551},{"id":101687,"depth":1162,"text":101687},{"id":102294,"depth":19,"text":102295},{"id":102326,"depth":19,"text":102327},{"id":102431,"depth":19,"text":102432,"children":113341},[113342,113343,113344,113345,113346,113347],{"id":113177,"depth":1162,"text":113180},{"id":113192,"depth":1162,"text":113192},{"id":113217,"depth":1162,"text":113217},{"id":113229,"depth":1162,"text":113230},{"id":113262,"depth":1162,"text":113262},{"id":113301,"depth":1162,"text":113301},{"id":102585,"depth":19,"text":102586},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111334,"description":18},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113355,"title":113356,"body":113357,"description":18,"extension":21,"meta":116819,"navigation":23,"path":116820,"seo":116821,"stem":116822,"__hash__":116823},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113358,"toc":116790},[113359,113362,113364,113367,113370,113395,113398,113404,113407,113413,113415,113417,113441,113443,113461,113463,113506,113508,113535,113537,113540,113592,113595,113601,113610,113613,113651,113654,113693,113696,113704,113711,113714,113720,113722,113776,113783,113828,113831,113835,113851,113861,113863,115124,115126,115138,115140,115151,115153,115156,115177,115180,115183,115216,115222,115225,115258,115261,115264,115305,115310,115324,115327,115340,115345,115368,115370,115385,115395,115410,115417,115437,115452,115470,115473,115490,115498,115514,115520,115552,115565,115597,115607,115642,115656,115702,115716,115758,115769,115782,115788,115821,115824,115851,115861,115901,115911,115928,115935,115953,115956,115997,116010,116025,116028,116051,116054,116066,116069,116088,116093,116114,116117,116132,116135,116169,116181,116196,116199,116224,116227,116246,116249,116281,116284,116308,116314,116344,116351,116364,116367,116369,116371,116377,116380,116383,116395,116398,116400,116454,116456,116460,116466,116475,116478,116485,116487,116510,116513,116517,116519,116537,116543,116545,116578,116581,116587,116591,116594,116614,116619,116623,116630,116650,116655,116659,116662,116682,116685,116771,116775,116778,116784,116787],[10,113360,113356],{"id":113361},"_8gymnasium-风格强化学习接口基础",[38,113363,100626],{"id":100625},[14,113365,113366],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[14,113368,113369],{},"你将实现:",[87,113371,113373],{"className":30357,"code":113372,"language":30359,"meta":18,"style":18},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[93,113374,113375,113385],{"__ignoreMap":18},[96,113376,113377,113380,113382],{"class":98,"line":99},[96,113378,113379],{"class":106},"obs, info ",[96,113381,152],{"class":102},[96,113383,113384],{"class":106}," env.reset()\n",[96,113386,113387,113390,113392],{"class":98,"line":19},[96,113388,113389],{"class":106},"obs, reward, terminated, truncated, info ",[96,113391,152],{"class":102},[96,113393,113394],{"class":106}," env.step(action)\n",[14,113396,113397],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[14,113399,113400,113401,113403],{},"前面章节的代码都是“脚本式”的：在 ",[93,113402,102274],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[14,113405,113406],{},"可以先记住 Gymnasium 环境的核心交互：",[87,113408,113411],{"className":113409,"code":113410,"language":5171,"meta":18},[5169],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[93,113412,113410],{"__ignoreMap":18},[38,113414,100749],{"id":100748},[14,113416,100752],{},[87,113418,113419],{"className":23807,"code":104367,"language":23809,"meta":18,"style":18},[93,113420,113421],{"__ignoreMap":18},[96,113422,113423,113425,113427,113429,113431,113433,113435,113437,113439],{"class":98,"line":99},[96,113424,24555],{"class":1946},[96,113426,26294],{"class":211},[96,113428,23819],{"class":211},[96,113430,26379],{"class":155},[96,113432,104382],{"class":211},[96,113434,100777],{"class":211},[96,113436,102480],{"class":211},[96,113438,100793],{"class":211},[96,113440,104391],{"class":211},[14,113442,102798],{},[87,113444,113446],{"className":23807,"code":113445,"language":23809,"meta":18,"style":18},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[93,113447,113448],{"__ignoreMap":18},[96,113449,113450,113452,113454,113456,113458],{"class":98,"line":99},[96,113451,23816],{"class":1946},[96,113453,23819],{"class":211},[96,113455,100909],{"class":211},[96,113457,107690],{"class":211},[96,113459,113460],{"class":211}," gymnasium\n",[14,113462,102815],{},[87,113464,113466],{"className":23807,"code":113465,"language":23809,"meta":18,"style":18},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[93,113467,113468,113485,113494],{"__ignoreMap":18},[96,113469,113470,113472,113474,113476,113479,113481,113483],{"class":98,"line":99},[96,113471,30309],{"class":1946},[96,113473,29155],{"class":211},[96,113475,25094],{"class":155},[96,113477,113478],{"class":211}," mujoco-gym-api",[96,113480,100954],{"class":211},[96,113482,100957],{"class":155},[96,113484,100960],{"class":155},[96,113486,113487,113489,113491],{"class":98,"line":19},[96,113488,30309],{"class":1946},[96,113490,100967],{"class":211},[96,113492,113493],{"class":211}," mujoco-gym-api\n",[96,113495,113496,113498,113500,113502,113504],{"class":98,"line":1162},[96,113497,23816],{"class":1946},[96,113499,23819],{"class":211},[96,113501,100909],{"class":211},[96,113503,107690],{"class":211},[96,113505,113460],{"class":211},[14,113507,100983],{},[50,113509,113510,113520,113523,113529],{},[53,113511,113512,113513,113516,113517,28364],{},"本章使用 ",[93,113514,113515],{},"gymnasium","，不是旧版 ",[93,113518,113519],{},"gym",[53,113521,113522],{},"Gymnasium API 与旧 Gym API 有差异。",[53,113524,113525,113526,28364],{},"旧 Gym 常见返回值是 4 个: ",[93,113527,113528],{},"obs, reward, done, info",[53,113530,113531,113532,28364],{},"Gymnasium 返回值是 5 个: ",[93,113533,113534],{},"obs, reward, terminated, truncated, info",[38,113536,101024],{"id":101023},[14,113538,113539],{},"强化学习环境接口包含:",[244,113541,113542,113551],{},[247,113543,113544],{},[250,113545,113546,113549],{},[253,113547,113548],{"align":23721},"方法",[253,113550,102675],{"align":23721},[291,113552,113553,113563,113573,113583],{},[250,113554,113555,113560],{},[296,113556,113557],{"align":23721},[93,113558,113559],{},"reset()",[296,113561,113562],{"align":23721},"重置环境",[250,113564,113565,113570],{},[296,113566,113567],{"align":23721},[93,113568,113569],{},"step(action)",[296,113571,113572],{"align":23721},"执行动作",[250,113574,113575,113580],{},[296,113576,113577],{"align":23721},[93,113578,113579],{},"observation_space",[296,113581,113582],{"align":23721},"观测空间",[250,113584,113585,113590],{},[296,113586,113587],{"align":23721},[93,113588,113589],{},"action_space",[296,113591,23639],{"align":23721},[14,113593,113594],{},"一个最小环境需要完成:",[87,113596,113599],{"className":113597,"code":113598,"language":5171,"meta":18},[5169],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[93,113600,113598],{"__ignoreMap":18},[67,113602,113604,100997,113607,104617],{"id":113603},"terminated-和-truncated-的区别",[93,113605,113606],{},"terminated",[93,113608,113609],{},"truncated",[14,113611,113612],{},"Gymnasium 把“结束”拆成两个概念：",[244,113614,113615,113625],{},[247,113616,113617],{},[250,113618,113619,113621,113623],{},[253,113620,104553],{"align":23721},[253,113622,100679],{"align":23721},[253,113624,21171],{"align":23721},[291,113626,113627,113639],{},[250,113628,113629,113633,113636],{},[296,113630,113631],{"align":23721},[93,113632,113606],{},[296,113634,113635],{"align":23721},"任务自然结束",[296,113637,113638],{"align":23721},"机械臂到达目标、机器人摔倒",[250,113640,113641,113645,113648],{},[296,113642,113643],{"align":23721},[93,113644,113609],{},[296,113646,113647],{"align":23721},"因外部限制截断",[296,113649,113650],{"align":23721},"达到最大步数、时间限制",[14,113652,113653],{},"本章中：",[87,113655,113657],{"className":30357,"code":113656,"language":30359,"meta":18,"style":18},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[93,113658,113659,113674],{"__ignoreMap":18},[96,113660,113661,113664,113666,113669,113671],{"class":98,"line":99},[96,113662,113663],{"class":106},"terminated ",[96,113665,152],{"class":102},[96,113667,113668],{"class":106}," dist ",[96,113670,1017],{"class":102},[96,113672,113673],{"class":155}," 0.05\n",[96,113675,113676,113679,113681,113683,113686,113688,113690],{"class":98,"line":19},[96,113677,113678],{"class":106},"truncated ",[96,113680,152],{"class":102},[96,113682,38852],{"class":155},[96,113684,113685],{"class":106},".steps ",[96,113687,1693],{"class":102},[96,113689,38852],{"class":155},[96,113691,113692],{"class":106},".max_steps\n",[14,113694,113695],{},"也就是：",[50,113697,113698,113701],{},[53,113699,113700],{},"末端距离目标小于 0.05，任务成功结束。",[53,113702,113703],{},"步数超过上限，episode 被截断。",[67,113705,113707,100997,113709],{"id":113706},"observation_space-和-action_space",[93,113708,113579],{},[93,113710,113589],{},[14,113712,113713],{},"这两个对象告诉算法：",[87,113715,113718],{"className":113716,"code":113717,"language":5171,"meta":18},[5169],"观测长什么样\n动作允许多大\n",[93,113719,113717],{"__ignoreMap":18},[14,113721,14617],{},[87,113723,113725],{"className":30357,"code":113724,"language":30359,"meta":18,"style":18},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[93,113726,113727],{"__ignoreMap":18},[96,113728,113729,113731,113734,113736,113739,113742,113745,113747,113749,113752,113754,113756,113758,113760,113762,113764,113766,113769,113771,113773],{"class":98,"line":99},[96,113730,30802],{"class":155},[96,113732,113733],{"class":106},".action_space ",[96,113735,152],{"class":102},[96,113737,113738],{"class":106}," spaces.Box(",[96,113740,113741],{"class":5200},"low",[96,113743,113744],{"class":102},"=-",[96,113746,102382],{"class":155},[96,113748,12419],{"class":106},[96,113750,113751],{"class":5200},"high",[96,113753,152],{"class":102},[96,113755,102382],{"class":155},[96,113757,12419],{"class":106},[96,113759,95942],{"class":5200},[96,113761,152],{"class":102},[96,113763,107],{"class":106},[96,113765,184],{"class":155},[96,113767,113768],{"class":106},",), ",[96,113770,93479],{"class":5200},[96,113772,152],{"class":102},[96,113774,113775],{"class":106},"np.float32)\n",[14,113777,113778,113779,113782],{},"表示动作是 2 维数组，每个值都在 ",[93,113780,113781],{},"[-1, 1]"," 范围内。",[87,113784,113786],{"className":30357,"code":113785,"language":30359,"meta":18,"style":18},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[93,113787,113788],{"__ignoreMap":18},[96,113789,113790,113792,113795,113797,113799,113801,113803,113806,113808,113810,113812,113814,113816,113818,113820,113822,113824,113826],{"class":98,"line":99},[96,113791,30802],{"class":155},[96,113793,113794],{"class":106},".observation_space ",[96,113796,152],{"class":102},[96,113798,113738],{"class":106},[96,113800,113741],{"class":5200},[96,113802,113744],{"class":102},[96,113804,113805],{"class":106},"np.inf, ",[96,113807,113751],{"class":5200},[96,113809,152],{"class":102},[96,113811,113805],{"class":106},[96,113813,95942],{"class":5200},[96,113815,152],{"class":102},[96,113817,107],{"class":106},[96,113819,553],{"class":155},[96,113821,113768],{"class":106},[96,113823,93479],{"class":5200},[96,113825,152],{"class":102},[96,113827,113775],{"class":106},[14,113829,113830],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[67,113832,113834],{"id":113833},"frame_skip-是什么","frame_skip 是什么",[87,113836,113838],{"className":30357,"code":113837,"language":30359,"meta":18,"style":18},"self.frame_skip = 5\n",[93,113839,113840],{"__ignoreMap":18},[96,113841,113842,113844,113847,113849],{"class":98,"line":99},[96,113843,30802],{"class":155},[96,113845,113846],{"class":106},".frame_skip ",[96,113848,152],{"class":102},[96,113850,54406],{"class":155},[14,113852,113853,113854,113857,113858,113860],{},"表示外部调用一次 ",[93,113855,113856],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[93,113859,101194],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[38,113862,101232],{"id":101231},[87,113864,113866],{"className":30357,"code":113865,"language":30359,"meta":18,"style":18},"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",[93,113867,113868,113880,113886,113896,113907,113911,113915,113923,113928,113932,113936,113940,113944,113948,113952,113956,113961,113965,113969,113973,113978,113982,113986,113990,113994,113998,114002,114006,114010,114014,114018,114022,114026,114030,114048,114063,114067,114080,114090,114105,114122,114126,114147,114166,114191,114205,114209,114219,114231,114241,114245,114287,114325,114329,114339,114355,114370,114389,114396,114400,114413,114428,114443,114456,114475,114491,114495,114536,114551,114566,114570,114609,114620,114633,114637,114647,114656,114660,114670,114685,114703,114707,114718,114735,114748,114752,114762,114766,114777,114788,114792,114806,114820,114836,114840,114853,114870,114885,114892,114896,114900,114912,114922,114940,114952,114964,114968,114976,114992,115001,115010,115018,115060,115073,115078,115082,115100,115104,115108,115120],{"__ignoreMap":18},[96,113869,113870,113872,113875,113877],{"class":98,"line":99},[96,113871,30371],{"class":102},[96,113873,113874],{"class":106}," gymnasium ",[96,113876,31362],{"class":102},[96,113878,113879],{"class":106}," gym\n",[96,113881,113882,113884],{"class":98,"line":19},[96,113883,30371],{"class":102},[96,113885,101280],{"class":106},[96,113887,113888,113890,113892,113894],{"class":98,"line":1162},[96,113889,30371],{"class":102},[96,113891,31359],{"class":106},[96,113893,31362],{"class":102},[96,113895,31365],{"class":106},[96,113897,113898,113900,113902,113904],{"class":98,"line":1177},[96,113899,30716],{"class":102},[96,113901,113874],{"class":106},[96,113903,30371],{"class":102},[96,113905,113906],{"class":106}," spaces\n",[96,113908,113909],{"class":98,"line":1183},[96,113910,2383],{"emptyLinePlaceholder":23},[96,113912,113913],{"class":98,"line":1197},[96,113914,2383],{"emptyLinePlaceholder":23},[96,113916,113917,113919,113921],{"class":98,"line":1203},[96,113918,101293],{"class":155},[96,113920,13548],{"class":102},[96,113922,101298],{"class":211},[96,113924,113925],{"class":98,"line":1294},[96,113926,113927],{"class":211},"\u003Cmujoco model=\"gym_reacher\">\n",[96,113929,113930],{"class":98,"line":1300},[96,113931,111717],{"class":211},[96,113933,113934],{"class":98,"line":1312},[96,113935,2383],{"emptyLinePlaceholder":23},[96,113937,113938],{"class":98,"line":1595},[96,113939,101317],{"class":211},[96,113941,113942],{"class":98,"line":1600},[96,113943,111735],{"class":211},[96,113945,113946],{"class":98,"line":1606},[96,113947,2383],{"emptyLinePlaceholder":23},[96,113949,113950],{"class":98,"line":1611},[96,113951,111744],{"class":211},[96,113953,113954],{"class":98,"line":1625},[96,113955,111749],{"class":211},[96,113957,113958],{"class":98,"line":1630},[96,113959,113960],{"class":211},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[96,113962,113963],{"class":98,"line":1636},[96,113964,2383],{"emptyLinePlaceholder":23},[96,113966,113967],{"class":98,"line":1657},[96,113968,111763],{"class":211},[96,113970,113971],{"class":98,"line":1662},[96,113972,111768],{"class":211},[96,113974,113975],{"class":98,"line":1676},[96,113976,113977],{"class":211},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[96,113979,113980],{"class":98,"line":1681},[96,113981,111778],{"class":211},[96,113983,113984],{"class":98,"line":1710},[96,113985,106417],{"class":211},[96,113987,113988],{"class":98,"line":1715},[96,113989,101346],{"class":211},[96,113991,113992],{"class":98,"line":1732},[96,113993,101351],{"class":211},[96,113995,113996],{"class":98,"line":1737},[96,113997,2383],{"emptyLinePlaceholder":23},[96,113999,114000],{"class":98,"line":1742},[96,114001,106434],{"class":211},[96,114003,114004],{"class":98,"line":1747},[96,114005,111803],{"class":211},[96,114007,114008],{"class":98,"line":1761},[96,114009,111808],{"class":211},[96,114011,114012],{"class":98,"line":1766},[96,114013,106444],{"class":211},[96,114015,114016],{"class":98,"line":2560},[96,114017,101356],{"class":211},[96,114019,114020],{"class":98,"line":2574},[96,114021,95677],{"class":211},[96,114023,114024],{"class":98,"line":2582},[96,114025,2383],{"emptyLinePlaceholder":23},[96,114027,114028],{"class":98,"line":2587},[96,114029,2383],{"emptyLinePlaceholder":23},[96,114031,114032,114034,114037,114039,114041,114043,114046],{"class":98,"line":2593},[96,114033,14678],{"class":102},[96,114035,114036],{"class":1946}," ReacherEnv",[96,114038,107],{"class":106},[96,114040,113519],{"class":1946},[96,114042,665],{"class":106},[96,114044,114045],{"class":1946},"Env",[96,114047,30765],{"class":106},[96,114049,114050,114053,114055,114057,114060],{"class":98,"line":2599},[96,114051,114052],{"class":106},"    metadata ",[96,114054,152],{"class":102},[96,114056,4431],{"class":106},[96,114058,114059],{"class":211},"\"render_modes\"",[96,114061,114062],{"class":106},": []}\n",[96,114064,114065],{"class":98,"line":2604},[96,114066,2383],{"emptyLinePlaceholder":23},[96,114068,114069,114071,114073,114076,114078],{"class":98,"line":7932},[96,114070,30780],{"class":102},[96,114072,30783],{"class":155},[96,114074,114075],{"class":106},"(self) -> ",[96,114077,95665],{"class":155},[96,114079,3722],{"class":106},[96,114081,114082,114084,114086,114088],{"class":98,"line":7956},[96,114083,30796],{"class":155},[96,114085,17245],{"class":106},[96,114087,30808],{"class":155},[96,114089,1959],{"class":106},[96,114091,114092,114094,114097,114099,114101,114103],{"class":98,"line":7961},[96,114093,30824],{"class":155},[96,114095,114096],{"class":106},".model ",[96,114098,152],{"class":102},[96,114100,101391],{"class":106},[96,114102,101293],{"class":155},[96,114104,113],{"class":106},[96,114106,114107,114109,114112,114114,114117,114119],{"class":98,"line":7967},[96,114108,30824],{"class":155},[96,114110,114111],{"class":106},".data ",[96,114113,152],{"class":102},[96,114115,114116],{"class":106}," mujoco.MjData(",[96,114118,30802],{"class":155},[96,114120,114121],{"class":106},".model)\n",[96,114123,114124],{"class":98,"line":7994},[96,114125,2383],{"emptyLinePlaceholder":23},[96,114127,114128,114130,114133,114135,114138,114140,114143,114145],{"class":98,"line":7999},[96,114129,30824],{"class":155},[96,114131,114132],{"class":106},".tip_site_id ",[96,114134,152],{"class":102},[96,114136,114137],{"class":106}," mujoco.mj_name2id(",[96,114139,30802],{"class":155},[96,114141,114142],{"class":106},".model, mujoco.mjtObj.mjOBJ_SITE, ",[96,114144,111515],{"class":211},[96,114146,113],{"class":106},[96,114148,114149,114151,114154,114156,114158,114160,114162,114164],{"class":98,"line":8005},[96,114150,30824],{"class":155},[96,114152,114153],{"class":106},".target_site_id ",[96,114155,152],{"class":102},[96,114157,114137],{"class":106},[96,114159,30802],{"class":155},[96,114161,114142],{"class":106},[96,114163,111938],{"class":211},[96,114165,113],{"class":106},[96,114167,114168,114170,114172,114174,114176,114178,114181,114183,114185,114187,114189],{"class":98,"line":8017},[96,114169,2480],{"class":102},[96,114171,38852],{"class":155},[96,114173,114132],{"class":106},[96,114175,1017],{"class":102},[96,114177,4076],{"class":155},[96,114179,114180],{"class":102}," or",[96,114182,38852],{"class":155},[96,114184,114153],{"class":106},[96,114186,1017],{"class":102},[96,114188,4076],{"class":155},[96,114190,3722],{"class":106},[96,114192,114193,114196,114198,114200,114203],{"class":98,"line":8029},[96,114194,114195],{"class":102},"            raise",[96,114197,103414],{"class":155},[96,114199,107],{"class":106},[96,114201,114202],{"class":211},"\"required sites not found\"",[96,114204,113],{"class":106},[96,114206,114207],{"class":98,"line":8041},[96,114208,2383],{"emptyLinePlaceholder":23},[96,114210,114211,114213,114215,114217],{"class":98,"line":9700},[96,114212,30824],{"class":155},[96,114214,113846],{"class":106},[96,114216,152],{"class":102},[96,114218,54406],{"class":155},[96,114220,114221,114223,114226,114228],{"class":98,"line":9725},[96,114222,30824],{"class":155},[96,114224,114225],{"class":106},".max_steps ",[96,114227,152],{"class":102},[96,114229,114230],{"class":155}," 200\n",[96,114232,114233,114235,114237,114239],{"class":98,"line":9748},[96,114234,30824],{"class":155},[96,114236,113685],{"class":106},[96,114238,152],{"class":102},[96,114240,47312],{"class":155},[96,114242,114243],{"class":98,"line":9772},[96,114244,2383],{"emptyLinePlaceholder":23},[96,114246,114247,114249,114251,114253,114255,114257,114259,114261,114263,114265,114267,114269,114271,114273,114275,114277,114279,114281,114283,114285],{"class":98,"line":9777},[96,114248,30824],{"class":155},[96,114250,113733],{"class":106},[96,114252,152],{"class":102},[96,114254,113738],{"class":106},[96,114256,113741],{"class":5200},[96,114258,113744],{"class":102},[96,114260,102382],{"class":155},[96,114262,12419],{"class":106},[96,114264,113751],{"class":5200},[96,114266,152],{"class":102},[96,114268,102382],{"class":155},[96,114270,12419],{"class":106},[96,114272,95942],{"class":5200},[96,114274,152],{"class":102},[96,114276,107],{"class":106},[96,114278,184],{"class":155},[96,114280,113768],{"class":106},[96,114282,93479],{"class":5200},[96,114284,152],{"class":102},[96,114286,113775],{"class":106},[96,114288,114289,114291,114293,114295,114297,114299,114301,114303,114305,114307,114309,114311,114313,114315,114317,114319,114321,114323],{"class":98,"line":9782},[96,114290,30824],{"class":155},[96,114292,113794],{"class":106},[96,114294,152],{"class":102},[96,114296,113738],{"class":106},[96,114298,113741],{"class":5200},[96,114300,113744],{"class":102},[96,114302,113805],{"class":106},[96,114304,113751],{"class":5200},[96,114306,152],{"class":102},[96,114308,113805],{"class":106},[96,114310,95942],{"class":5200},[96,114312,152],{"class":102},[96,114314,107],{"class":106},[96,114316,553],{"class":155},[96,114318,113768],{"class":106},[96,114320,93479],{"class":5200},[96,114322,152],{"class":102},[96,114324,113775],{"class":106},[96,114326,114327],{"class":98,"line":9787},[96,114328,2383],{"emptyLinePlaceholder":23},[96,114330,114331,114333,114336],{"class":98,"line":9796},[96,114332,30780],{"class":102},[96,114334,114335],{"class":1946}," _get_obs",[96,114337,114338],{"class":106},"(self) -> np.ndarray:\n",[96,114340,114341,114343,114345,114347,114350,114352],{"class":98,"line":9801},[96,114342,112116],{"class":106},[96,114344,152],{"class":102},[96,114346,38852],{"class":155},[96,114348,114349],{"class":106},".data.site_xpos[",[96,114351,30802],{"class":155},[96,114353,114354],{"class":106},".tip_site_id].copy()\n",[96,114356,114357,114359,114361,114363,114365,114367],{"class":98,"line":9807},[96,114358,112129],{"class":106},[96,114360,152],{"class":102},[96,114362,38852],{"class":155},[96,114364,114349],{"class":106},[96,114366,30802],{"class":155},[96,114368,114369],{"class":106},".target_site_id].copy()\n",[96,114371,114372,114374,114376,114379,114381,114384,114386],{"class":98,"line":9828},[96,114373,110161],{"class":106},[96,114375,152],{"class":102},[96,114377,114378],{"class":106}," np.concatenate([",[96,114380,30802],{"class":155},[96,114382,114383],{"class":106},".data.qpos.copy(), ",[96,114385,30802],{"class":155},[96,114387,114388],{"class":106},".data.qvel.copy(), tip, target])\n",[96,114390,114391,114393],{"class":98,"line":9834},[96,114392,14736],{"class":102},[96,114394,114395],{"class":106}," obs.astype(np.float32)\n",[96,114397,114398],{"class":98,"line":9848},[96,114399,2383],{"emptyLinePlaceholder":23},[96,114401,114402,114404,114407,114409,114411],{"class":98,"line":9854},[96,114403,30780],{"class":102},[96,114405,114406],{"class":1946}," _get_reward",[96,114408,114075],{"class":106},[96,114410,146],{"class":155},[96,114412,3722],{"class":106},[96,114414,114415,114417,114419,114421,114423,114425],{"class":98,"line":9881},[96,114416,112116],{"class":106},[96,114418,152],{"class":102},[96,114420,38852],{"class":155},[96,114422,114349],{"class":106},[96,114424,30802],{"class":155},[96,114426,114427],{"class":106},".tip_site_id]\n",[96,114429,114430,114432,114434,114436,114438,114440],{"class":98,"line":9890},[96,114431,112129],{"class":106},[96,114433,152],{"class":102},[96,114435,38852],{"class":155},[96,114437,114349],{"class":106},[96,114439,30802],{"class":155},[96,114441,114442],{"class":106},".target_site_id]\n",[96,114444,114445,114448,114450,114452,114454],{"class":98,"line":9896},[96,114446,114447],{"class":106},"        dist ",[96,114449,152],{"class":102},[96,114451,111580],{"class":106},[96,114453,639],{"class":102},[96,114455,111585],{"class":106},[96,114457,114458,114461,114463,114465,114467,114470,114472],{"class":98,"line":9904},[96,114459,114460],{"class":106},"        control_cost ",[96,114462,152],{"class":102},[96,114464,112016],{"class":155},[96,114466,6502],{"class":102},[96,114468,114469],{"class":106}," np.sum(np.square(",[96,114471,30802],{"class":155},[96,114473,114474],{"class":106},".data.ctrl))\n",[96,114476,114477,114479,114481,114483,114485,114487,114489],{"class":98,"line":9909},[96,114478,14736],{"class":102},[96,114480,109776],{"class":155},[96,114482,107],{"class":106},[96,114484,639],{"class":102},[96,114486,111575],{"class":106},[96,114488,639],{"class":102},[96,114490,112038],{"class":106},[96,114492,114493],{"class":98,"line":16588},[96,114494,2383],{"emptyLinePlaceholder":23},[96,114496,114497,114499,114502,114505,114507,114510,114512,114514,114516,114518,114520,114523,114526,114528,114530,114532,114534],{"class":98,"line":16594},[96,114498,30780],{"class":102},[96,114500,114501],{"class":1946}," reset",[96,114503,114504],{"class":106},"(self, ",[96,114506,562],{"class":102},[96,114508,114509],{"class":106},", seed: ",[96,114511,110],{"class":155},[96,114513,25088],{"class":102},[96,114515,38912],{"class":155},[96,114517,13548],{"class":102},[96,114519,38912],{"class":155},[96,114521,114522],{"class":106},", options: ",[96,114524,114525],{"class":155},"dict",[96,114527,25088],{"class":102},[96,114529,38912],{"class":155},[96,114531,13548],{"class":102},[96,114533,38912],{"class":155},[96,114535,30765],{"class":106},[96,114537,114538,114540,114543,114546,114548],{"class":98,"line":16617},[96,114539,30796],{"class":155},[96,114541,114542],{"class":106},"().reset(",[96,114544,114545],{"class":5200},"seed",[96,114547,152],{"class":102},[96,114549,114550],{"class":106},"seed)\n",[96,114552,114553,114556,114558,114561,114563],{"class":98,"line":16623},[96,114554,114555],{"class":106},"        mujoco.mj_resetData(",[96,114557,30802],{"class":155},[96,114559,114560],{"class":106},".model, ",[96,114562,30802],{"class":155},[96,114564,114565],{"class":106},".data)\n",[96,114567,114568],{"class":98,"line":16646},[96,114569,2383],{"emptyLinePlaceholder":23},[96,114571,114572,114574,114577,114579,114581,114584,114586,114588,114590,114592,114594,114596,114598,114600,114602,114604,114606],{"class":98,"line":16660},[96,114573,30824],{"class":155},[96,114575,114576],{"class":106},".data.qpos[:] ",[96,114578,152],{"class":102},[96,114580,38852],{"class":155},[96,114582,114583],{"class":106},".np_random.uniform(",[96,114585,113741],{"class":5200},[96,114587,113744],{"class":102},[96,114589,86189],{"class":155},[96,114591,12419],{"class":106},[96,114593,113751],{"class":5200},[96,114595,152],{"class":102},[96,114597,86189],{"class":155},[96,114599,12419],{"class":106},[96,114601,31475],{"class":5200},[96,114603,152],{"class":102},[96,114605,30802],{"class":155},[96,114607,114608],{"class":106},".model.nq)\n",[96,114610,114611,114613,114616,114618],{"class":98,"line":16680},[96,114612,30824],{"class":155},[96,114614,114615],{"class":106},".data.qvel[:] ",[96,114617,152],{"class":102},[96,114619,104740],{"class":155},[96,114621,114622,114625,114627,114629,114631],{"class":98,"line":16686},[96,114623,114624],{"class":106},"        mujoco.mj_forward(",[96,114626,30802],{"class":155},[96,114628,114560],{"class":106},[96,114630,30802],{"class":155},[96,114632,114565],{"class":106},[96,114634,114635],{"class":98,"line":16697},[96,114636,2383],{"emptyLinePlaceholder":23},[96,114638,114639,114641,114643,114645],{"class":98,"line":16720},[96,114640,30824],{"class":155},[96,114642,113685],{"class":106},[96,114644,152],{"class":102},[96,114646,47312],{"class":155},[96,114648,114649,114651,114653],{"class":98,"line":16742},[96,114650,14736],{"class":102},[96,114652,38852],{"class":155},[96,114654,114655],{"class":106},"._get_obs(), {}\n",[96,114657,114658],{"class":98,"line":16747},[96,114659,2383],{"emptyLinePlaceholder":23},[96,114661,114662,114664,114667],{"class":98,"line":16753},[96,114663,30780],{"class":102},[96,114665,114666],{"class":1946}," step",[96,114668,114669],{"class":106},"(self, action):\n",[96,114671,114672,114674,114676,114679,114681,114683],{"class":98,"line":16767},[96,114673,110201],{"class":106},[96,114675,152],{"class":102},[96,114677,114678],{"class":106}," np.asarray(action, ",[96,114680,93479],{"class":5200},[96,114682,152],{"class":102},[96,114684,113775],{"class":106},[96,114686,114687,114689,114691,114693,114695,114698,114700],{"class":98,"line":16780},[96,114688,110201],{"class":106},[96,114690,152],{"class":102},[96,114692,107426],{"class":106},[96,114694,30802],{"class":155},[96,114696,114697],{"class":106},".action_space.low, ",[96,114699,30802],{"class":155},[96,114701,114702],{"class":106},".action_space.high)\n",[96,114704,114705],{"class":98,"line":16785},[96,114706,2383],{"emptyLinePlaceholder":23},[96,114708,114709,114711,114714,114716],{"class":98,"line":16799},[96,114710,30824],{"class":155},[96,114712,114713],{"class":106},".data.ctrl[:] ",[96,114715,152],{"class":102},[96,114717,107449],{"class":106},[96,114719,114720,114722,114724,114726,114728,114730,114732],{"class":98,"line":16804},[96,114721,3386],{"class":102},[96,114723,101480],{"class":106},[96,114725,26022],{"class":102},[96,114727,32422],{"class":155},[96,114729,107],{"class":106},[96,114731,30802],{"class":155},[96,114733,114734],{"class":106},".frame_skip):\n",[96,114736,114737,114740,114742,114744,114746],{"class":98,"line":16810},[96,114738,114739],{"class":106},"            mujoco.mj_step(",[96,114741,30802],{"class":155},[96,114743,114560],{"class":106},[96,114745,30802],{"class":155},[96,114747,114565],{"class":106},[96,114749,114750],{"class":98,"line":16815},[96,114751,2383],{"emptyLinePlaceholder":23},[96,114753,114754,114756,114758,114760],{"class":98,"line":16829},[96,114755,30824],{"class":155},[96,114757,113685],{"class":106},[96,114759,9461],{"class":102},[96,114761,55678],{"class":155},[96,114763,114764],{"class":98,"line":16834},[96,114765,2383],{"emptyLinePlaceholder":23},[96,114767,114768,114770,114772,114774],{"class":98,"line":16839},[96,114769,110161],{"class":106},[96,114771,152],{"class":102},[96,114773,38852],{"class":155},[96,114775,114776],{"class":106},"._get_obs()\n",[96,114778,114779,114781,114783,114785],{"class":98,"line":16853},[96,114780,110266],{"class":106},[96,114782,152],{"class":102},[96,114784,38852],{"class":155},[96,114786,114787],{"class":106},"._get_reward()\n",[96,114789,114790],{"class":98,"line":16865},[96,114791,2383],{"emptyLinePlaceholder":23},[96,114793,114794,114796,114798,114800,114802,114804],{"class":98,"line":16870},[96,114795,112116],{"class":106},[96,114797,152],{"class":102},[96,114799,38852],{"class":155},[96,114801,114349],{"class":106},[96,114803,30802],{"class":155},[96,114805,114427],{"class":106},[96,114807,114808,114810,114812,114814,114816,114818],{"class":98,"line":16883},[96,114809,112129],{"class":106},[96,114811,152],{"class":102},[96,114813,38852],{"class":155},[96,114815,114349],{"class":106},[96,114817,30802],{"class":155},[96,114819,114442],{"class":106},[96,114821,114822,114824,114826,114828,114831,114833],{"class":98,"line":16888},[96,114823,114447],{"class":106},[96,114825,152],{"class":102},[96,114827,109776],{"class":155},[96,114829,114830],{"class":106},"(np.linalg.norm(tip ",[96,114832,639],{"class":102},[96,114834,114835],{"class":106}," target))\n",[96,114837,114838],{"class":98,"line":16893},[96,114839,2383],{"emptyLinePlaceholder":23},[96,114841,114842,114845,114847,114849,114851],{"class":98,"line":16898},[96,114843,114844],{"class":106},"        terminated ",[96,114846,152],{"class":102},[96,114848,113668],{"class":106},[96,114850,1017],{"class":102},[96,114852,113673],{"class":155},[96,114854,114855,114858,114860,114862,114864,114866,114868],{"class":98,"line":16911},[96,114856,114857],{"class":106},"        truncated ",[96,114859,152],{"class":102},[96,114861,38852],{"class":155},[96,114863,113685],{"class":106},[96,114865,1693],{"class":102},[96,114867,38852],{"class":155},[96,114869,113692],{"class":106},[96,114871,114872,114875,114877,114879,114882],{"class":98,"line":16916},[96,114873,114874],{"class":106},"        info ",[96,114876,152],{"class":102},[96,114878,4431],{"class":106},[96,114880,114881],{"class":211},"\"distance\"",[96,114883,114884],{"class":106},": dist}\n",[96,114886,114887,114889],{"class":98,"line":32612},[96,114888,14736],{"class":102},[96,114890,114891],{"class":106}," obs, reward, terminated, truncated, info\n",[96,114893,114894],{"class":98,"line":32618},[96,114895,2383],{"emptyLinePlaceholder":23},[96,114897,114898],{"class":98,"line":32624},[96,114899,2383],{"emptyLinePlaceholder":23},[96,114901,114902,114904,114906,114908,114910],{"class":98,"line":32630},[96,114903,31926],{"class":102},[96,114905,1956],{"class":1946},[96,114907,101377],{"class":106},[96,114909,95665],{"class":155},[96,114911,3722],{"class":106},[96,114913,114914,114917,114919],{"class":98,"line":32636},[96,114915,114916],{"class":106},"    env ",[96,114918,152],{"class":102},[96,114920,114921],{"class":106}," ReacherEnv()\n",[96,114923,114924,114927,114929,114932,114934,114936,114938],{"class":98,"line":32647},[96,114925,114926],{"class":106},"    obs, info ",[96,114928,152],{"class":102},[96,114930,114931],{"class":106}," env.reset(",[96,114933,114545],{"class":5200},[96,114935,152],{"class":102},[96,114937,298],{"class":155},[96,114939,113],{"class":106},[96,114941,114942,114944,114946,114949],{"class":98,"line":32653},[96,114943,31278],{"class":155},[96,114945,107],{"class":106},[96,114947,114948],{"class":211},"\"initial obs shape:\"",[96,114950,114951],{"class":106},", obs.shape)\n",[96,114953,114954,114956,114958,114961],{"class":98,"line":32673},[96,114955,31278],{"class":155},[96,114957,107],{"class":106},[96,114959,114960],{"class":211},"\"initial info:\"",[96,114962,114963],{"class":106},", info)\n",[96,114965,114966],{"class":98,"line":32679},[96,114967,2383],{"emptyLinePlaceholder":23},[96,114969,114970,114972,114974],{"class":98,"line":32690},[96,114971,110132],{"class":106},[96,114973,152],{"class":102},[96,114975,104740],{"class":155},[96,114977,114978,114980,114982,114984,114986,114988,114990],{"class":98,"line":32696},[96,114979,3184],{"class":102},[96,114981,31595],{"class":106},[96,114983,26022],{"class":102},[96,114985,32422],{"class":155},[96,114987,107],{"class":106},[96,114989,807],{"class":155},[96,114991,30765],{"class":106},[96,114993,114994,114996,114998],{"class":98,"line":32702},[96,114995,110201],{"class":106},[96,114997,152],{"class":102},[96,114999,115000],{"class":106}," env.action_space.sample()\n",[96,115002,115003,115006,115008],{"class":98,"line":32708},[96,115004,115005],{"class":106},"        obs, reward, terminated, truncated, info ",[96,115007,152],{"class":102},[96,115009,113394],{"class":106},[96,115011,115012,115014,115016],{"class":98,"line":32714},[96,115013,110276],{"class":106},[96,115015,9461],{"class":102},[96,115017,110281],{"class":106},[96,115019,115020,115022,115024,115026,115028,115031,115033,115035,115038,115040,115042,115045,115047,115049,115052,115054,115056,115058],{"class":98,"line":32720},[96,115021,32430],{"class":155},[96,115023,107],{"class":106},[96,115025,110310],{"class":211},[96,115027,110313],{"class":106},[96,115029,115030],{"class":211},"\"reward:\"",[96,115032,12419],{"class":106},[96,115034,31997],{"class":155},[96,115036,115037],{"class":106},"(reward, ",[96,115039,178],{"class":155},[96,115041,110324],{"class":106},[96,115043,115044],{"class":211},"\"distance:\"",[96,115046,12419],{"class":106},[96,115048,31997],{"class":155},[96,115050,115051],{"class":106},"(info[",[96,115053,114881],{"class":211},[96,115055,112181],{"class":106},[96,115057,178],{"class":155},[96,115059,30476],{"class":106},[96,115061,115062,115064,115067,115070],{"class":98,"line":32726},[96,115063,2480],{"class":102},[96,115065,115066],{"class":106}," terminated ",[96,115068,115069],{"class":102},"or",[96,115071,115072],{"class":106}," truncated:\n",[96,115074,115075],{"class":98,"line":32732},[96,115076,115077],{"class":102},"            break\n",[96,115079,115080],{"class":98,"line":32752},[96,115081,2383],{"emptyLinePlaceholder":23},[96,115083,115084,115086,115088,115090,115092,115094,115096,115098],{"class":98,"line":32758},[96,115085,31278],{"class":155},[96,115087,107],{"class":106},[96,115089,110355],{"class":211},[96,115091,12419],{"class":106},[96,115093,31997],{"class":155},[96,115095,110362],{"class":106},[96,115097,178],{"class":155},[96,115099,30476],{"class":106},[96,115101,115102],{"class":98,"line":32774},[96,115103,2383],{"emptyLinePlaceholder":23},[96,115105,115106],{"class":98,"line":32780},[96,115107,2383],{"emptyLinePlaceholder":23},[96,115109,115110,115112,115114,115116,115118],{"class":98,"line":32794},[96,115111,1514],{"class":102},[96,115113,31199],{"class":155},[96,115115,101538],{"class":102},[96,115117,101541],{"class":211},[96,115119,3722],{"class":106},[96,115121,115122],{"class":98,"line":32800},[96,115123,101548],{"class":106},[14,115125,103549],{},[87,115127,115129],{"className":23807,"code":115128,"language":23809,"meta":18,"style":18},"touch ch8_gym_env.py\n",[93,115130,115131],{"__ignoreMap":18},[96,115132,115133,115135],{"class":98,"line":99},[96,115134,101262],{"class":1946},[96,115136,115137],{"class":211}," ch8_gym_env.py\n",[14,115139,110423],{},[87,115141,115143],{"className":23807,"code":115142,"language":23809,"meta":18,"style":18},"python ch8_gym_env.py\n",[93,115144,115145],{"__ignoreMap":18},[96,115146,115147,115149],{"class":98,"line":99},[96,115148,30359],{"class":1946},[96,115150,115137],{"class":211},[67,115152,101551],{"id":101551},[14,115154,115155],{},"继承 Gymnasium 环境：",[87,115157,115159],{"className":30357,"code":115158,"language":30359,"meta":18,"style":18},"class ReacherEnv(gym.Env):\n",[93,115160,115161],{"__ignoreMap":18},[96,115162,115163,115165,115167,115169,115171,115173,115175],{"class":98,"line":99},[96,115164,14678],{"class":102},[96,115166,114036],{"class":1946},[96,115168,107],{"class":106},[96,115170,113519],{"class":1946},[96,115172,665],{"class":106},[96,115174,114045],{"class":1946},[96,115176,30765],{"class":106},[14,115178,115179],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[14,115181,115182],{},"初始化模型：",[87,115184,115186],{"className":30357,"code":115185,"language":30359,"meta":18,"style":18},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[93,115187,115188,115202],{"__ignoreMap":18},[96,115189,115190,115192,115194,115196,115198,115200],{"class":98,"line":99},[96,115191,30802],{"class":155},[96,115193,114096],{"class":106},[96,115195,152],{"class":102},[96,115197,101391],{"class":106},[96,115199,101293],{"class":155},[96,115201,113],{"class":106},[96,115203,115204,115206,115208,115210,115212,115214],{"class":98,"line":19},[96,115205,30802],{"class":155},[96,115207,114111],{"class":106},[96,115209,152],{"class":102},[96,115211,114116],{"class":106},[96,115213,30802],{"class":155},[96,115215,114121],{"class":106},[14,115217,115218,115219,115221],{},"这和前面章节一样，只是现在放到了类的 ",[93,115220,30808],{}," 里。",[14,115223,115224],{},"缓存 site ID：",[87,115226,115228],{"className":30357,"code":115227,"language":30359,"meta":18,"style":18},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[93,115229,115230,115244],{"__ignoreMap":18},[96,115231,115232,115234,115236,115238,115240,115242],{"class":98,"line":99},[96,115233,30802],{"class":155},[96,115235,114132],{"class":106},[96,115237,152],{"class":102},[96,115239,114137],{"class":106},[96,115241,89533],{"class":155},[96,115243,113],{"class":106},[96,115245,115246,115248,115250,115252,115254,115256],{"class":98,"line":19},[96,115247,30802],{"class":155},[96,115249,114153],{"class":106},[96,115251,152],{"class":102},[96,115253,114137],{"class":106},[96,115255,89533],{"class":155},[96,115257,113],{"class":106},[14,115259,115260],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[14,115262,115263],{},"reset：",[87,115265,115267],{"className":30357,"code":115266,"language":30359,"meta":18,"style":18},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[93,115268,115269],{"__ignoreMap":18},[96,115270,115271,115273,115275,115277,115279,115281,115283,115285,115287,115289,115291,115293,115295,115297,115299,115301,115303],{"class":98,"line":99},[96,115272,31926],{"class":102},[96,115274,114501],{"class":1946},[96,115276,114504],{"class":106},[96,115278,562],{"class":102},[96,115280,114509],{"class":106},[96,115282,110],{"class":155},[96,115284,25088],{"class":102},[96,115286,38912],{"class":155},[96,115288,13548],{"class":102},[96,115290,38912],{"class":155},[96,115292,114522],{"class":106},[96,115294,114525],{"class":155},[96,115296,25088],{"class":102},[96,115298,38912],{"class":155},[96,115300,13548],{"class":102},[96,115302,38912],{"class":155},[96,115304,30765],{"class":106},[14,115306,115307,115309],{},[93,115308,70035],{}," 做四件事：",[50,115311,115312,115315,115318,115321],{},[53,115313,115314],{},"设置随机种子。",[53,115316,115317],{},"重置 MuJoCo data。",[53,115319,115320],{},"随机初始化关节角。",[53,115322,115323],{},"返回初始观测和 info。",[14,115325,115326],{},"step：",[87,115328,115330],{"className":30357,"code":115329,"language":30359,"meta":18,"style":18},"def step(self, action):\n",[93,115331,115332],{"__ignoreMap":18},[96,115333,115334,115336,115338],{"class":98,"line":99},[96,115335,31926],{"class":102},[96,115337,114666],{"class":1946},[96,115339,114669],{"class":106},[14,115341,115342,115344],{},[93,115343,107113],{}," 做六件事：",[50,115346,115347,115350,115356,115359,115362,115365],{},[53,115348,115349],{},"检查并裁剪 action。",[53,115351,115352,115353,28364],{},"写入 ",[93,115354,115355],{},"self.data.ctrl",[53,115357,115358],{},"连续推进若干个 MuJoCo 物理步。",[53,115360,115361],{},"计算新观测。",[53,115363,115364],{},"计算奖励和结束条件。",[53,115366,115367],{},"返回 Gymnasium 标准五元组。",[67,115369,101687],{"id":101687},[87,115371,115373],{"className":30357,"code":115372,"language":30359,"meta":18,"style":18},"import gymnasium as gym\n",[93,115374,115375],{"__ignoreMap":18},[96,115376,115377,115379,115381,115383],{"class":98,"line":99},[96,115378,30371],{"class":102},[96,115380,113874],{"class":106},[96,115382,31362],{"class":102},[96,115384,113879],{"class":106},[14,115386,115387,115388,115390,115391,115394],{},"导入 Gymnasium，并起别名 ",[93,115389,113519],{},"。后面写 ",[93,115392,115393],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[87,115396,115398],{"className":30357,"code":115397,"language":30359,"meta":18,"style":18},"from gymnasium import spaces\n",[93,115399,115400],{"__ignoreMap":18},[96,115401,115402,115404,115406,115408],{"class":98,"line":99},[96,115403,30716],{"class":102},[96,115405,113874],{"class":106},[96,115407,30371],{"class":102},[96,115409,113906],{"class":106},[14,115411,115412,115413,115416],{},"导入空间定义工具。",[93,115414,115415],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[87,115418,115419],{"className":30357,"code":115158,"language":30359,"meta":18,"style":18},[93,115420,115421],{"__ignoreMap":18},[96,115422,115423,115425,115427,115429,115431,115433,115435],{"class":98,"line":99},[96,115424,14678],{"class":102},[96,115426,114036],{"class":1946},[96,115428,107],{"class":106},[96,115430,113519],{"class":1946},[96,115432,665],{"class":106},[96,115434,114045],{"class":1946},[96,115436,30765],{"class":106},[14,115438,115439,115440,115443,115444,115446,115447,100997,115449,115451],{},"定义一个类，名字叫 ",[93,115441,115442],{},"ReacherEnv","。括号里的 ",[93,115445,115393],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[93,115448,70035],{},[93,115450,107113],{}," 这两个核心方法。",[87,115453,115455],{"className":30357,"code":115454,"language":30359,"meta":18,"style":18},"metadata = {\"render_modes\": []}\n",[93,115456,115457],{"__ignoreMap":18},[96,115458,115459,115462,115464,115466,115468],{"class":98,"line":99},[96,115460,115461],{"class":106},"metadata ",[96,115463,152],{"class":102},[96,115465,4431],{"class":106},[96,115467,114059],{"class":211},[96,115469,114062],{"class":106},[14,115471,115472],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[87,115474,115476],{"className":30357,"code":115475,"language":30359,"meta":18,"style":18},"def __init__(self) -> None:\n",[93,115477,115478],{"__ignoreMap":18},[96,115479,115480,115482,115484,115486,115488],{"class":98,"line":99},[96,115481,31926],{"class":102},[96,115483,30783],{"class":155},[96,115485,114075],{"class":106},[96,115487,95665],{"class":155},[96,115489,3722],{"class":106},[14,115491,115492,115494,115495,28364],{},[93,115493,30808],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[93,115496,115497],{},"env = ReacherEnv()",[87,115499,115501],{"className":30357,"code":115500,"language":30359,"meta":18,"style":18},"super().__init__()\n",[93,115502,115503],{"__ignoreMap":18},[96,115504,115505,115508,115510,115512],{"class":98,"line":99},[96,115506,115507],{"class":155},"super",[96,115509,17245],{"class":106},[96,115511,30808],{"class":155},[96,115513,1959],{"class":106},[14,115515,115516,115517,115519],{},"调用父类 ",[93,115518,115393],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[87,115521,115522],{"className":30357,"code":115185,"language":30359,"meta":18,"style":18},[93,115523,115524,115538],{"__ignoreMap":18},[96,115525,115526,115528,115530,115532,115534,115536],{"class":98,"line":99},[96,115527,30802],{"class":155},[96,115529,114096],{"class":106},[96,115531,152],{"class":102},[96,115533,101391],{"class":106},[96,115535,101293],{"class":155},[96,115537,113],{"class":106},[96,115539,115540,115542,115544,115546,115548,115550],{"class":98,"line":19},[96,115541,30802],{"class":155},[96,115543,114111],{"class":106},[96,115545,152],{"class":102},[96,115547,114116],{"class":106},[96,115549,30802],{"class":155},[96,115551,114121],{"class":106},[14,115553,115554,115555,115557,115558,100997,115561,115564],{},"把 MuJoCo 模型和状态保存到 ",[93,115556,30802],{}," 上。",[93,115559,115560],{},"self.model",[93,115562,115563],{},"self.data"," 表示这个环境对象自己的模型和状态。",[87,115566,115567],{"className":30357,"code":115227,"language":30359,"meta":18,"style":18},[93,115568,115569,115583],{"__ignoreMap":18},[96,115570,115571,115573,115575,115577,115579,115581],{"class":98,"line":99},[96,115572,30802],{"class":155},[96,115574,114132],{"class":106},[96,115576,152],{"class":102},[96,115578,114137],{"class":106},[96,115580,89533],{"class":155},[96,115582,113],{"class":106},[96,115584,115585,115587,115589,115591,115593,115595],{"class":98,"line":19},[96,115586,30802],{"class":155},[96,115588,114153],{"class":106},[96,115590,152],{"class":102},[96,115592,114137],{"class":106},[96,115594,89533],{"class":155},[96,115596,113],{"class":106},[14,115598,115599,115600,100997,115603,115606],{},"提前查好 tip 和 target 的 site ID。这样 ",[93,115601,115602],{},"_get_obs",[93,115604,115605],{},"_get_reward"," 里就不用每次按名字查找。",[87,115608,115610],{"className":30357,"code":115609,"language":30359,"meta":18,"style":18},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[93,115611,115612,115622,115632],{"__ignoreMap":18},[96,115613,115614,115616,115618,115620],{"class":98,"line":99},[96,115615,30802],{"class":155},[96,115617,113846],{"class":106},[96,115619,152],{"class":102},[96,115621,54406],{"class":155},[96,115623,115624,115626,115628,115630],{"class":98,"line":19},[96,115625,30802],{"class":155},[96,115627,114225],{"class":106},[96,115629,152],{"class":102},[96,115631,114230],{"class":155},[96,115633,115634,115636,115638,115640],{"class":98,"line":1162},[96,115635,30802],{"class":155},[96,115637,113685],{"class":106},[96,115639,152],{"class":102},[96,115641,47312],{"class":155},[14,115643,115644,115647,115648,115651,115652,115655],{},[93,115645,115646],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[93,115649,115650],{},"max_steps"," 是一个 episode 最多运行多少步。",[93,115653,115654],{},"steps"," 记录当前 episode 已经走了多少步。",[87,115657,115658],{"className":30357,"code":113724,"language":30359,"meta":18,"style":18},[93,115659,115660],{"__ignoreMap":18},[96,115661,115662,115664,115666,115668,115670,115672,115674,115676,115678,115680,115682,115684,115686,115688,115690,115692,115694,115696,115698,115700],{"class":98,"line":99},[96,115663,30802],{"class":155},[96,115665,113733],{"class":106},[96,115667,152],{"class":102},[96,115669,113738],{"class":106},[96,115671,113741],{"class":5200},[96,115673,113744],{"class":102},[96,115675,102382],{"class":155},[96,115677,12419],{"class":106},[96,115679,113751],{"class":5200},[96,115681,152],{"class":102},[96,115683,102382],{"class":155},[96,115685,12419],{"class":106},[96,115687,95942],{"class":5200},[96,115689,152],{"class":102},[96,115691,107],{"class":106},[96,115693,184],{"class":155},[96,115695,113768],{"class":106},[96,115697,93479],{"class":5200},[96,115699,152],{"class":102},[96,115701,113775],{"class":106},[14,115703,115704,115705,115708,115709,100997,115712,115715],{},"定义动作空间。",[93,115706,115707],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[93,115710,115711],{},"low=-1.0",[93,115713,115714],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[87,115717,115718],{"className":30357,"code":113785,"language":30359,"meta":18,"style":18},[93,115719,115720],{"__ignoreMap":18},[96,115721,115722,115724,115726,115728,115730,115732,115734,115736,115738,115740,115742,115744,115746,115748,115750,115752,115754,115756],{"class":98,"line":99},[96,115723,30802],{"class":155},[96,115725,113794],{"class":106},[96,115727,152],{"class":102},[96,115729,113738],{"class":106},[96,115731,113741],{"class":5200},[96,115733,113744],{"class":102},[96,115735,113805],{"class":106},[96,115737,113751],{"class":5200},[96,115739,152],{"class":102},[96,115741,113805],{"class":106},[96,115743,95942],{"class":5200},[96,115745,152],{"class":102},[96,115747,107],{"class":106},[96,115749,553],{"class":155},[96,115751,113768],{"class":106},[96,115753,93479],{"class":5200},[96,115755,152],{"class":102},[96,115757,113775],{"class":106},[14,115759,115760,115761,115764,115765,115768],{},"定义观测空间。",[93,115762,115763],{},"shape=(10,)"," 表示观测是 10 个数。",[93,115766,115767],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[87,115770,115772],{"className":30357,"code":115771,"language":30359,"meta":18,"style":18},"def _get_obs(self) -> np.ndarray:\n",[93,115773,115774],{"__ignoreMap":18},[96,115775,115776,115778,115780],{"class":98,"line":99},[96,115777,31926],{"class":102},[96,115779,114335],{"class":1946},[96,115781,114338],{"class":106},[14,115783,115784,115785,115787],{},"定义内部函数，用来生成观测。函数名前面的 ",[93,115786,1099],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[87,115789,115791],{"className":30357,"code":115790,"language":30359,"meta":18,"style":18},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[93,115792,115793,115807],{"__ignoreMap":18},[96,115794,115795,115797,115799,115801,115803,115805],{"class":98,"line":99},[96,115796,111547],{"class":106},[96,115798,152],{"class":102},[96,115800,38852],{"class":155},[96,115802,114349],{"class":106},[96,115804,30802],{"class":155},[96,115806,114354],{"class":106},[96,115808,115809,115811,115813,115815,115817,115819],{"class":98,"line":19},[96,115810,111557],{"class":106},[96,115812,152],{"class":102},[96,115814,38852],{"class":155},[96,115816,114349],{"class":106},[96,115818,30802],{"class":155},[96,115820,114369],{"class":106},[14,115822,115823],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[87,115825,115827],{"className":30357,"code":115826,"language":30359,"meta":18,"style":18},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[93,115828,115829,115845],{"__ignoreMap":18},[96,115830,115831,115833,115835,115837,115839,115841,115843],{"class":98,"line":99},[96,115832,110833],{"class":106},[96,115834,152],{"class":102},[96,115836,114378],{"class":106},[96,115838,30802],{"class":155},[96,115840,114383],{"class":106},[96,115842,30802],{"class":155},[96,115844,114388],{"class":106},[96,115846,115847,115849],{"class":98,"line":19},[96,115848,17030],{"class":102},[96,115850,114395],{"class":106},[14,115852,115853,115854,115857,115858,115860],{},"拼接观测，并转换成 ",[93,115855,115856],{},"float32","。很多强化学习库默认使用 ",[93,115859,115856],{},"，所以这里主动转换。",[87,115862,115863],{"className":30357,"code":115266,"language":30359,"meta":18,"style":18},[93,115864,115865],{"__ignoreMap":18},[96,115866,115867,115869,115871,115873,115875,115877,115879,115881,115883,115885,115887,115889,115891,115893,115895,115897,115899],{"class":98,"line":99},[96,115868,31926],{"class":102},[96,115870,114501],{"class":1946},[96,115872,114504],{"class":106},[96,115874,562],{"class":102},[96,115876,114509],{"class":106},[96,115878,110],{"class":155},[96,115880,25088],{"class":102},[96,115882,38912],{"class":155},[96,115884,13548],{"class":102},[96,115886,38912],{"class":155},[96,115888,114522],{"class":106},[96,115890,114525],{"class":155},[96,115892,25088],{"class":102},[96,115894,38912],{"class":155},[96,115896,13548],{"class":102},[96,115898,38912],{"class":155},[96,115900,30765],{"class":106},[14,115902,115903,115904,115906,115907,115910],{},"定义 reset。",[93,115905,114545],{}," 用来控制随机数，保证实验可以复现。",[93,115908,115909],{},"options"," 用来接收额外配置，本章暂时不用。",[87,115912,115914],{"className":30357,"code":115913,"language":30359,"meta":18,"style":18},"super().reset(seed=seed)\n",[93,115915,115916],{"__ignoreMap":18},[96,115917,115918,115920,115922,115924,115926],{"class":98,"line":99},[96,115919,115507],{"class":155},[96,115921,114542],{"class":106},[96,115923,114545],{"class":5200},[96,115925,152],{"class":102},[96,115927,114550],{"class":106},[14,115929,115930,115931,115934],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[93,115932,115933],{},"self.np_random"," 生成可复现的随机数。",[87,115936,115938],{"className":30357,"code":115937,"language":30359,"meta":18,"style":18},"mujoco.mj_resetData(self.model, self.data)\n",[93,115939,115940],{"__ignoreMap":18},[96,115941,115942,115945,115947,115949,115951],{"class":98,"line":99},[96,115943,115944],{"class":106},"mujoco.mj_resetData(",[96,115946,30802],{"class":155},[96,115948,114560],{"class":106},[96,115950,30802],{"class":155},[96,115952,114565],{"class":106},[14,115954,115955],{},"把 MuJoCo 状态重置到默认状态。",[87,115957,115959],{"className":30357,"code":115958,"language":30359,"meta":18,"style":18},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[93,115960,115961],{"__ignoreMap":18},[96,115962,115963,115965,115967,115969,115971,115973,115975,115977,115979,115981,115983,115985,115987,115989,115991,115993,115995],{"class":98,"line":99},[96,115964,30802],{"class":155},[96,115966,114576],{"class":106},[96,115968,152],{"class":102},[96,115970,38852],{"class":155},[96,115972,114583],{"class":106},[96,115974,113741],{"class":5200},[96,115976,113744],{"class":102},[96,115978,86189],{"class":155},[96,115980,12419],{"class":106},[96,115982,113751],{"class":5200},[96,115984,152],{"class":102},[96,115986,86189],{"class":155},[96,115988,12419],{"class":106},[96,115990,31475],{"class":5200},[96,115992,152],{"class":102},[96,115994,30802],{"class":155},[96,115996,114608],{"class":106},[14,115998,115320,115999,116002,116003,116006,116007,116009],{},[93,116000,116001],{},"[:]"," 表示修改整个数组。",[93,116004,116005],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[93,116008,102129],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[87,116011,116013],{"className":30357,"code":116012,"language":30359,"meta":18,"style":18},"self.data.qvel[:] = 0.0\n",[93,116014,116015],{"__ignoreMap":18},[96,116016,116017,116019,116021,116023],{"class":98,"line":99},[96,116018,30802],{"class":155},[96,116020,114615],{"class":106},[96,116022,152],{"class":102},[96,116024,104740],{"class":155},[14,116026,116027],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[87,116029,116031],{"className":30357,"code":116030,"language":30359,"meta":18,"style":18},"self.steps = 0\nreturn self._get_obs(), {}\n",[93,116032,116033,116043],{"__ignoreMap":18},[96,116034,116035,116037,116039,116041],{"class":98,"line":99},[96,116036,30802],{"class":155},[96,116038,113685],{"class":106},[96,116040,152],{"class":102},[96,116042,47312],{"class":155},[96,116044,116045,116047,116049],{"class":98,"line":19},[96,116046,17030],{"class":102},[96,116048,38852],{"class":155},[96,116050,114655],{"class":106},[14,116052,116053],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[87,116055,116056],{"className":30357,"code":115329,"language":30359,"meta":18,"style":18},[93,116057,116058],{"__ignoreMap":18},[96,116059,116060,116062,116064],{"class":98,"line":99},[96,116061,31926],{"class":102},[96,116063,114666],{"class":1946},[96,116065,114669],{"class":106},[14,116067,116068],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[87,116070,116072],{"className":30357,"code":116071,"language":30359,"meta":18,"style":18},"action = np.asarray(action, dtype=np.float32)\n",[93,116073,116074],{"__ignoreMap":18},[96,116075,116076,116078,116080,116082,116084,116086],{"class":98,"line":99},[96,116077,107421],{"class":106},[96,116079,152],{"class":102},[96,116081,114678],{"class":106},[96,116083,93479],{"class":5200},[96,116085,152],{"class":102},[96,116087,113775],{"class":106},[14,116089,116090,116091,28364],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[93,116092,115856],{},[87,116094,116096],{"className":30357,"code":116095,"language":30359,"meta":18,"style":18},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[93,116097,116098],{"__ignoreMap":18},[96,116099,116100,116102,116104,116106,116108,116110,116112],{"class":98,"line":99},[96,116101,107421],{"class":106},[96,116103,152],{"class":102},[96,116105,107426],{"class":106},[96,116107,30802],{"class":155},[96,116109,114697],{"class":106},[96,116111,30802],{"class":155},[96,116113,114702],{"class":106},[14,116115,116116],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[87,116118,116120],{"className":30357,"code":116119,"language":30359,"meta":18,"style":18},"self.data.ctrl[:] = action\n",[93,116121,116122],{"__ignoreMap":18},[96,116123,116124,116126,116128,116130],{"class":98,"line":99},[96,116125,30802],{"class":155},[96,116127,114713],{"class":106},[96,116129,152],{"class":102},[96,116131,107449],{"class":106},[14,116133,116134],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[87,116136,116138],{"className":30357,"code":116137,"language":30359,"meta":18,"style":18},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[93,116139,116140,116156],{"__ignoreMap":18},[96,116141,116142,116144,116146,116148,116150,116152,116154],{"class":98,"line":99},[96,116143,3008],{"class":102},[96,116145,101480],{"class":106},[96,116147,26022],{"class":102},[96,116149,32422],{"class":155},[96,116151,107],{"class":106},[96,116153,30802],{"class":155},[96,116155,114734],{"class":106},[96,116157,116158,116161,116163,116165,116167],{"class":98,"line":19},[96,116159,116160],{"class":106},"    mujoco.mj_step(",[96,116162,30802],{"class":155},[96,116164,114560],{"class":106},[96,116166,30802],{"class":155},[96,116168,114565],{"class":106},[14,116170,116171,116172,116175,116176,116178,116179,28364],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[93,116173,116174],{},"frame_skip=5","，所以外部调用一次 ",[93,116177,113856],{},"，内部实际执行 5 次 ",[93,116180,101194],{},[87,116182,116184],{"className":30357,"code":116183,"language":30359,"meta":18,"style":18},"self.steps += 1\n",[93,116185,116186],{"__ignoreMap":18},[96,116187,116188,116190,116192,116194],{"class":98,"line":99},[96,116189,30802],{"class":155},[96,116191,113685],{"class":106},[96,116193,9461],{"class":102},[96,116195,55678],{"class":155},[14,116197,116198],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[87,116200,116202],{"className":30357,"code":116201,"language":30359,"meta":18,"style":18},"obs = self._get_obs()\nreward = self._get_reward()\n",[93,116203,116204,116214],{"__ignoreMap":18},[96,116205,116206,116208,116210,116212],{"class":98,"line":99},[96,116207,110833],{"class":106},[96,116209,152],{"class":102},[96,116211,38852],{"class":155},[96,116213,114776],{"class":106},[96,116215,116216,116218,116220,116222],{"class":98,"line":19},[96,116217,110984],{"class":106},[96,116219,152],{"class":102},[96,116221,38852],{"class":155},[96,116223,114787],{"class":106},[14,116225,116226],{},"计算新的观测和奖励。",[87,116228,116230],{"className":30357,"code":116229,"language":30359,"meta":18,"style":18},"dist = float(np.linalg.norm(tip - target))\n",[93,116231,116232],{"__ignoreMap":18},[96,116233,116234,116236,116238,116240,116242,116244],{"class":98,"line":99},[96,116235,111575],{"class":106},[96,116237,152],{"class":102},[96,116239,109776],{"class":155},[96,116241,114830],{"class":106},[96,116243,639],{"class":102},[96,116245,114835],{"class":106},[14,116247,116248],{},"计算末端到目标的距离，并转换成 Python float。",[87,116250,116251],{"className":30357,"code":113656,"language":30359,"meta":18,"style":18},[93,116252,116253,116265],{"__ignoreMap":18},[96,116254,116255,116257,116259,116261,116263],{"class":98,"line":99},[96,116256,113663],{"class":106},[96,116258,152],{"class":102},[96,116260,113668],{"class":106},[96,116262,1017],{"class":102},[96,116264,113673],{"class":155},[96,116266,116267,116269,116271,116273,116275,116277,116279],{"class":98,"line":19},[96,116268,113678],{"class":106},[96,116270,152],{"class":102},[96,116272,38852],{"class":155},[96,116274,113685],{"class":106},[96,116276,1693],{"class":102},[96,116278,38852],{"class":155},[96,116280,113692],{"class":106},[14,116282,116283],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[87,116285,116287],{"className":30357,"code":116286,"language":30359,"meta":18,"style":18},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[93,116288,116289,116302],{"__ignoreMap":18},[96,116290,116291,116294,116296,116298,116300],{"class":98,"line":99},[96,116292,116293],{"class":106},"info ",[96,116295,152],{"class":102},[96,116297,4431],{"class":106},[96,116299,114881],{"class":211},[96,116301,114884],{"class":106},[96,116303,116304,116306],{"class":98,"line":19},[96,116305,17030],{"class":102},[96,116307,114891],{"class":106},[14,116309,116310,116313],{},[93,116311,116312],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[87,116315,116317],{"className":30357,"code":116316,"language":30359,"meta":18,"style":18},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[93,116318,116319,116328],{"__ignoreMap":18},[96,116320,116321,116324,116326],{"class":98,"line":99},[96,116322,116323],{"class":106},"env ",[96,116325,152],{"class":102},[96,116327,114921],{"class":106},[96,116329,116330,116332,116334,116336,116338,116340,116342],{"class":98,"line":19},[96,116331,113379],{"class":106},[96,116333,152],{"class":102},[96,116335,114931],{"class":106},[96,116337,114545],{"class":5200},[96,116339,152],{"class":102},[96,116341,298],{"class":155},[96,116343,113],{"class":106},[14,116345,116346,116347,116350],{},"创建环境并重置。",[93,116348,116349],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[87,116352,116354],{"className":30357,"code":116353,"language":30359,"meta":18,"style":18},"action = env.action_space.sample()\n",[93,116355,116356],{"__ignoreMap":18},[96,116357,116358,116360,116362],{"class":98,"line":99},[96,116359,107421],{"class":106},[96,116361,152],{"class":102},[96,116363,115000],{"class":106},[14,116365,116366],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[38,116368,102295],{"id":102294},[14,116370,105463],{},[87,116372,116375],{"className":116373,"code":116374,"language":5171,"meta":18},[5169],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[93,116376,116374],{"__ignoreMap":18},[14,116378,116379],{},"这个环境已经具备强化学习环境的基本结构。",[14,116381,116382],{},"主函数里使用随机动作：",[87,116384,116385],{"className":30357,"code":116353,"language":30359,"meta":18,"style":18},[93,116386,116387],{"__ignoreMap":18},[96,116388,116389,116391,116393],{"class":98,"line":99},[96,116390,107421],{"class":106},[96,116392,152],{"class":102},[96,116394,115000],{"class":106},[14,116396,116397],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[38,116399,102327],{"id":102326},[50,116401,116402,116405,116411,116420,116429,116438,116444],{},[53,116403,116404],{},"运行程序。",[53,116406,116407,116408,28364],{},"确认 ",[93,116409,116410],{},"obs.shape == (10,)",[53,116412,111160,116413,116416,116417,28364],{},[93,116414,116415],{},"env.action_space","，应类似 ",[93,116418,116419],{},"Box(-1.0, 1.0, (2,), float32)",[53,116421,105564,116422,116425,116426,28364],{},[93,116423,116424],{},"self.max_steps = 10","，确认环境会更快 ",[93,116427,116428],{},"truncated=True",[53,116430,102390,116431,102393,116434,116437],{},[93,116432,116433],{},"terminated = dist \u003C 0.05",[93,116435,116436],{},"dist \u003C 0.2","，观察是否更容易结束。",[53,116439,102390,116440,116443],{},[93,116441,116442],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[53,116445,116446,116447,116449,116450,116453],{},"在 ",[93,116448,116312],{}," 里加入 ",[93,116451,116452],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[38,116455,102432],{"id":102431},[67,116457,116459],{"id":116458},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[14,116461,116462,116463,116465],{},"Gymnasium 的 ",[93,116464,107113],{}," 返回 5 个值:",[87,116467,116469],{"className":30357,"code":116468,"language":30359,"meta":18,"style":18},"obs, reward, terminated, truncated, info\n",[93,116470,116471],{"__ignoreMap":18},[96,116472,116473],{"class":98,"line":99},[96,116474,116468],{"class":106},[14,116476,116477],{},"不是旧 Gym 的 4 个值。",[67,116479,116481,116484],{"id":116480},"datactrl-action-维度错误",[93,116482,116483],{},"data.ctrl[:] = action"," 维度错误",[14,116486,102502],{},[87,116488,116490],{"className":30357,"code":116489,"language":30359,"meta":18,"style":18},"print(self.model.nu)\nprint(action.shape)\n",[93,116491,116492,116503],{"__ignoreMap":18},[96,116493,116494,116496,116498,116500],{"class":98,"line":99},[96,116495,30394],{"class":155},[96,116497,107],{"class":106},[96,116499,30802],{"class":155},[96,116501,116502],{"class":106},".model.nu)\n",[96,116504,116505,116507],{"class":98,"line":19},[96,116506,30394],{"class":155},[96,116508,116509],{"class":106},"(action.shape)\n",[14,116511,116512],{},"两者必须匹配。",[67,116514,116516],{"id":116515},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[14,116518,102441],{},[87,116520,116522],{"className":30357,"code":116521,"language":30359,"meta":18,"style":18},"mujoco.mj_forward(self.model, self.data)\n",[93,116523,116524],{"__ignoreMap":18},[96,116525,116526,116529,116531,116533,116535],{"class":98,"line":99},[96,116527,116528],{"class":106},"mujoco.mj_forward(",[96,116530,30802],{"class":155},[96,116532,114560],{"class":106},[96,116534,30802],{"class":155},[96,116536,114565],{"class":106},[67,116538,116540,116542],{"id":116539},"observation_space-维度和-obs-不一致",[93,116541,113579],{}," 维度和 obs 不一致",[14,116544,102554],{},[87,116546,116548],{"className":30357,"code":116547,"language":30359,"meta":18,"style":18},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[93,116549,116550,116560,116567],{"__ignoreMap":18},[96,116551,116552,116554,116556,116558],{"class":98,"line":99},[96,116553,110833],{"class":106},[96,116555,152],{"class":102},[96,116557,38852],{"class":155},[96,116559,114776],{"class":106},[96,116561,116562,116564],{"class":98,"line":19},[96,116563,30394],{"class":155},[96,116565,116566],{"class":106},"(obs.shape)\n",[96,116568,116569,116571,116573,116575],{"class":98,"line":1162},[96,116570,30394],{"class":155},[96,116572,107],{"class":106},[96,116574,30802],{"class":155},[96,116576,116577],{"class":106},".observation_space.shape)\n",[14,116579,116580],{},"两者必须一致。本章观测是：",[87,116582,116585],{"className":116583,"code":116584,"language":5171,"meta":18},[5169],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[93,116586,116584],{"__ignoreMap":18},[67,116588,116590],{"id":116589},"action-超过范围","action 超过范围",[14,116592,116593],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[87,116595,116596],{"className":30357,"code":116095,"language":30359,"meta":18,"style":18},[93,116597,116598],{"__ignoreMap":18},[96,116599,116600,116602,116604,116606,116608,116610,116612],{"class":98,"line":99},[96,116601,107421],{"class":106},[96,116603,152],{"class":102},[96,116605,107426],{"class":106},[96,116607,30802],{"class":155},[96,116609,114697],{"class":106},[96,116611,30802],{"class":155},[96,116613,114702],{"class":106},[14,116615,116616,116617,28364],{},"这能避免无效动作直接写入 ",[93,116618,101055],{},[67,116620,116622],{"id":116621},"忘记返回-info","忘记返回 info",[14,116624,116462,116625,100997,116627,116629],{},[93,116626,70035],{},[93,116628,107113],{}," 都会返回 info：",[87,116631,116632],{"className":30357,"code":113372,"language":30359,"meta":18,"style":18},[93,116633,116634,116642],{"__ignoreMap":18},[96,116635,116636,116638,116640],{"class":98,"line":99},[96,116637,113379],{"class":106},[96,116639,152],{"class":102},[96,116641,113384],{"class":106},[96,116643,116644,116646,116648],{"class":98,"line":19},[96,116645,113389],{"class":106},[96,116647,152],{"class":102},[96,116649,113394],{"class":106},[14,116651,116652,116653,28364],{},"即使暂时没有额外信息，也返回 ",[93,116654,32438],{},[38,116656,116658],{"id":116657},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[14,116660,116661],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[50,116663,116664,116667,116670,116673,116676,116679],{},[53,116665,116666],{},"更稳定的 reward。",[53,116668,116669],{},"合理的 episode 长度。",[53,116671,116672],{},"可重复的随机目标采样。",[53,116674,116675],{},"render 接口。",[53,116677,116678],{},"环境注册代码。",[53,116680,116681],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[14,116683,116684],{},"如果只是自己写训练循环，最小形式是：",[87,116686,116688],{"className":30357,"code":116687,"language":30359,"meta":18,"style":18},"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",[93,116689,116690,116698,116714,116718,116734,116743,116752,116762],{"__ignoreMap":18},[96,116691,116692,116694,116696],{"class":98,"line":99},[96,116693,116323],{"class":106},[96,116695,152],{"class":102},[96,116697,114921],{"class":106},[96,116699,116700,116702,116704,116706,116708,116710,116712],{"class":98,"line":19},[96,116701,113379],{"class":106},[96,116703,152],{"class":102},[96,116705,114931],{"class":106},[96,116707,114545],{"class":5200},[96,116709,152],{"class":102},[96,116711,298],{"class":155},[96,116713,113],{"class":106},[96,116715,116716],{"class":98,"line":1162},[96,116717,2383],{"emptyLinePlaceholder":23},[96,116719,116720,116722,116724,116726,116728,116730,116732],{"class":98,"line":1177},[96,116721,3008],{"class":102},[96,116723,101480],{"class":106},[96,116725,26022],{"class":102},[96,116727,32422],{"class":155},[96,116729,107],{"class":106},[96,116731,6394],{"class":155},[96,116733,30765],{"class":106},[96,116735,116736,116739,116741],{"class":98,"line":1183},[96,116737,116738],{"class":106},"    action ",[96,116740,152],{"class":102},[96,116742,115000],{"class":106},[96,116744,116745,116748,116750],{"class":98,"line":1197},[96,116746,116747],{"class":106},"    obs, reward, terminated, truncated, info ",[96,116749,152],{"class":102},[96,116751,113394],{"class":106},[96,116753,116754,116756,116758,116760],{"class":98,"line":1203},[96,116755,3084],{"class":102},[96,116757,115066],{"class":106},[96,116759,115069],{"class":102},[96,116761,115072],{"class":106},[96,116763,116764,116767,116769],{"class":98,"line":1294},[96,116765,116766],{"class":106},"        obs, info ",[96,116768,152],{"class":102},[96,116770,113384],{"class":106},[38,116772,116774],{"id":116773},"_9本章小结","9.本章小结",[14,116776,116777],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[87,116779,116782],{"className":116780,"code":116781,"language":5171,"meta":18},[5169],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[93,116783,116781],{"__ignoreMap":18},[14,116785,116786],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[5110,116788,116789],{},"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":18,"searchDepth":19,"depth":19,"links":116791},[116792,116793,116794,116801,116805,116806,116807,116817,116818],{"id":100625,"depth":19,"text":100626},{"id":100748,"depth":19,"text":100749},{"id":101023,"depth":19,"text":101024,"children":116795},[116796,116798,116800],{"id":113603,"depth":1162,"text":116797},"terminated 和 truncated 的区别",{"id":113706,"depth":1162,"text":116799},"observation_space 和 action_space",{"id":113833,"depth":1162,"text":113834},{"id":101231,"depth":19,"text":101232,"children":116802},[116803,116804],{"id":101551,"depth":1162,"text":101551},{"id":101687,"depth":1162,"text":101687},{"id":102294,"depth":19,"text":102295},{"id":102326,"depth":19,"text":102327},{"id":102431,"depth":19,"text":102432,"children":116808},[116809,116810,116812,116813,116815,116816],{"id":116458,"depth":1162,"text":116459},{"id":116480,"depth":1162,"text":116811},"data.ctrl[:] = action 维度错误",{"id":116515,"depth":1162,"text":116516},{"id":116539,"depth":1162,"text":116814},"observation_space 维度和 obs 不一致",{"id":116589,"depth":1162,"text":116590},{"id":116621,"depth":1162,"text":116622},{"id":116657,"depth":19,"text":116658},{"id":116773,"depth":19,"text":116774},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113356,"description":18},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116825,"title":116826,"body":116827,"description":117250,"extension":21,"meta":117251,"navigation":23,"path":117252,"seo":117253,"stem":117254,"__hash__":117255},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116828,"toc":117240},[116829,116833,116836,116839,116859,116865,116871,116881,116884,116887,116907,116910,116914,116917,116923,116926,116940,116943,116946,117020,117023,117029,117032,117055,117058,117108,117111,117117,117120,117123,117126,117145,117148,117154,117157,117160,117163,117183,117186,117189,117192,117237],[10,116830,116832],{"id":116831},"mujoco-学习","MuJoCo 学习",[14,116834,116835],{},"初版",[14,116837,116838],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[50,116840,116841,116844,116847,116856],{},[53,116842,116843],{},"MuJoCo 模型文件在描述什么。",[53,116845,116846],{},"Python 代码怎样读取和推进仿真。",[53,116848,116849,319,116851,319,116853,116855],{},[93,116850,104009],{},[93,116852,104339],{},[93,116854,104342],{}," 这些数组为什么重要。",[53,116857,116858],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[14,116860,116861,116862,116864],{},"默认环境为 Fedora 44、Python >= 3.10、",[93,116863,101006],{}," 官方 Python bindings。",[14,116866,116867,116868,116870],{},"注意：本文禁止使用 ",[93,116869,100991],{},"。所有示例均使用：",[87,116872,116873],{"className":30357,"code":101557,"language":30359,"meta":18,"style":18},[93,116874,116875],{"__ignoreMap":18},[96,116876,116877,116879],{"class":98,"line":99},[96,116878,30371],{"class":102},[96,116880,101280],{"class":106},[38,116882,116883],{"id":116883},"适合谁阅读",[14,116885,116886],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[50,116888,116889,116892,116895,116898],{},[53,116890,116891],{},"没学过 MuJoCo，只会一点 Python。",[53,116893,116894],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[53,116896,116897],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[53,116899,116900,116901,116903,116904,116906],{},"以前接触过 ",[93,116902,100991],{},"，现在想迁移到官方 ",[93,116905,101000],{}," Python bindings。",[14,116908,116909],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[38,116911,116913],{"id":116912},"mujoco-到底是什么","MuJoCo 到底是什么",[14,116915,116916],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[87,116918,116921],{"className":116919,"code":116920,"language":5171,"meta":18},[5169],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[93,116922,116920],{"__ignoreMap":18},[14,116924,116925],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[50,116927,116928,116931,116934,116937],{},[53,116929,116930],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[53,116932,116933],{},"快速测试控制算法，不必一开始就上真实机器人。",[53,116935,116936],{},"生成强化学习环境。",[53,116938,116939],{},"采集状态、动作、图像、奖励等训练数据。",[38,116941,116942],{"id":116942},"学习前的心智模型",[14,116944,116945],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[244,116947,116948,116960],{},[247,116949,116950],{},[250,116951,116952,116955,116958],{},[253,116953,116954],{"align":23721},"部分",[253,116956,116957],{"align":23721},"负责什么",[253,116959,21171],{"align":23721},[291,116961,116962,116973,116985,116997,117009],{},[250,116963,116964,116967,116970],{},[296,116965,116966],{"align":23721},"MJCF XML",[296,116968,116969],{"align":23721},"定义世界和机器人结构",[296,116971,116972],{"align":23721},"地面、盒子、关节、电机、摄像头",[250,116974,116975,116979,116982],{},[296,116976,116977],{"align":23721},[93,116978,100688],{},[296,116980,116981],{"align":23721},"编译后的静态模型",[296,116983,116984],{"align":23721},"有几个关节、有几个电机、时间步长是多少",[250,116986,116987,116991,116994],{},[296,116988,116989],{"align":23721},[93,116990,100698],{},[296,116992,116993],{"align":23721},"运行中的动态状态",[296,116995,116996],{"align":23721},"当前时间、位置、速度、电机输入",[250,116998,116999,117003,117006],{},[296,117000,117001],{"align":23721},[93,117002,101194],{},[296,117004,117005],{"align":23721},"推进一步物理仿真",[296,117007,117008],{"align":23721},"根据重力、力、碰撞更新状态",[250,117010,117011,117014,117017],{},[296,117012,117013],{"align":23721},"Viewer \u002F Renderer",[296,117015,117016],{"align":23721},"把仿真显示出来",[296,117018,117019],{"align":23721},"打开窗口或保存图片",[14,117021,117022],{},"一句话总结：",[87,117024,117027],{"className":117025,"code":117026,"language":5171,"meta":18},[5169],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[93,117028,117026],{"__ignoreMap":18},[14,117030,117031],{},"参考来源：",[1114,117033,117034,117041,117048],{},[53,117035,117036,117037],{},"MuJoCo Python 官方文档：",[345,117038,117039],{"href":117039,"rel":117040},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[23850],[53,117042,117043,117044],{},"MuJoCo XML Reference：",[345,117045,117046],{"href":117046,"rel":117047},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[23850],[53,117049,117050,117051],{},"MuJoCo Overview：",[345,117052,117053],{"href":117053,"rel":117054},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[23850],[38,117056,117057],{"id":117057},"章节目录",[50,117059,117060,117066,117072,117078,117084,117090,117096,117102],{},[53,117061,117062],{},[345,117063,117065],{"href":117064},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[53,117067,117068],{},[345,117069,117071],{"href":117070},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[53,117073,117074],{},[345,117075,117077],{"href":117076},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[53,117079,117080],{},[345,117081,117083],{"href":117082},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[53,117085,117086],{},[345,117087,117089],{"href":117088},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[53,117091,117092],{},[345,117093,117095],{"href":117094},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[53,117097,117098],{},[345,117099,117101],{"href":117100},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[53,117103,117104],{},[345,117105,117107],{"href":117106},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[38,117109,117110],{"id":117110},"推荐学习路线",[87,117112,117115],{"className":117113,"code":117114,"language":5171,"meta":18},[5169],"环境安装\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",[93,117116,117114],{"__ignoreMap":18},[14,117118,117119],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[38,117121,117122],{"id":117122},"建议的目录结构",[14,117124,117125],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[87,117127,117129],{"className":23807,"code":117128,"language":23809,"meta":18,"style":18},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[93,117130,117131,117139],{"__ignoreMap":18},[96,117132,117133,117135,117137],{"class":98,"line":99},[96,117134,101245],{"class":1946},[96,117136,29195],{"class":155},[96,117138,101250],{"class":211},[96,117140,117141,117143],{"class":98,"line":19},[96,117142,101255],{"class":155},[96,117144,101250],{"class":211},[14,117146,117147],{},"每一章的代码都单独保存：",[87,117149,117152],{"className":117150,"code":117151,"language":5171,"meta":18},[5169],"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",[93,117153,117151],{"__ignoreMap":18},[14,117155,117156],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[38,117158,117159],{"id":117159},"学习方法",[14,117161,117162],{},"每章建议按这个顺序操作：",[50,117164,117165,117168,117171,117174,117177,117180],{},[53,117166,117167],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[53,117169,117170],{},"复制最小可运行代码，保存成指定文件。",[53,117172,117173],{},"运行代码，确认没有报错。",[53,117175,117176],{},"对照“运行结果说明”理解输出。",[53,117178,117179],{},"做“验证步骤”，主动改一两个参数。",[53,117181,117182],{},"遇到报错先看“常见错误与解决方案”。",[14,117184,117185],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[38,117187,117188],{"id":117188},"全局排错顺序",[14,117190,117191],{},"遇到问题时，按下面顺序查：",[50,117193,117194,117200,117206,117211,117214,117217,117224,117234],{},[53,117195,117196,117197],{},"Python 环境是否激活：",[93,117198,117199],{},"which python",[53,117201,117202,117203],{},"MuJoCo 是否能导入：",[93,117204,117205],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[53,117207,117208,117209],{},"是否误装了 ",[93,117210,100991],{},[53,117212,117213],{},"XML 标签是否闭合、属性是否拼写正确",[53,117215,117216],{},"actuator 引用的 joint 名字是否存在",[53,117218,117219,117221,117222],{},[93,117220,101055],{}," 的长度是否等于 ",[93,117223,102137],{},[53,117225,105564,117226,82518,117228,117230,117231],{},[93,117227,104009],{},[93,117229,104339],{}," 后是否调用了 ",[93,117232,117233],{},"mujoco.mj_forward",[53,117235,117236],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[5110,117238,117239],{},"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":18,"searchDepth":19,"depth":19,"links":117241},[117242,117243,117244,117245,117246,117247,117248,117249],{"id":116883,"depth":19,"text":116883},{"id":116912,"depth":19,"text":116913},{"id":116942,"depth":19,"text":116942},{"id":117057,"depth":19,"text":117057},{"id":117110,"depth":19,"text":117110},{"id":117122,"depth":19,"text":117122},{"id":117159,"depth":19,"text":117159},{"id":117188,"depth":19,"text":117188},"仿真搭建。",{"category":23363},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116826,"description":117250},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117257,"title":117258,"body":117259,"description":23361,"extension":21,"meta":117714,"navigation":23,"path":117715,"seo":117716,"stem":117717,"__hash__":117718},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117260,"toc":117712},[117261,117264,117267,117273,117709],[10,117262,117258],{"id":117263},"_1-最常用的基本操作更新",[14,117265,117266],{},"装linux系统教程：",[14,117268,117269],{},[345,117270,117271],{"href":117271,"rel":117272},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[23850],[87,117274,117278],{"className":117275,"code":117276,"language":117277,"meta":18,"style":18},"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",[93,117279,117280,117285,117290,117299,117304,117313,117318,117338,117343,117354,117359,117368,117373,117401,117406,117425,117430,117449,117453,117458,117474,117478,117483,117513,117517,117522,117538,117542,117547,117562,117566,117571,117587,117591,117596,117608,117620,117624,117629,117646,117650,117655,117673,117677,117682,117691,117695,117700],{"__ignoreMap":18},[96,117281,117282],{"class":98,"line":99},[96,117283,117284],{"class":165},"#更新相关的知识\n",[96,117286,117287],{"class":98,"line":19},[96,117288,117289],{"class":165},"# 更新软件包列表（从服务器获取最新软件信息）\n",[96,117291,117292,117294,117297],{"class":98,"line":1162},[96,117293,24555],{"class":1946},[96,117295,117296],{"class":211}," apt",[96,117298,26221],{"class":211},[96,117300,117301],{"class":98,"line":1177},[96,117302,117303],{"class":165},"# 升级所有可更新的软件包（不删除旧包）\n",[96,117305,117306,117308,117310],{"class":98,"line":1183},[96,117307,24555],{"class":1946},[96,117309,117296],{"class":211},[96,117311,117312],{"class":211}," upgrade\n",[96,117314,117315],{"class":98,"line":1197},[96,117316,117317],{"class":165},"#更新和升级软件包\n",[96,117319,117320,117322,117324,117327,117329,117331,117333,117336],{"class":98,"line":1203},[96,117321,24555],{"class":1946},[96,117323,117296],{"class":211},[96,117325,117326],{"class":211}," update",[96,117328,26169],{"class":106},[96,117330,24555],{"class":1946},[96,117332,117296],{"class":211},[96,117334,117335],{"class":211}," upgrade",[96,117337,100960],{"class":155},[96,117339,117340],{"class":98,"line":1294},[96,117341,117342],{"class":165},"#列出可更新的软件包及版本信息\n",[96,117344,117345,117348,117351],{"class":98,"line":1300},[96,117346,117347],{"class":1946},"apt",[96,117349,117350],{"class":211}," list",[96,117352,117353],{"class":155}," --upgradable\n",[96,117355,117356],{"class":98,"line":1312},[96,117357,117358],{"class":165},"#彻底升级（处理依赖关系，可能删除旧包）\n",[96,117360,117361,117363,117365],{"class":98,"line":1595},[96,117362,24555],{"class":1946},[96,117364,117296],{"class":211},[96,117366,117367],{"class":211}," full-upgrade\n",[96,117369,117370],{"class":98,"line":1600},[96,117371,117372],{"class":165},"#设置指定版本\n",[96,117374,117375,117377,117379,117381,117383,117386,117388,117390,117392,117394,117397,117399],{"class":98,"line":1606},[96,117376,24555],{"class":1946},[96,117378,117296],{"class":211},[96,117380,23819],{"class":211},[96,117382,28881],{"class":102},[96,117384,117385],{"class":211},"package_nam",[96,117387,181],{"class":106},[96,117389,1067],{"class":102},[96,117391,152],{"class":211},[96,117393,1017],{"class":102},[96,117395,117396],{"class":211},"version_numbe",[96,117398,777],{"class":106},[96,117400,51286],{"class":102},[96,117402,117403],{"class":98,"line":1611},[96,117404,117405],{"class":165},"#只安装软件包不升级\n",[96,117407,117408,117410,117412,117414,117416,117418,117420,117422],{"class":98,"line":1625},[96,117409,24555],{"class":1946},[96,117411,117296],{"class":211},[96,117413,23819],{"class":211},[96,117415,28881],{"class":102},[96,117417,117385],{"class":211},[96,117419,181],{"class":106},[96,117421,1067],{"class":102},[96,117423,117424],{"class":155}," --no-upgrade\n",[96,117426,117427],{"class":98,"line":1630},[96,117428,117429],{"class":165},"#只升级，不存在就不安装\n",[96,117431,117432,117434,117436,117438,117440,117442,117444,117446],{"class":98,"line":1636},[96,117433,24555],{"class":1946},[96,117435,117296],{"class":211},[96,117437,23819],{"class":211},[96,117439,28881],{"class":102},[96,117441,117385],{"class":211},[96,117443,181],{"class":106},[96,117445,1067],{"class":102},[96,117447,117448],{"class":155}," --only-upgrade\n",[96,117450,117451],{"class":98,"line":1657},[96,117452,2383],{"emptyLinePlaceholder":23},[96,117454,117455],{"class":98,"line":1662},[96,117456,117457],{"class":165},"#安装指定的软件命令\n",[96,117459,117460,117462,117464,117466,117468,117470,117472],{"class":98,"line":1676},[96,117461,24555],{"class":1946},[96,117463,117296],{"class":211},[96,117465,23819],{"class":211},[96,117467,28881],{"class":102},[96,117469,117385],{"class":211},[96,117471,181],{"class":106},[96,117473,51286],{"class":102},[96,117475,117476],{"class":98,"line":1681},[96,117477,2383],{"emptyLinePlaceholder":23},[96,117479,117480],{"class":98,"line":1710},[96,117481,117482],{"class":165},"#安装多个软件包\n",[96,117484,117485,117487,117489,117491,117493,117496,117499,117501,117503,117506,117508,117510],{"class":98,"line":1715},[96,117486,24555],{"class":1946},[96,117488,117296],{"class":211},[96,117490,23819],{"class":211},[96,117492,28881],{"class":102},[96,117494,117495],{"class":211},"package_",[96,117497,117498],{"class":102},"1>",[96,117500,28881],{"class":102},[96,117502,117495],{"class":211},[96,117504,117505],{"class":102},"2>",[96,117507,28881],{"class":102},[96,117509,117495],{"class":211},[96,117511,117512],{"class":102},"3>\n",[96,117514,117515],{"class":98,"line":1732},[96,117516,2383],{"emptyLinePlaceholder":23},[96,117518,117519],{"class":98,"line":1737},[96,117520,117521],{"class":165},"#更新指定的软件命令\n",[96,117523,117524,117526,117528,117530,117532,117534,117536],{"class":98,"line":1742},[96,117525,24555],{"class":1946},[96,117527,117296],{"class":211},[96,117529,117326],{"class":211},[96,117531,28881],{"class":102},[96,117533,117385],{"class":211},[96,117535,181],{"class":106},[96,117537,51286],{"class":102},[96,117539,117540],{"class":98,"line":1747},[96,117541,2383],{"emptyLinePlaceholder":23},[96,117543,117544],{"class":98,"line":1761},[96,117545,117546],{"class":165},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[96,117548,117549,117551,117554,117556,117558,117560],{"class":98,"line":1766},[96,117550,117347],{"class":1946},[96,117552,117553],{"class":211}," show",[96,117555,28881],{"class":102},[96,117557,117385],{"class":211},[96,117559,181],{"class":106},[96,117561,51286],{"class":102},[96,117563,117564],{"class":98,"line":2560},[96,117565,2383],{"emptyLinePlaceholder":23},[96,117567,117568],{"class":98,"line":2574},[96,117569,117570],{"class":165},"#删除软件包命令\n",[96,117572,117573,117575,117577,117579,117581,117583,117585],{"class":98,"line":2582},[96,117574,24555],{"class":1946},[96,117576,117296],{"class":211},[96,117578,26058],{"class":211},[96,117580,28881],{"class":102},[96,117582,117385],{"class":211},[96,117584,181],{"class":106},[96,117586,51286],{"class":102},[96,117588,117589],{"class":98,"line":2587},[96,117590,2383],{"emptyLinePlaceholder":23},[96,117592,117593],{"class":98,"line":2593},[96,117594,117595],{"class":165},"# 清理旧版本和缓存（释放磁盘空间）\n",[96,117597,117598,117600,117602,117605],{"class":98,"line":2599},[96,117599,24555],{"class":1946},[96,117601,117296],{"class":211},[96,117603,117604],{"class":211}," autoremove",[96,117606,117607],{"class":165},"  # 删除不再需要的依赖和库文件\n",[96,117609,117610,117612,117614,117617],{"class":98,"line":2604},[96,117611,24555],{"class":1946},[96,117613,117296],{"class":211},[96,117615,117616],{"class":211}," clean",[96,117618,117619],{"class":165},"       # 清理下载的缓存包\n",[96,117621,117622],{"class":98,"line":7932},[96,117623,2383],{"emptyLinePlaceholder":23},[96,117625,117626],{"class":98,"line":7956},[96,117627,117628],{"class":165},"#移除软件包及配置文件\n",[96,117630,117631,117633,117635,117638,117640,117642,117644],{"class":98,"line":7961},[96,117632,24555],{"class":1946},[96,117634,117296],{"class":211},[96,117636,117637],{"class":211}," purge",[96,117639,28881],{"class":102},[96,117641,117385],{"class":211},[96,117643,181],{"class":106},[96,117645,51286],{"class":102},[96,117647,117648],{"class":98,"line":7967},[96,117649,2383],{"emptyLinePlaceholder":23},[96,117651,117652],{"class":98,"line":7994},[96,117653,117654],{"class":165},"#查找软件包命令\n",[96,117656,117657,117659,117661,117664,117666,117669,117671],{"class":98,"line":7999},[96,117658,24555],{"class":1946},[96,117660,117296],{"class":211},[96,117662,117663],{"class":211}," search",[96,117665,28881],{"class":102},[96,117667,117668],{"class":211},"keywor",[96,117670,421],{"class":106},[96,117672,51286],{"class":102},[96,117674,117675],{"class":98,"line":8005},[96,117676,2383],{"emptyLinePlaceholder":23},[96,117678,117679],{"class":98,"line":8017},[96,117680,117681],{"class":165},"#列出所有已安装的包\n",[96,117683,117684,117686,117688],{"class":98,"line":8029},[96,117685,117347],{"class":1946},[96,117687,117350],{"class":211},[96,117689,117690],{"class":155}," --installed\n",[96,117692,117693],{"class":98,"line":8041},[96,117694,2383],{"emptyLinePlaceholder":23},[96,117696,117697],{"class":98,"line":9700},[96,117698,117699],{"class":165},"#列出所有已安装的包的版本信息\n",[96,117701,117702,117704,117706],{"class":98,"line":9725},[96,117703,117347],{"class":1946},[96,117705,117350],{"class":211},[96,117707,117708],{"class":155}," --all-versions\n",[5110,117710,117711],{},"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":18,"searchDepth":19,"depth":19,"links":117713},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117258,"description":23361},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117720,"title":117721,"body":117722,"description":23361,"extension":21,"meta":118463,"navigation":23,"path":118464,"seo":118465,"stem":118466,"__hash__":118467},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117723,"toc":118450},[117724,117727,117731,117734,117740,117744,117748,117754,117759,117764,117769,117774,117779,117782,117785,117788,117791,117795,117798,117803,117806,117811,117814,117819,117826,117829,117832,117835,117838,117841,117852,117856,117860,117865,117870,117874,117879,117883,117888,117892,117896,117901,117904,117949,117954,117958,117962,117967,117973,117978,117988,117993,118003,118008,118013,118040,118044,118047,118052,118055,118080,118084,118089,118092,118097,118102,118122,118127,118130,118145,118149,118202,118205,118210,118214,118217,118232,118235,118238,118243,118247,118251,118254,118258,118262,118265,118270,118275,118279,118286,118294,118297,118304,118309,118314,118317,118322,118329,118334,118341,118345,118347,118352,118356,118359,118362,118367,118370,118375,118378,118383,118388,118393,118397,118402,118406,118447],[10,117725,117721],{"id":117726},"_2-linux装机教程",[38,117728,117730],{"id":117729},"_21-实体机","2.1 实体机",[14,117732,117733],{},"使用清华源：（Ubuntu24.04）",[14,117735,117736],{},[345,117737,117738],{"href":117738,"rel":117739},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[23850],[38,117741,117743],{"id":117742},"_22-普通虚拟机","2.2 普通虚拟机",[67,117745,117747],{"id":117746},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[14,117749,117750],{},[345,117751,117752],{"href":117752,"rel":117753},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[23850],[14,117755,117756],{},[1445,117757],{"alt":18,"src":117758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[14,117760,117761],{},[1445,117762],{"alt":18,"src":117763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[14,117765,117766],{},[1445,117767],{"alt":18,"src":117768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[14,117770,117771],{},[1445,117772],{"alt":18,"src":117773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[14,117775,117776],{},[1445,117777],{"alt":18,"src":117778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[14,117780,117781],{},"内存4G（4096MB）；",[14,117783,117784],{},"CPU给4个核；",[14,117786,117787],{},"硬盘动态分配60G；",[14,117789,117790],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[67,117792,117794],{"id":117793},"_222-安装ubuntu","2.2.2 安装Ubuntu",[14,117796,117797],{},"按照1.1的步骤下载Ubuntu",[14,117799,117800],{},[1445,117801],{"alt":18,"src":117802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[14,117804,117805],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[14,117807,117808],{},[1445,117809],{"alt":18,"src":117810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[14,117812,117813],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[14,117815,117816],{},[1445,117817],{"alt":18,"src":117818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[14,117820,117821,117822,117825],{},"选择“正常安装”(找不到都用Alt+F7)， ",[256,117823,117824],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[14,117827,117828],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[14,117830,117831],{},"将改动写入磁盘吗 继续",[14,117833,117834],{},"选择东八区（shanghai，大致在地图上点一下），继续",[14,117836,117837],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[14,117839,117840],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[14,117842,117843,117844,117847,117848,117851],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[256,117845,117846],{},"除了"," 选不发送系统信息与不升级之外， ",[256,117849,117850],{},"其它"," 都跳过或前进）",[67,117853,117855],{"id":117854},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[21982,117857,117859],{"id":117858},"_2231-全屏","2.2.3.1 全屏",[14,117861,117862],{},[1445,117863],{"alt":18,"src":117864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[14,117866,117867],{},[1445,117868],{"alt":18,"src":117869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[21982,117871,117873],{"id":117872},"_2232-文件交换","2.2.3.2 文件交换",[14,117875,117876],{},[1445,117877],{"alt":18,"src":117878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[21982,117880,117882],{"id":117881},"_2233-新建文本文档","2.2.3.3 新建文本文档",[14,117884,117885],{},[1445,117886],{"alt":18,"src":117887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[38,117889,117891],{"id":117890},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[67,117893,117895],{"id":117894},"_231-简介与优缺点","2.3.1 简介与优缺点",[50,117897,117898],{},[53,117899,117900],{},"什么情况下推荐？",[14,117902,117903],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[50,117905,117906],{"start":19},[53,117907,117908,117909],{},"优缺点：",[50,117910,117911,117941],{},[53,117912,117913,117914],{},"优点：",[50,117915,117916,117919,117926,117929,117932,117935,117938],{},[53,117917,117918],{},"WSL2是最好的Linux发行版;(bushi)",[53,117920,117921,117922,117925],{},"性能损耗极低。且比在Windows上跑深度性能 ",[256,117923,117924],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[53,117927,117928],{},"非常方便调用USB设备，可以USB直通;",[53,117930,117931],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[53,117933,117934],{},"非常方便Win与WSL2互相传文件等协同操作;",[53,117936,117937],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[53,117939,117940],{},"非常方便使用Windows的VScode远程开发;",[53,117942,117943,117944],{},"缺点：",[50,117945,117946],{},[53,117947,117948],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[14,117950,117951],{},[1445,117952],{"alt":18,"src":117953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[67,117955,117957],{"id":117956},"_232-安装教程","2.3.2 安装教程",[21982,117959,117961],{"id":117960},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[50,117963,117964],{},[53,117965,117966],{},"方法一(图形界面)",[14,117968,117969,117970,24597],{},"用Win+R输入",[93,117971,117972],{},"appwiz.cpl",[14,117974,117975],{},[1445,117976],{"alt":18,"src":117977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[14,117979,117980,117981,117984,117985,26452],{},"点击OK进入 ",[256,117982,117983],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[256,117986,117987],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[14,117989,117990],{},[1445,117991],{"alt":18,"src":117992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[14,117994,117995,117996,100997,117999,118002],{},"选择 ",[256,117997,117998],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[256,118000,118001],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[14,118004,118005],{},[1445,118006],{"alt":18,"src":118007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[50,118009,118010],{"start":19},[53,118011,118012],{},"方法二(命令行)",[87,118014,118018],{"className":118015,"code":118016,"language":118017,"meta":18,"style":18},"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",[93,118019,118020,118025,118030,118035],{"__ignoreMap":18},[96,118021,118022],{"class":98,"line":99},[96,118023,118024],{},"# 开启 Linux 子系统\n",[96,118026,118027],{"class":98,"line":19},[96,118028,118029],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[96,118031,118032],{"class":98,"line":1162},[96,118033,118034],{},"# 开启虚拟机平台\n",[96,118036,118037],{"class":98,"line":1177},[96,118038,118039],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[21982,118041,118043],{"id":118042},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[14,118045,118046],{},"用管理员权限打开powershell",[14,118048,118049],{},[1445,118050],{"alt":18,"src":118051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[14,118053,118054],{},"升级WSL并设置默认版本为WSL2",[87,118056,118058],{"className":118015,"code":118057,"language":118017,"meta":18,"style":18},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[93,118059,118060,118065,118070,118075],{"__ignoreMap":18},[96,118061,118062],{"class":98,"line":99},[96,118063,118064],{},"# 更新 wsl\n",[96,118066,118067],{"class":98,"line":19},[96,118068,118069],{},"wsl --update\n",[96,118071,118072],{"class":98,"line":1162},[96,118073,118074],{},"# 将 wsl 版本设置为 wsl2\n",[96,118076,118077],{"class":98,"line":1177},[96,118078,118079],{},"wsl --set-default-version 2\n",[21982,118081,118083],{"id":118082},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[50,118085,118086],{},[53,118087,118088],{},"方式一(商店下载)",[14,118090,118091],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[14,118093,118094],{},[1445,118095],{"alt":18,"src":118096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[50,118098,118099],{"start":19},[53,118100,118101],{},"方式二(命令行安装)",[87,118103,118105],{"className":118015,"code":118104,"language":118017,"meta":18,"style":18},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[93,118106,118107,118112,118117],{"__ignoreMap":18},[96,118108,118109],{"class":98,"line":99},[96,118110,118111],{},"# 列出可安装的 Linux 版本\n",[96,118113,118114],{"class":98,"line":19},[96,118115,118116],{},"#（需要科学手段）\n",[96,118118,118119],{"class":98,"line":1162},[96,118120,118121],{},"wsl --list --online\n",[14,118123,118124],{},[1445,118125],{"alt":18,"src":118126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[14,118128,118129],{},"选择对应发行版并安装",[87,118131,118133],{"className":118015,"code":118132,"language":118017,"meta":18,"style":18},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[93,118134,118135,118140],{"__ignoreMap":18},[96,118136,118137],{"class":98,"line":99},[96,118138,118139],{},"# Ubuntu安装完毕后需要重启系统\n",[96,118141,118142],{"class":98,"line":19},[96,118143,118144],{},"wsl --install -d Ubuntu-24.04\n",[21982,118146,118148],{"id":118147},"_2324-查看系统状态","2.3.2.4 查看系统状态",[87,118150,118152],{"className":118015,"code":118151,"language":118017,"meta":18,"style":18},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[93,118153,118154,118159,118164,118169,118174,118178,118182,118187,118192,118197],{"__ignoreMap":18},[96,118155,118156],{"class":98,"line":99},[96,118157,118158],{},"# 查看 wsl\n",[96,118160,118161],{"class":98,"line":19},[96,118162,118163],{},"wsl -l\n",[96,118165,118166],{"class":98,"line":1162},[96,118167,118168],{},"# 查看 wsl 运行版本或模式\n",[96,118170,118171],{"class":98,"line":1177},[96,118172,118173],{},"wsl -l -v\n",[96,118175,118176],{"class":98,"line":1183},[96,118177,2383],{"emptyLinePlaceholder":23},[96,118179,118180],{"class":98,"line":1197},[96,118181,2383],{"emptyLinePlaceholder":23},[96,118183,118184],{"class":98,"line":1203},[96,118185,118186],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[96,118188,118189],{"class":98,"line":1294},[96,118190,118191],{},"wsl --set-version \u003Cdistro> 2\n",[96,118193,118194],{"class":98,"line":1300},[96,118195,118196],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[96,118198,118199],{"class":98,"line":1312},[96,118200,118201],{},"wsl --unregister \u003Cdistro>\n",[14,118203,118204],{},"输出Version为2即正常",[14,118206,118207],{},[1445,118208],{"alt":18,"src":118209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[21982,118211,118213],{"id":118212},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[14,118215,118216],{},"直接在Powershell里输入wsl命令进入子系统",[87,118218,118220],{"className":118015,"code":118219,"language":118017,"meta":18,"style":18},"# 进入子系统\nwsl\n",[93,118221,118222,118227],{"__ignoreMap":18},[96,118223,118224],{"class":98,"line":99},[96,118225,118226],{},"# 进入子系统\n",[96,118228,118229],{"class":98,"line":19},[96,118230,118231],{},"wsl\n",[14,118233,118234],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[14,118236,118237],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[14,118239,118240],{},[1445,118241],{"alt":18,"src":118242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[67,118244,118246],{"id":118245},"_233-配置各种环境","2.3.3 配置各种环境",[21982,118248,118250],{"id":118249},"_2331-换源","2.3.3.1 换源",[14,118252,118253],{},"(同实体机LINUX，往下找教程)",[21982,118255,118257],{"id":118256},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[22894,118259,118261],{"id":118260},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[14,118263,118264],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[14,118266,118267],{},[1445,118268],{"alt":18,"src":118269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[14,118271,118272],{},[1445,118273],{"alt":18,"src":118274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[22894,118276,118278],{"id":118277},"_23322-cuda","2.3.3.2.2 CUDA",[14,118280,118281,118282],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[345,118283,118284],{"href":118284,"rel":118285},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[23850],[14,118287,118288,118291],{},[1445,118289],{"alt":18,"src":118290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[1445,118292],{"alt":18,"src":118293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[14,118295,118296],{},"在下方的网站，选择合适的版本。",[14,118298,118299,118300],{},"WSL2 专属 CUDA 指南：",[345,118301,118302],{"href":118302,"rel":118303},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[23850],[14,118305,118306],{},[256,118307,118308],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[14,118310,118311],{},[1445,118312],{"alt":18,"src":118313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[14,118315,118316],{},"挨行敲一遍",[14,118318,118319],{},[1445,118320],{"alt":18,"src":118321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[14,118323,118324,118325,118328],{},"敲完后，输入",[93,118326,118327],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[14,118330,118331],{},[1445,118332],{"alt":18,"src":118333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[14,118335,118336,118337,118340],{},"（请详看下方教程的",[256,118338,118339],{},"安装CUDA的配置环境来看","如何配置环境）",[22894,118342,118344],{"id":118343},"_23323-cudnn","2.3.3.2.3 cuDNN",[14,118346,118253],{},[14,118348,118349],{},[1445,118350],{"alt":18,"src":118351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[21982,118353,118355],{"id":118354},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[14,118357,118358],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[14,118360,118361],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[14,118363,118364],{},[1445,118365],{"alt":18,"src":118366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[14,118368,118369],{},"连接WSL2",[14,118371,118372],{},[1445,118373],{"alt":18,"src":118374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[14,118376,118377],{},"远程开发成功。",[14,118379,118380],{},[1445,118381],{"alt":18,"src":118382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[14,118384,118385],{},[1445,118386],{"alt":18,"src":118387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[14,118389,118390],{},[1445,118391],{"alt":18,"src":118392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[21982,118394,118396],{"id":118395},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[14,118398,118399],{},[1445,118400],{"alt":18,"src":118401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[21982,118403,118405],{"id":118404},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[87,118407,118409],{"className":117275,"code":118408,"language":117277,"meta":18,"style":18},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[93,118410,118411,118419,118427,118438,118442],{"__ignoreMap":18},[96,118412,118413,118415,118417],{"class":98,"line":99},[96,118414,24555],{"class":1946},[96,118416,117296],{"class":211},[96,118418,26221],{"class":211},[96,118420,118421,118423,118425],{"class":98,"line":19},[96,118422,24555],{"class":1946},[96,118424,117296],{"class":211},[96,118426,117312],{"class":211},[96,118428,118429,118431,118433,118435],{"class":98,"line":1162},[96,118430,24555],{"class":1946},[96,118432,117296],{"class":211},[96,118434,23819],{"class":211},[96,118436,118437],{"class":211}," mesa-utils\n",[96,118439,118440],{"class":98,"line":1177},[96,118441,2383],{"emptyLinePlaceholder":23},[96,118443,118444],{"class":98,"line":1183},[96,118445,118446],{"class":165},"#然后重启wsl2即可\n",[5110,118448,118449],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":18,"searchDepth":19,"depth":19,"links":118451},[118452,118453,118458],{"id":117729,"depth":19,"text":117730},{"id":117742,"depth":19,"text":117743,"children":118454},[118455,118456,118457],{"id":117746,"depth":1162,"text":117747},{"id":117793,"depth":1162,"text":117794},{"id":117854,"depth":1162,"text":117855},{"id":117890,"depth":19,"text":117891,"children":118459},[118460,118461,118462],{"id":117894,"depth":1162,"text":117895},{"id":117956,"depth":1162,"text":117957},{"id":118245,"depth":1162,"text":118246},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117721,"description":23361},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118469,"title":118470,"body":118471,"description":23361,"extension":21,"meta":121407,"navigation":23,"path":121408,"seo":121409,"stem":121410,"__hash__":121411},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118472,"toc":121379},[118473,118476,118480,118486,118490,118496,118500,118688,118691,118696,118700,118704,118707,118710,118716,118721,118724,118727,118732,118765,118770,118774,118851,118854,118859,118863,118866,118905,118908,118917,118935,118940,118947,119064,119069,119072,119099,119104,119108,119117,119167,119174,119178,119181,119195,119202,119236,119241,119245,119268,119271,119276,119280,119283,119286,119289,119331,119335,119338,119341,119382,119386,119390,119393,119398,119403,119406,119429,119432,119440,119445,119448,119453,119458,119461,119466,119470,119475,119498,119503,119565,119573,119578,119583,119586,119591,119594,119599,119604,119622,119627,119633,119638,119652,119656,119659,119662,119665,119708,119711,119716,119817,119820,119825,119829,119833,119870,119874,119878,119882,119928,119932,119977,119981,119988,119996,120051,120054,120131,120134,120157,120161,120164,120169,120174,120182,120185,120190,120195,120200,120203,120208,120217,120220,120225,120228,120299,120304,120307,120312,120315,120320,120323,120328,120331,120336,120341,120344,120419,120422,120435,120440,120443,120457,120460,120489,120494,120523,120526,120531,120535,120540,120549,120552,120557,120560,120565,120568,120571,120576,120579,120584,120589,120592,120597,120600,120725,120730,120760,120763,120768,120773,120790,120793,120836,120839,120866,120871,120884,121027,121031,121036,121050,121053,121104,121107,121137,121140,121156,121161,121175,121178,121245,121250,121259,121264,121267,121279,121284,121291,121315,121318,121323,121326,121345,121350,121357,121369,121376],[10,118474,118470],{"id":118475},"_3-安装必备配置",[38,118477,118479],{"id":118478},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[87,118481,118484],{"className":118482,"code":118483,"language":5171},[5169],"  打开下方网站（注意，该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",[93,118485,118483],{"__ignoreMap":18},[67,118487,118489],{"id":118488},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[87,118491,118494],{"className":118492,"code":118493,"language":5171},[5169],"  输入以下命令\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",[93,118495,118493],{"__ignoreMap":18},[67,118497,118499],{"id":118498},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[87,118501,118505],{"className":118502,"code":118503,"language":118504,"meta":18,"style":18},"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",[93,118506,118507,118515,118526,118538,118552,118556,118566,118571,118575,118579,118584,118588,118600,118604,118609,118613,118624,118628,118644,118648,118659,118663,118668,118672,118680],{"__ignoreMap":18},[96,118508,118509,118511,118513],{"class":98,"line":99},[96,118510,24555],{"class":1946},[96,118512,117296],{"class":211},[96,118514,26221],{"class":211},[96,118516,118517,118519,118521,118523],{"class":98,"line":19},[96,118518,24555],{"class":1946},[96,118520,117296],{"class":211},[96,118522,23819],{"class":211},[96,118524,118525],{"class":211}," vim\n",[96,118527,118528,118530,118533,118535],{"class":98,"line":1162},[96,118529,24555],{"class":1946},[96,118531,118532],{"class":211}," rm",[96,118534,25304],{"class":155},[96,118536,118537],{"class":211}," \u002Fetc\u002Fapt\u002Fsources.list\n",[96,118539,118540,118542,118544,118546,118549],{"class":98,"line":1177},[96,118541,24555],{"class":1946},[96,118543,118532],{"class":211},[96,118545,25304],{"class":155},[96,118547,118548],{"class":211}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[96,118550,118551],{"class":155},"**\n",[96,118553,118554],{"class":98,"line":1183},[96,118555,2383],{"emptyLinePlaceholder":23},[96,118557,118558,118560,118563],{"class":98,"line":1197},[96,118559,24555],{"class":1946},[96,118561,118562],{"class":211}," vim",[96,118564,118565],{"class":211}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[96,118567,118568],{"class":98,"line":1203},[96,118569,118570],{"class":211},"```\n",[96,118572,118573],{"class":98,"line":1294},[96,118574,2383],{"emptyLinePlaceholder":23},[96,118576,118577],{"class":98,"line":1300},[96,118578,2383],{"emptyLinePlaceholder":23},[96,118580,118581],{"class":98,"line":1312},[96,118582,118583],{"class":1946},"选择好Ubuntu版本后，复制下方的内容。\n",[96,118585,118586],{"class":98,"line":1595},[96,118587,2383],{"emptyLinePlaceholder":23},[96,118589,118590,118592,118595,118598],{"class":98,"line":1600},[96,118591,333],{"class":102},[96,118593,118594],{"class":211},"[](",[96,118596,118597],{"class":1946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[96,118599,113],{"class":211},[96,118601,118602],{"class":98,"line":1606},[96,118603,2383],{"emptyLinePlaceholder":23},[96,118605,118606],{"class":98,"line":1611},[96,118607,118608],{"class":1946},"粘贴进去\n",[96,118610,118611],{"class":98,"line":1625},[96,118612,2383],{"emptyLinePlaceholder":23},[96,118614,118615,118617,118619,118622],{"class":98,"line":1630},[96,118616,333],{"class":102},[96,118618,118594],{"class":211},[96,118620,118621],{"class":1946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[96,118623,113],{"class":211},[96,118625,118626],{"class":98,"line":1636},[96,118627,2383],{"emptyLinePlaceholder":23},[96,118629,118630,118633,118636,118639,118641],{"class":98,"line":1657},[96,118631,118632],{"class":1946},"按一下ESC，然后英文冒号，输入",[96,118634,118635],{"class":211}," `",[96,118637,118638],{"class":1946},":wq!",[96,118640,1079],{"class":211},[96,118642,118643],{"class":1946},"然后回车\n",[96,118645,118646],{"class":98,"line":1662},[96,118647,2383],{"emptyLinePlaceholder":23},[96,118649,118650,118652,118654,118657],{"class":98,"line":1676},[96,118651,333],{"class":102},[96,118653,118594],{"class":211},[96,118655,118656],{"class":1946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[96,118658,113],{"class":211},[96,118660,118661],{"class":98,"line":1681},[96,118662,2383],{"emptyLinePlaceholder":23},[96,118664,118665],{"class":98,"line":1710},[96,118666,118667],{"class":1946},"输入以下命令\n",[96,118669,118670],{"class":98,"line":1715},[96,118671,2383],{"emptyLinePlaceholder":23},[96,118673,118674,118677],{"class":98,"line":1732},[96,118675,118676],{"class":211},"```",[96,118678,118679],{"class":1946},"Bash\n",[96,118681,118682,118684,118686],{"class":98,"line":1737},[96,118683,24555],{"class":1946},[96,118685,117296],{"class":211},[96,118687,26221],{"class":211},[14,118689,118690],{},"这里被替换成对应学校则成功",[14,118692,118693],{},[1445,118694],{"alt":18,"src":118695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[38,118697,118699],{"id":118698},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[67,118701,118703],{"id":118702},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[14,118705,118706],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[14,118708,118709],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[14,118711,118712],{},[345,118713,118714],{"href":118714,"rel":118715},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[23850],[14,118717,118718],{},[1445,118719],{"alt":18,"src":118720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[14,118722,118723],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[14,118725,118726],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[14,118728,118729],{},[1445,118730],{"alt":18,"src":118731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[87,118733,118735],{"className":117275,"code":118734,"language":117277,"meta":18,"style":18},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[93,118736,118737,118742,118749,118754],{"__ignoreMap":18},[96,118738,118739],{"class":98,"line":99},[96,118740,118741],{"class":165},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[96,118743,118744,118746],{"class":98,"line":19},[96,118745,101255],{"class":155},[96,118747,118748],{"class":211}," ~\u002FDownloads\n",[96,118750,118751],{"class":98,"line":1162},[96,118752,118753],{"class":165},"#下方chrome安装包名不一定是这个，根据名字来看\n",[96,118755,118756,118758,118760,118762],{"class":98,"line":1177},[96,118757,24555],{"class":1946},[96,118759,117296],{"class":211},[96,118761,23819],{"class":211},[96,118763,118764],{"class":211}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[14,118766,118767],{},[1445,118768],{"alt":18,"src":118769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[67,118771,118773],{"id":118772},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[87,118775,118777],{"className":117275,"code":118776,"language":117277,"meta":18,"style":18},"# 老版\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",[93,118778,118779,118784,118792,118803,118808,118812,118817,118827,118835,118846],{"__ignoreMap":18},[96,118780,118781],{"class":98,"line":99},[96,118782,118783],{"class":165},"# 老版\n",[96,118785,118786,118788,118790],{"class":98,"line":19},[96,118787,24555],{"class":1946},[96,118789,117296],{"class":211},[96,118791,26221],{"class":211},[96,118793,118794,118796,118798,118800],{"class":98,"line":1162},[96,118795,24555],{"class":1946},[96,118797,117296],{"class":211},[96,118799,23819],{"class":211},[96,118801,118802],{"class":211}," neofetch\n",[96,118804,118805],{"class":98,"line":1177},[96,118806,118807],{"class":1946},"neofetch\n",[96,118809,118810],{"class":98,"line":1183},[96,118811,2383],{"emptyLinePlaceholder":23},[96,118813,118814],{"class":98,"line":1197},[96,118815,118816],{"class":165},"# 新版\n",[96,118818,118819,118821,118824],{"class":98,"line":1203},[96,118820,24555],{"class":1946},[96,118822,118823],{"class":211}," add-apt-repository",[96,118825,118826],{"class":211}," ppa:zhangsongcui3371\u002Ffastfetch\n",[96,118828,118829,118831,118833],{"class":98,"line":1294},[96,118830,24555],{"class":1946},[96,118832,117296],{"class":211},[96,118834,26221],{"class":211},[96,118836,118837,118839,118841,118843],{"class":98,"line":1300},[96,118838,24555],{"class":1946},[96,118840,117296],{"class":211},[96,118842,23819],{"class":211},[96,118844,118845],{"class":211}," fastfetch\n",[96,118847,118848],{"class":98,"line":1312},[96,118849,118850],{"class":1946},"fastfetch\n",[14,118852,118853],{},"这里显示，一共有3162个debian的程序，7个snap程序",[14,118855,118856],{},[1445,118857],{"alt":18,"src":118858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[67,118860,118862],{"id":118861},"_323-移除snap应用","3.2.3 移除snap应用",[14,118864,118865],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[87,118867,118869],{"className":117275,"code":118868,"language":117277,"meta":18,"style":18},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[93,118870,118871,118883,118894],{"__ignoreMap":18},[96,118872,118873,118875,118877,118880],{"class":98,"line":99},[96,118874,24555],{"class":1946},[96,118876,26492],{"class":211},[96,118878,118879],{"class":211}," disable",[96,118881,118882],{"class":211}," snapd.service\n",[96,118884,118885,118887,118889,118891],{"class":98,"line":19},[96,118886,24555],{"class":1946},[96,118888,26492],{"class":211},[96,118890,118879],{"class":211},[96,118892,118893],{"class":211}," snapd.socket\n",[96,118895,118896,118898,118900,118902],{"class":98,"line":1162},[96,118897,24555],{"class":1946},[96,118899,26492],{"class":211},[96,118901,118879],{"class":211},[96,118903,118904],{"class":211}," snapd.seeded.service\n",[14,118906,118907],{},"然后查看snap应用列表",[14,118909,118910,118911,118916],{},"根据你安装的选择不同（最小安装或普通安装），有",[345,118912,118915],{"href":118913,"rel":118914},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[23850],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[87,118918,118920],{"className":117275,"code":118919,"language":117277,"meta":18,"style":18},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[93,118921,118922,118927],{"__ignoreMap":18},[96,118923,118924],{"class":98,"line":99},[96,118925,118926],{"class":165},"# 查询当前系统上snap安装了哪些app\n",[96,118928,118929,118932],{"class":98,"line":19},[96,118930,118931],{"class":1946},"snap",[96,118933,118934],{"class":211}," list\n",[14,118936,118937],{},[1445,118938],{"alt":18,"src":118939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[14,118941,118942,118943,118946],{},"卸载掉图中所有应用，按照 ",[256,118944,118945],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[87,118948,118950],{"className":117275,"code":118949,"language":117277,"meta":18,"style":18},"#移除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",[93,118951,118952,118957,118969,118974,118985,118990,119001,119006,119017,119022,119026,119031,119042,119053],{"__ignoreMap":18},[96,118953,118954],{"class":98,"line":99},[96,118955,118956],{"class":165},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[96,118958,118959,118961,118964,118966],{"class":98,"line":19},[96,118960,24555],{"class":1946},[96,118962,118963],{"class":211}," snap",[96,118965,26058],{"class":211},[96,118967,118968],{"class":211}," snap-store\n",[96,118970,118971],{"class":98,"line":1162},[96,118972,118973],{"class":165},"#移除firefox浏览器\n",[96,118975,118976,118978,118980,118982],{"class":98,"line":1177},[96,118977,24555],{"class":1946},[96,118979,118963],{"class":211},[96,118981,26058],{"class":211},[96,118983,118984],{"class":211}," firefox\n",[96,118986,118987],{"class":98,"line":1183},[96,118988,118989],{"class":165},"#移除gnome-42-2204\n",[96,118991,118992,118994,118996,118998],{"class":98,"line":1197},[96,118993,24555],{"class":1946},[96,118995,118963],{"class":211},[96,118997,26058],{"class":211},[96,118999,119000],{"class":211}," gnome-42-2204\n",[96,119002,119003],{"class":98,"line":1203},[96,119004,119005],{"class":165},"#移除gtk-common-themes\n",[96,119007,119008,119010,119012,119014],{"class":98,"line":1294},[96,119009,24555],{"class":1946},[96,119011,118963],{"class":211},[96,119013,26058],{"class":211},[96,119015,119016],{"class":211}," gtk-common-themes\n",[96,119018,119019],{"class":98,"line":1300},[96,119020,119021],{"class":165},"#移除其它...\n",[96,119023,119024],{"class":98,"line":1312},[96,119025,2657],{"class":106},[96,119027,119028],{"class":98,"line":1595},[96,119029,119030],{"class":165},"#移除core22,bare以及snapd\n",[96,119032,119033,119035,119037,119039],{"class":98,"line":1600},[96,119034,24555],{"class":1946},[96,119036,118963],{"class":211},[96,119038,26058],{"class":211},[96,119040,119041],{"class":211}," core22\n",[96,119043,119044,119046,119048,119050],{"class":98,"line":1606},[96,119045,24555],{"class":1946},[96,119047,118963],{"class":211},[96,119049,26058],{"class":211},[96,119051,119052],{"class":211}," bare\n",[96,119054,119055,119057,119059,119061],{"class":98,"line":1611},[96,119056,24555],{"class":1946},[96,119058,118963],{"class":211},[96,119060,26058],{"class":211},[96,119062,119063],{"class":211}," snapd\n",[14,119065,119066],{},[1445,119067],{"alt":18,"src":119068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[14,119070,119071],{},"输入以下命令查看是否还有snap包",[87,119073,119075],{"className":117275,"code":119074,"language":117277,"meta":18,"style":18},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[93,119076,119077,119083,119087,119091,119095],{"__ignoreMap":18},[96,119078,119079,119081],{"class":98,"line":99},[96,119080,118931],{"class":1946},[96,119082,118934],{"class":211},[96,119084,119085],{"class":98,"line":19},[96,119086,118783],{"class":165},[96,119088,119089],{"class":98,"line":1162},[96,119090,118807],{"class":1946},[96,119092,119093],{"class":98,"line":1177},[96,119094,118816],{"class":165},[96,119096,119097],{"class":98,"line":1183},[96,119098,118850],{"class":1946},[14,119100,119101],{},[1445,119102],{"alt":18,"src":119103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[67,119105,119107],{"id":119106},"_324-移除snap","3.2.4 移除snap",[14,119109,119110,119111,119116],{},"在删除掉",[345,119112,119115],{"href":119113,"rel":119114},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[23850],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[87,119118,119120],{"className":117275,"code":119119,"language":117277,"meta":18,"style":18}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[93,119121,119122,119127,119140,119145,119156],{"__ignoreMap":18},[96,119123,119124],{"class":98,"line":99},[96,119125,119126],{"class":165}," #使用apt移除掉snap\n",[96,119128,119129,119131,119133,119135,119138],{"class":98,"line":19},[96,119130,24555],{"class":1946},[96,119132,117296],{"class":211},[96,119134,117604],{"class":211},[96,119136,119137],{"class":155}," --purge",[96,119139,119063],{"class":211},[96,119141,119142],{"class":98,"line":1162},[96,119143,119144],{"class":165},"#移除snapd的一些目录\n",[96,119146,119147,119149,119151,119153],{"class":98,"line":1177},[96,119148,24555],{"class":1946},[96,119150,118532],{"class":211},[96,119152,25304],{"class":155},[96,119154,119155],{"class":211}," \u002Fvar\u002Fcache\u002Fsnapd\n",[96,119157,119158,119160,119162,119164],{"class":98,"line":1183},[96,119159,24555],{"class":1946},[96,119161,118532],{"class":211},[96,119163,25304],{"class":155},[96,119165,119166],{"class":211}," ~\u002Fsnap\n",[14,119168,119169,119170,119173],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[93,119171,119172],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[67,119175,119177],{"id":119176},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[14,119179,119180],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[87,119182,119184],{"className":117275,"code":119183,"language":117277,"meta":18,"style":18},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[93,119185,119186],{"__ignoreMap":18},[96,119187,119188,119190,119192],{"class":98,"line":99},[96,119189,24555],{"class":1946},[96,119191,118562],{"class":211},[96,119193,119194],{"class":211}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[14,119196,119197,119198,119201],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[93,119199,119200],{},":wq"," 回车",[87,119203,119205],{"className":117275,"code":119204,"language":117277,"meta":18,"style":18},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[93,119206,119207,119214,119228],{"__ignoreMap":18},[96,119208,119209,119212],{"class":98,"line":99},[96,119210,119211],{"class":1946},"Package:",[96,119213,119063],{"class":211},[96,119215,119216,119219,119222,119225],{"class":98,"line":19},[96,119217,119218],{"class":1946},"Pin:",[96,119220,119221],{"class":211}," release",[96,119223,119224],{"class":211}," a=",[96,119226,119227],{"class":155},"*\n",[96,119229,119230,119233],{"class":98,"line":1162},[96,119231,119232],{"class":1946},"Pin-Priority:",[96,119234,119235],{"class":155}," -10\n",[14,119237,119238],{},[1445,119239],{"alt":18,"src":119240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[67,119242,119244],{"id":119243},"_326-测试是否成功","3.2.6 测试是否成功",[87,119246,119248],{"className":117275,"code":119247,"language":117277,"meta":18,"style":18},"sudo apt update\nsudo apt install firefox\n",[93,119249,119250,119258],{"__ignoreMap":18},[96,119251,119252,119254,119256],{"class":98,"line":99},[96,119253,24555],{"class":1946},[96,119255,117296],{"class":211},[96,119257,26221],{"class":211},[96,119259,119260,119262,119264,119266],{"class":98,"line":19},[96,119261,24555],{"class":1946},[96,119263,117296],{"class":211},[96,119265,23819],{"class":211},[96,119267,118984],{"class":211},[14,119269,119270],{},"这里提示snapd无法被安装，就证明成功了",[14,119272,119273],{},[1445,119274],{"alt":18,"src":119275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[67,119277,119279],{"id":119278},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[14,119281,119282],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[14,119284,119285],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[14,119287,119288],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[87,119290,119292],{"className":117275,"code":119291,"language":117277,"meta":18,"style":18},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[93,119293,119294,119299,119308,119313,119321],{"__ignoreMap":18},[96,119295,119296],{"class":98,"line":99},[96,119297,119298],{"class":165},"# 添加Mozilla提供的源\n",[96,119300,119301,119303,119305],{"class":98,"line":19},[96,119302,24555],{"class":1946},[96,119304,118823],{"class":211},[96,119306,119307],{"class":211}," ppa:mozillateam\u002Fppa\n",[96,119309,119310],{"class":98,"line":1162},[96,119311,119312],{"class":165},"# 安装Firefox\n",[96,119314,119315,119317,119319],{"class":98,"line":1177},[96,119316,24555],{"class":1946},[96,119318,117296],{"class":211},[96,119320,26221],{"class":211},[96,119322,119323,119325,119327,119329],{"class":98,"line":1183},[96,119324,24555],{"class":1946},[96,119326,117296],{"class":211},[96,119328,23819],{"class":211},[96,119330,118984],{"class":211},[67,119332,119334],{"id":119333},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[14,119336,119337],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[14,119339,119340],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[87,119342,119344],{"className":117275,"code":119343,"language":117277,"meta":18,"style":18},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[93,119345,119346,119351,119361,119369,119373],{"__ignoreMap":18},[96,119347,119348],{"class":98,"line":99},[96,119349,119350],{"class":165},"#删掉禁止安装snap的配置文件\n",[96,119352,119353,119355,119357,119359],{"class":98,"line":19},[96,119354,24555],{"class":1946},[96,119356,118532],{"class":211},[96,119358,25304],{"class":155},[96,119360,119194],{"class":211},[96,119362,119363,119365,119367],{"class":98,"line":1162},[96,119364,24555],{"class":1946},[96,119366,117296],{"class":211},[96,119368,26221],{"class":211},[96,119370,119371],{"class":98,"line":1177},[96,119372,2383],{"emptyLinePlaceholder":23},[96,119374,119375,119377,119379],{"class":98,"line":1183},[96,119376,24555],{"class":1946},[96,119378,117296],{"class":211},[96,119380,119381],{"class":211}," dist-update\n",[38,119383,119385],{"id":119384},"_33-中文输入法","3.3 中文输入法",[67,119387,119389],{"id":119388},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[14,119391,119392],{},"官网下载搜狗输入法",[14,119394,119395],{},[1445,119396],{"alt":18,"src":119397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[14,119399,119400],{},[1445,119401],{"alt":18,"src":119402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[14,119404,119405],{},"打开终端输入如下",[87,119407,119409],{"className":117275,"code":119408,"language":117277,"meta":18,"style":18},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[93,119410,119411,119418],{"__ignoreMap":18},[96,119412,119413,119415],{"class":98,"line":99},[96,119414,101255],{"class":155},[96,119416,119417],{"class":211}," ~\u002FDownloads\u002F\n",[96,119419,119420,119422,119424,119426],{"class":98,"line":19},[96,119421,24555],{"class":1946},[96,119423,117296],{"class":211},[96,119425,23819],{"class":211},[96,119427,119428],{"class":211}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[14,119430,119431],{},"打开Fcitx",[14,119433,119434,119437],{},[1445,119435],{"alt":18,"src":119436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[1445,119438],{"alt":18,"src":119439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[14,119441,119442],{},[1445,119443],{"alt":18,"src":119444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[14,119446,119447],{},"添加搜狗输入法",[14,119449,119450],{},[1445,119451],{"alt":18,"src":119452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[14,119454,119455],{},[1445,119456],{"alt":18,"src":119457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[14,119459,119460],{},"将搜狗输入法设置为唯一输入法",[14,119462,119463],{},[1445,119464],{"alt":18,"src":119465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[67,119467,119469],{"id":119468},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[50,119471,119472],{},[53,119473,119474],{},"卸载旧输入法",[87,119476,119478],{"className":118502,"code":119477,"language":118504,"meta":18,"style":18},"sudo apt purge fcitx* ibus*\n",[93,119479,119480],{"__ignoreMap":18},[96,119481,119482,119484,119486,119488,119491,119493,119496],{"class":98,"line":99},[96,119483,24555],{"class":1946},[96,119485,117296],{"class":211},[96,119487,117637],{"class":211},[96,119489,119490],{"class":211}," fcitx",[96,119492,562],{"class":155},[96,119494,119495],{"class":211}," ibus",[96,119497,119227],{"class":155},[50,119499,119500],{"start":19},[53,119501,119502],{},"安装Fcitx5",[87,119504,119506],{"className":117275,"code":119505,"language":117277,"meta":18,"style":18},"# 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",[93,119507,119508,119513,119527,119531,119536,119545,119553],{"__ignoreMap":18},[96,119509,119510],{"class":98,"line":99},[96,119511,119512],{"class":165},"# Ubuntu22.04及以上、Debian12及以上\n",[96,119514,119515,119517,119519,119521,119524],{"class":98,"line":19},[96,119516,24555],{"class":1946},[96,119518,117296],{"class":211},[96,119520,23819],{"class":211},[96,119522,119523],{"class":211}," fcitx5",[96,119525,119526],{"class":211}," fcitx5-chinese-addons\n",[96,119528,119529],{"class":98,"line":1162},[96,119530,2383],{"emptyLinePlaceholder":23},[96,119532,119533],{"class":98,"line":1177},[96,119534,119535],{"class":165},"# Ubuntu20.04\n",[96,119537,119538,119540,119542],{"class":98,"line":1183},[96,119539,24555],{"class":1946},[96,119541,118823],{"class":211},[96,119543,119544],{"class":211}," ppa:zhsj\u002Ffcitx5\n",[96,119546,119547,119549,119551],{"class":98,"line":1197},[96,119548,24555],{"class":1946},[96,119550,117296],{"class":211},[96,119552,26221],{"class":211},[96,119554,119555,119557,119559,119561,119563],{"class":98,"line":1203},[96,119556,24555],{"class":1946},[96,119558,117296],{"class":211},[96,119560,23819],{"class":211},[96,119562,119523],{"class":211},[96,119564,119526],{"class":211},[50,119566,119567,119570],{"start":1162},[53,119568,119569],{},"Reboot System",[53,119571,119572],{},"启动Fcitx5",[14,119574,119575],{},[1445,119576],{"alt":18,"src":119577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[50,119579,119580],{"start":1183},[53,119581,119582],{},"修改一些设置",[14,119584,119585],{},"将Pinyin和Keyboard - English US加入到左边。",[14,119587,119588],{},[1445,119589],{"alt":18,"src":119590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[14,119592,119593],{},"添加快捷键以便于更好切换中英文",[14,119595,119596],{},[1445,119597],{"alt":18,"src":119598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[50,119600,119601],{"start":1197},[53,119602,119603],{},"重启",[87,119605,119607],{"className":118502,"code":119606,"language":118504,"meta":18,"style":18},"sudo shutdown -r now\n",[93,119608,119609],{"__ignoreMap":18},[96,119610,119611,119613,119616,119619],{"class":98,"line":99},[96,119612,24555],{"class":1946},[96,119614,119615],{"class":211}," shutdown",[96,119617,119618],{"class":155}," -r",[96,119620,119621],{"class":211}," now\n",[50,119623,119624],{"start":1203},[53,119625,119626],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[14,119628,119629],{},[345,119630,119631],{"href":119631,"rel":119632},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[23850],[50,119634,119635],{"start":1294},[53,119636,119637],{},"再重启",[87,119639,119640],{"className":118502,"code":119606,"language":118504,"meta":18,"style":18},[93,119641,119642],{"__ignoreMap":18},[96,119643,119644,119646,119648,119650],{"class":98,"line":99},[96,119645,24555],{"class":1946},[96,119647,119615],{"class":211},[96,119649,119618],{"class":155},[96,119651,119621],{"class":211},[38,119653,119655],{"id":119654},"_34-pip3源替换","3.4 pip3源替换",[14,119657,119658],{},"非Debian系发行版需要做。",[14,119660,119661],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[14,119663,119664],{},"使用dnf的系统也可能不用做。",[87,119666,119668],{"className":117275,"code":119667,"language":117277,"meta":18,"style":18},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[93,119669,119670,119675,119682,119687,119692],{"__ignoreMap":18},[96,119671,119672],{"class":98,"line":99},[96,119673,119674],{"class":165},"# 检查是否已安装 pip\n",[96,119676,119677,119680],{"class":98,"line":19},[96,119678,119679],{"class":1946},"pip3",[96,119681,26272],{"class":155},[96,119683,119684],{"class":98,"line":1162},[96,119685,119686],{"class":165},"# 如果未安装，先安装 pip3（见下方）\n",[96,119688,119689],{"class":98,"line":1177},[96,119690,119691],{"class":165},"# 配置 pip 使用清华源\n",[96,119693,119694,119696,119699,119702,119705],{"class":98,"line":1183},[96,119695,119679],{"class":1946},[96,119697,119698],{"class":211}," config",[96,119700,119701],{"class":211}," set",[96,119703,119704],{"class":211}," global.index-url",[96,119706,119707],{"class":211}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[14,119709,119710],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[14,119712,119713],{},[1445,119714],{"alt":18,"src":119715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[87,119717,119719],{"className":117275,"code":119718,"language":117277,"meta":18,"style":18},"#安装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",[93,119720,119721,119726,119734,119745,119749,119754,119773,119777,119782,119794,119798,119803],{"__ignoreMap":18},[96,119722,119723],{"class":98,"line":99},[96,119724,119725],{"class":165},"#安装pip3\n",[96,119727,119728,119730,119732],{"class":98,"line":19},[96,119729,24555],{"class":1946},[96,119731,117296],{"class":211},[96,119733,26221],{"class":211},[96,119735,119736,119738,119740,119742],{"class":98,"line":1162},[96,119737,24555],{"class":1946},[96,119739,26055],{"class":211},[96,119741,23819],{"class":211},[96,119743,119744],{"class":211}," python3-pip\n",[96,119746,119747],{"class":98,"line":1177},[96,119748,2383],{"emptyLinePlaceholder":23},[96,119750,119751],{"class":98,"line":1183},[96,119752,119753],{"class":165},"#更新pip3\n",[96,119755,119756,119758,119760,119762,119764,119766,119769,119771],{"class":98,"line":1197},[96,119757,100858],{"class":1946},[96,119759,100861],{"class":155},[96,119761,100884],{"class":211},[96,119763,23819],{"class":211},[96,119765,26409],{"class":155},[96,119767,119768],{"class":211}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[96,119770,100889],{"class":155},[96,119772,100892],{"class":211},[96,119774,119775],{"class":98,"line":1203},[96,119776,2383],{"emptyLinePlaceholder":23},[96,119778,119779],{"class":98,"line":1294},[96,119780,119781],{"class":165},"#设置pip源为清华源\n",[96,119783,119784,119786,119788,119790,119792],{"class":98,"line":1300},[96,119785,119679],{"class":1946},[96,119787,119698],{"class":211},[96,119789,119701],{"class":211},[96,119791,119704],{"class":211},[96,119793,119707],{"class":211},[96,119795,119796],{"class":98,"line":1312},[96,119797,2383],{"emptyLinePlaceholder":23},[96,119799,119800],{"class":98,"line":1595},[96,119801,119802],{"class":165},"#测试\n",[96,119804,119805,119807,119809,119811,119813,119815],{"class":98,"line":1600},[96,119806,100858],{"class":1946},[96,119808,100861],{"class":155},[96,119810,100884],{"class":211},[96,119812,23819],{"class":211},[96,119814,100889],{"class":155},[96,119816,100892],{"class":211},[14,119818,119819],{},"成功的话，会看到Looking后面是tsinghua字样。",[14,119821,119822],{},[1445,119823],{"alt":18,"src":119824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[38,119826,119828],{"id":119827},"_35-显卡驱动安装","3.5 显卡驱动安装",[67,119830,119832],{"id":119831},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[87,119834,119836],{"className":118502,"code":119835,"language":118504,"meta":18,"style":18},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[93,119837,119838,119843,119858,119863],{"__ignoreMap":18},[96,119839,119840],{"class":98,"line":99},[96,119841,119842],{"class":165},"# 如果是使用apt安装的驱动\n",[96,119844,119845,119847,119849,119851,119853,119856],{"class":98,"line":19},[96,119846,24555],{"class":1946},[96,119848,26055],{"class":211},[96,119850,26058],{"class":211},[96,119852,119137],{"class":155},[96,119854,119855],{"class":211}," nvidia",[96,119857,119227],{"class":155},[96,119859,119860],{"class":98,"line":1162},[96,119861,119862],{"class":165},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[96,119864,119865,119867],{"class":98,"line":1177},[96,119866,24555],{"class":1946},[96,119868,119869],{"class":211}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[67,119871,119873],{"id":119872},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[21982,119875,119877],{"id":119876},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[22894,119879,119881],{"id":119880},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[87,119883,119885],{"className":118502,"code":119884,"language":118504,"meta":18,"style":18},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[93,119886,119887,119892,119903,119908,119918,119923],{"__ignoreMap":18},[96,119888,119889],{"class":98,"line":99},[96,119890,119891],{"class":165},"# 安装英伟达驱动\n",[96,119893,119894,119896,119898,119900],{"class":98,"line":19},[96,119895,24555],{"class":1946},[96,119897,117296],{"class":211},[96,119899,23819],{"class":211},[96,119901,119902],{"class":211}," nvidia-driver-版本号\n",[96,119904,119905],{"class":98,"line":1162},[96,119906,119907],{"class":165},"# 重启 \n",[96,119909,119910,119912,119914,119916],{"class":98,"line":1177},[96,119911,24555],{"class":1946},[96,119913,119615],{"class":211},[96,119915,119618],{"class":155},[96,119917,119621],{"class":211},[96,119919,119920],{"class":98,"line":1183},[96,119921,119922],{"class":165},"# 检查驱动是否安装成功\n",[96,119924,119925],{"class":98,"line":1197},[96,119926,119927],{"class":1946},"nvidia-smi\n",[22894,119929,119931],{"id":119930},"_35212-debian","3.5.2.1.2 Debian",[87,119933,119935],{"className":118502,"code":119934,"language":118504,"meta":18,"style":18},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[93,119936,119937,119941,119955,119959,119969,119973],{"__ignoreMap":18},[96,119938,119939],{"class":98,"line":99},[96,119940,119891],{"class":165},[96,119942,119943,119945,119947,119949,119952],{"class":98,"line":19},[96,119944,24555],{"class":1946},[96,119946,117296],{"class":211},[96,119948,23819],{"class":211},[96,119950,119951],{"class":211}," nvidia-driver",[96,119953,119954],{"class":211}," nvidia-settings\n",[96,119956,119957],{"class":98,"line":1162},[96,119958,119907],{"class":165},[96,119960,119961,119963,119965,119967],{"class":98,"line":1177},[96,119962,24555],{"class":1946},[96,119964,119615],{"class":211},[96,119966,119618],{"class":155},[96,119968,119621],{"class":211},[96,119970,119971],{"class":98,"line":1183},[96,119972,119922],{"class":165},[96,119974,119975],{"class":98,"line":1197},[96,119976,119927],{"class":1946},[21982,119978,119980],{"id":119979},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[14,119982,119983,119984,119987],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[256,119985,119986],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[14,119989,119990,119991],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23538,119992,119993],{},[256,119994,119995],{},"（也可以不禁用桌面环境，直接进行下一步。）",[87,119997,119999],{"className":118502,"code":119998,"language":118504,"meta":18,"style":18},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[93,120000,120001,120006,120016,120021,120034,120039],{"__ignoreMap":18},[96,120002,120003],{"class":98,"line":99},[96,120004,120005],{"class":165},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[96,120007,120008,120010,120013],{"class":98,"line":19},[96,120009,24555],{"class":1946},[96,120011,120012],{"class":211}," telinit",[96,120014,120015],{"class":155}," 3\n",[96,120017,120018],{"class":98,"line":1162},[96,120019,120020],{"class":165},"# ubuntu 使用下方命令\n",[96,120022,120023,120025,120028,120031],{"class":98,"line":1177},[96,120024,24555],{"class":1946},[96,120026,120027],{"class":211}," service",[96,120029,120030],{"class":211}," lightdm",[96,120032,120033],{"class":211}," stop\n",[96,120035,120036],{"class":98,"line":1183},[96,120037,120038],{"class":165},"# Fedora 使用下方命令\n",[96,120040,120041,120043,120045,120048],{"class":98,"line":1197},[96,120042,24555],{"class":1946},[96,120044,26492],{"class":211},[96,120046,120047],{"class":211}," isolate",[96,120049,120050],{"class":211}," multi-user.target\n",[14,120052,120053],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[87,120055,120057],{"className":118502,"code":120056,"language":118504,"meta":18,"style":18},"# 编译环境+准备工作\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",[93,120058,120059,120064,120075,120080,120087,120092,120104,120109,120116,120121],{"__ignoreMap":18},[96,120060,120061],{"class":98,"line":99},[96,120062,120063],{"class":165},"# 编译环境+准备工作\n",[96,120065,120066,120068,120070,120072],{"class":98,"line":19},[96,120067,24555],{"class":1946},[96,120069,117296],{"class":211},[96,120071,23819],{"class":211},[96,120073,120074],{"class":211}," build-essential\n",[96,120076,120077],{"class":98,"line":1162},[96,120078,120079],{"class":165},"# 进入到.run目录中\n",[96,120081,120082,120084],{"class":98,"line":1177},[96,120083,101255],{"class":155},[96,120085,120086],{"class":211}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[96,120088,120089],{"class":98,"line":1183},[96,120090,120091],{"class":165},"# 给驱动文件增加可执行权限：\n",[96,120093,120094,120096,120098,120101],{"class":98,"line":1197},[96,120095,24555],{"class":1946},[96,120097,24558],{"class":211},[96,120099,120100],{"class":211}," a+x",[96,120102,120103],{"class":211}," NVIDIA-Linux-x86_64-550.107.02.run\n",[96,120105,120106],{"class":98,"line":1203},[96,120107,120108],{"class":165},"# 然后执行安装：\n",[96,120110,120111,120113],{"class":98,"line":1294},[96,120112,24555],{"class":1946},[96,120114,120115],{"class":211}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[96,120117,120118],{"class":98,"line":1300},[96,120119,120120],{"class":165},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[96,120122,120123,120125,120128],{"class":98,"line":1312},[96,120124,24555],{"class":1946},[96,120126,120127],{"class":211}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[96,120129,120130],{"class":155},"  --no-opengl-files\n",[14,120132,120133],{},"安装完毕重启即可",[87,120135,120137],{"className":118502,"code":120136,"language":118504,"meta":18,"style":18},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[93,120138,120139,120143,120149,120153],{"__ignoreMap":18},[96,120140,120141],{"class":98,"line":99},[96,120142,119907],{"class":165},[96,120144,120145,120147],{"class":98,"line":19},[96,120146,24555],{"class":1946},[96,120148,26626],{"class":211},[96,120150,120151],{"class":98,"line":1162},[96,120152,119922],{"class":165},[96,120154,120155],{"class":98,"line":1177},[96,120156,119927],{"class":1946},[67,120158,120160],{"id":120159},"_353-安装cuda","3.5.3 安装CUDA",[14,120162,120163],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[14,120165,120166],{},[1445,120167],{"alt":18,"src":120168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[50,120170,120171],{},[53,120172,120173],{},"先查看显卡驱动所支持的最高CUDA版本",[87,120175,120176],{"className":118502,"code":119927,"language":118504,"meta":18,"style":18},[93,120177,120178],{"__ignoreMap":18},[96,120179,120180],{"class":98,"line":99},[96,120181,119927],{"class":1946},[14,120183,120184],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[14,120186,120187],{},[1445,120188],{"alt":18,"src":120189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[50,120191,120192],{"start":19},[53,120193,120194],{},"下载CUDA并安装CUDA",[14,120196,118281,120197],{},[345,120198,118284],{"href":118284,"rel":120199},[23850],[14,120201,120202],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[14,120204,120205],{},[1445,120206],{"alt":18,"src":120207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[14,120209,120210,120211,120216],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[345,120212,120215],{"href":120213,"rel":120214},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[23850],"Vinci机器人队单片机教程","）",[14,120218,120219],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[14,120221,120222],{},[1445,120223],{"alt":18,"src":120224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[14,120226,120227],{},"将最下方框框里的命令敲入终端",[87,120229,120231],{"className":118502,"code":120230,"language":118504,"meta":18,"style":18},"# 在当前文件夹下创建一个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",[93,120232,120233,120238,120247,120252,120259,120264,120272,120277,120288,120293],{"__ignoreMap":18},[96,120234,120235],{"class":98,"line":99},[96,120236,120237],{"class":165},"# 在当前文件夹下创建一个ttt的子文件夹\n",[96,120239,120240,120242,120244],{"class":98,"line":19},[96,120241,101245],{"class":1946},[96,120243,29195],{"class":155},[96,120245,120246],{"class":211}," .\u002Fttt\n",[96,120248,120249],{"class":98,"line":1162},[96,120250,120251],{"class":165},"# 进入ttt文件夹\n",[96,120253,120254,120256],{"class":98,"line":1177},[96,120255,101255],{"class":155},[96,120257,120258],{"class":211}," ttt\n",[96,120260,120261],{"class":98,"line":1183},[96,120262,120263],{"class":165},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[96,120265,120266,120269],{"class":98,"line":1197},[96,120267,120268],{"class":1946},"wget",[96,120270,120271],{"class":211}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[96,120273,120274],{"class":98,"line":1203},[96,120275,120276],{"class":165},"# 给予权限\n",[96,120278,120279,120281,120283,120285],{"class":98,"line":1294},[96,120280,24555],{"class":1946},[96,120282,24558],{"class":211},[96,120284,120100],{"class":211},[96,120286,120287],{"class":211}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[96,120289,120290],{"class":98,"line":1300},[96,120291,120292],{"class":165},"# 运行脚本\n",[96,120294,120295,120297],{"class":98,"line":1312},[96,120296,24555],{"class":1946},[96,120298,120287],{"class":211},[14,120300,120301],{},[1445,120302],{"alt":18,"src":120303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[14,120305,120306],{},"正在安装中：",[14,120308,120309],{},[1445,120310],{"alt":18,"src":120311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[14,120313,120314],{},"输入accept接受即可",[14,120316,120317],{},[1445,120318],{"alt":18,"src":120319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[14,120321,120322],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[14,120324,120325],{},[1445,120326],{"alt":18,"src":120327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[14,120329,120330],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[14,120332,120333],{},[1445,120334],{"alt":18,"src":120335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[50,120337,120338],{"start":1162},[53,120339,120340],{},"配置环境",[14,120342,120343],{},"根据上方确认一下路径，比如我上面红色框起来的为",[87,120345,120347],{"className":118502,"code":120346,"language":118504,"meta":18,"style":18},"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",[93,120348,120349,120365,120380],{"__ignoreMap":18},[96,120350,120351,120354,120357,120360,120363],{"class":98,"line":99},[96,120352,120353],{"class":1946},"Please",[96,120355,120356],{"class":211}," make",[96,120358,120359],{"class":211}," sure",[96,120361,120362],{"class":211}," that",[96,120364,2657],{"class":106},[96,120366,120367,120369,120372,120375,120378],{"class":98,"line":19},[96,120368,52250],{"class":1946},[96,120370,120371],{"class":211},"   PATH",[96,120373,120374],{"class":211}," includes",[96,120376,120377],{"class":211}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[96,120379,2657],{"class":106},[96,120381,120382,120384,120387,120389,120392,120395,120397,120400,120403,120406,120409,120411,120414,120416],{"class":98,"line":1162},[96,120383,52250],{"class":1946},[96,120385,120386],{"class":211},"   LD_LIBRARY_PATH",[96,120388,120374],{"class":211},[96,120390,120391],{"class":211}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[96,120393,120394],{"class":211}," or,",[96,120396,5193],{"class":211},[96,120398,120399],{"class":211}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[96,120401,120402],{"class":211}," to",[96,120404,120405],{"class":211}," \u002Fetc\u002Fld.so.conf",[96,120407,120408],{"class":211}," and",[96,120410,27209],{"class":211},[96,120412,120413],{"class":211}," ldconfig",[96,120415,64583],{"class":211},[96,120417,120418],{"class":211}," root\n",[14,120420,120421],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[87,120423,120425],{"className":118502,"code":120424,"language":118504,"meta":18,"style":18},"which nvcc\n",[93,120426,120427],{"__ignoreMap":18},[96,120428,120429,120432],{"class":98,"line":99},[96,120430,120431],{"class":155},"which",[96,120433,120434],{"class":211}," nvcc\n",[14,120436,120437],{},[1445,120438],{"alt":18,"src":120439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[14,120441,120442],{},"所以我进行以下操作：",[87,120444,120446],{"className":118502,"code":120445,"language":118504,"meta":18,"style":18},"sudo vim ~\u002F.bashrc\n",[93,120447,120448],{"__ignoreMap":18},[96,120449,120450,120452,120454],{"class":98,"line":99},[96,120451,24555],{"class":1946},[96,120453,118562],{"class":211},[96,120455,120456],{"class":211}," ~\u002F.bashrc\n",[14,120458,120459],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[87,120461,120463],{"className":118502,"code":120462,"language":118504,"meta":18,"style":18},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[93,120464,120465,120477],{"__ignoreMap":18},[96,120466,120467,120469,120472,120474],{"class":98,"line":99},[96,120468,25021],{"class":102},[96,120470,120471],{"class":106}," PATH",[96,120473,152],{"class":102},[96,120475,120476],{"class":106},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[96,120478,120479,120481,120484,120486],{"class":98,"line":19},[96,120480,25021],{"class":102},[96,120482,120483],{"class":106}," LD_LIBRARY_PATH",[96,120485,152],{"class":102},[96,120487,120488],{"class":106},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[14,120490,120491],{},[1445,120492],{"alt":18,"src":120493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[87,120495,120497],{"className":118502,"code":120496,"language":118504,"meta":18,"style":18},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[93,120498,120499,120504,120510,120515],{"__ignoreMap":18},[96,120500,120501],{"class":98,"line":99},[96,120502,120503],{"class":165},"# 刷新当前终端的环境变量\n",[96,120505,120506,120508],{"class":98,"line":19},[96,120507,100872],{"class":155},[96,120509,120456],{"class":211},[96,120511,120512],{"class":98,"line":1162},[96,120513,120514],{"class":165},"# 验证CUDA是否安装成功\n",[96,120516,120517,120520],{"class":98,"line":1177},[96,120518,120519],{"class":1946},"nvcc",[96,120521,120522],{"class":155}," -V\n",[14,120524,120525],{},"出现下图这种则安装成功。",[14,120527,120528],{},[1445,120529],{"alt":18,"src":120530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[67,120532,120534],{"id":120533},"_354-安装cudnn","3.5.4 安装cuDNN",[50,120536,120537],{},[53,120538,120539],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[14,120541,120542,120543,120548],{},"前往 NVIDIA cuDNN 下载页面：",[345,120544,120547],{"href":120545,"rel":120546},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[23850],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[14,120550,120551],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[14,120553,120554],{},[1445,120555],{"alt":18,"src":120556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[14,120558,120559],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[14,120561,120562],{},[1445,120563],{"alt":18,"src":120564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[14,120566,120567],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[14,120569,120570],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[14,120572,120573],{},[256,120574,120575],{},"我这里选择所有Linux X86_64最通用的办法：",[14,120577,120578],{},"下载好的：",[14,120580,120581],{},[1445,120582],{"alt":18,"src":120583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[50,120585,120586],{"start":19},[53,120587,120588],{},"安装cuDNN",[14,120590,120591],{},"找到该文件所在目录，并打开终端，cd到该目录。",[14,120593,120594],{},[1445,120595],{"alt":18,"src":120596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[14,120598,120599],{},"解压文件，并复制到对应位置完成安装",[87,120601,120603],{"className":118502,"code":120602,"language":118504,"meta":18,"style":18},"# 解压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",[93,120604,120605,120610,120621,120626,120633,120638,120654,120668,120673,120684,120693,120697,120713],{"__ignoreMap":18},[96,120606,120607],{"class":98,"line":99},[96,120608,120609],{"class":165},"# 解压cuDNN文件\n",[96,120611,120612,120615,120618],{"class":98,"line":19},[96,120613,120614],{"class":1946},"tar",[96,120616,120617],{"class":155}," -xvf",[96,120619,120620],{"class":211}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[96,120622,120623],{"class":98,"line":1162},[96,120624,120625],{"class":165},"# cd进文件夹\n",[96,120627,120628,120630],{"class":98,"line":1177},[96,120629,101255],{"class":155},[96,120631,120632],{"class":211}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[96,120634,120635],{"class":98,"line":1183},[96,120636,120637],{"class":165},"# 复制cuDNN文件到CUDA目录\n",[96,120639,120640,120642,120644,120647,120649,120652],{"class":98,"line":1197},[96,120641,24555],{"class":1946},[96,120643,27840],{"class":211},[96,120645,120646],{"class":211}," include\u002Fcudnn",[96,120648,562],{"class":155},[96,120650,120651],{"class":211},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[96,120653,2657],{"class":106},[96,120655,120656,120658,120660,120663,120665],{"class":98,"line":1203},[96,120657,24555],{"class":1946},[96,120659,27840],{"class":211},[96,120661,120662],{"class":211}," lib\u002Flibcudnn",[96,120664,562],{"class":155},[96,120666,120667],{"class":211},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[96,120669,120670],{"class":98,"line":1294},[96,120671,120672],{"class":165},"# 对比一下有没有缺文件\n",[96,120674,120675,120677,120680,120682],{"class":98,"line":1300},[96,120676,26740],{"class":1946},[96,120678,120679],{"class":211}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[96,120681,562],{"class":155},[96,120683,2657],{"class":106},[96,120685,120686,120688,120691],{"class":98,"line":1312},[96,120687,26740],{"class":1946},[96,120689,120690],{"class":211}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[96,120692,119227],{"class":155},[96,120694,120695],{"class":98,"line":1595},[96,120696,120276],{"class":165},[96,120698,120699,120701,120703,120706,120708,120710],{"class":98,"line":1600},[96,120700,24555],{"class":1946},[96,120702,24558],{"class":211},[96,120704,120705],{"class":211}," a+r",[96,120707,120679],{"class":211},[96,120709,562],{"class":155},[96,120711,120712],{"class":106},"   \n",[96,120714,120715,120717,120719,120721,120723],{"class":98,"line":1606},[96,120716,24555],{"class":1946},[96,120718,24558],{"class":211},[96,120720,120705],{"class":211},[96,120722,120690],{"class":211},[96,120724,119227],{"class":155},[50,120726,120727],{"start":1162},[53,120728,120729],{},"检查是否安装成功",[87,120731,120733],{"className":118502,"code":120732,"language":118504,"meta":18,"style":18},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[93,120734,120735,120740],{"__ignoreMap":18},[96,120736,120737],{"class":98,"line":99},[96,120738,120739],{"class":165},"# 检查cuDNN版本命令\n",[96,120741,120742,120745,120748,120750,120752,120755,120758],{"class":98,"line":19},[96,120743,120744],{"class":1946},"cat",[96,120746,120747],{"class":211}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[96,120749,25088],{"class":102},[96,120751,30215],{"class":1946},[96,120753,120754],{"class":211}," CUDNN_MAJOR",[96,120756,120757],{"class":155}," -A",[96,120759,47702],{"class":155},[14,120761,120762],{},"出现下图这样的就是安装成功了",[14,120764,120765],{},[1445,120766],{"alt":18,"src":120767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[50,120769,120770],{"start":1177},[53,120771,120772],{},"软链接(一般不需要)",[87,120774,120776],{"className":118502,"code":120775,"language":118504,"meta":18,"style":18},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[93,120777,120778,120783],{"__ignoreMap":18},[96,120779,120780],{"class":98,"line":99},[96,120781,120782],{"class":165},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[96,120784,120785,120787],{"class":98,"line":19},[96,120786,24555],{"class":1946},[96,120788,120789],{"class":211}," ldconfig\n",[14,120791,120792],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[87,120794,120799],{"className":120795,"code":120796,"language":120797,"meta":120798,"style":18},"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",[93,120800,120801,120806,120811,120816,120821,120826,120831],{"__ignoreMap":18},[96,120802,120803],{"class":98,"line":99},[96,120804,120805],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[96,120807,120808],{"class":98,"line":19},[96,120809,120810],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[96,120812,120813],{"class":98,"line":1162},[96,120814,120815],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[96,120817,120818],{"class":98,"line":1177},[96,120819,120820],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[96,120822,120823],{"class":98,"line":1183},[96,120824,120825],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[96,120827,120828],{"class":98,"line":1197},[96,120829,120830],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[96,120832,120833],{"class":98,"line":1203},[96,120834,120835],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[14,120837,120838],{},"运行下方的命令",[87,120840,120842],{"className":118502,"code":120841,"language":118504,"meta":18,"style":18},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[93,120843,120844,120849,120856,120861],{"__ignoreMap":18},[96,120845,120846],{"class":98,"line":99},[96,120847,120848],{"class":165},"# cd进入CUDA路径\n",[96,120850,120851,120853],{"class":98,"line":19},[96,120852,101255],{"class":155},[96,120854,120855],{"class":211}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[96,120857,120858],{"class":98,"line":1162},[96,120859,120860],{"class":165}," # 查看本路径下的需要软链接的文件名\n",[96,120862,120863],{"class":98,"line":1177},[96,120864,120865],{"class":1946}," ls\n",[14,120867,120868],{},[1445,120869],{"alt":18,"src":120870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[14,120872,120873,120874,18394,120877,18394,120880,120883],{},"如上图，我需要将",[93,120875,120876],{},"libcudnn_xxx_xxxxx.so.8.9.7",[93,120878,120879],{},"libcudnn_xxx_xxxxx.so.8",[93,120881,120882],{},"libcudnn_xxx_xxxxx.so","软链接",[87,120885,120887],{"className":118502,"code":120886,"language":118504,"meta":18,"style":18},"# 创建符号链接。对于每个 .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",[93,120888,120889,120894,120910,120924,120938,120952,120966,120980,120994,120999,121005,121010],{"__ignoreMap":18},[96,120890,120891],{"class":98,"line":99},[96,120892,120893],{"class":165},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[96,120895,120896,120898,120901,120904,120907],{"class":98,"line":19},[96,120897,24555],{"class":1946},[96,120899,120900],{"class":211}," ln",[96,120902,120903],{"class":155}," -sf",[96,120905,120906],{"class":211}," libcudnn_cnn_train.so.8.9.7",[96,120908,120909],{"class":211}," libcudnn_cnn_train.so.8\n",[96,120911,120912,120914,120916,120918,120921],{"class":98,"line":1162},[96,120913,24555],{"class":1946},[96,120915,120900],{"class":211},[96,120917,120903],{"class":155},[96,120919,120920],{"class":211}," libcudnn_adv_infer.so.8.9.7",[96,120922,120923],{"class":211}," libcudnn_adv_infer.so.8\n",[96,120925,120926,120928,120930,120932,120935],{"class":98,"line":1177},[96,120927,24555],{"class":1946},[96,120929,120900],{"class":211},[96,120931,120903],{"class":155},[96,120933,120934],{"class":211}," libcudnn_adv_train.so.8.9.7",[96,120936,120937],{"class":211}," libcudnn_adv_train.so.8\n",[96,120939,120940,120942,120944,120946,120949],{"class":98,"line":1183},[96,120941,24555],{"class":1946},[96,120943,120900],{"class":211},[96,120945,120903],{"class":155},[96,120947,120948],{"class":211}," libcudnn_cnn_infer.so.8.9.7",[96,120950,120951],{"class":211}," libcudnn_cnn_infer.so.8\n",[96,120953,120954,120956,120958,120960,120963],{"class":98,"line":1197},[96,120955,24555],{"class":1946},[96,120957,120900],{"class":211},[96,120959,120903],{"class":155},[96,120961,120962],{"class":211}," libcudnn.so.8.9.7",[96,120964,120965],{"class":211}," libcudnn.so.8\n",[96,120967,120968,120970,120972,120974,120977],{"class":98,"line":1203},[96,120969,24555],{"class":1946},[96,120971,120900],{"class":211},[96,120973,120903],{"class":155},[96,120975,120976],{"class":211}," libcudnn_ops_infer.so.8.9.7",[96,120978,120979],{"class":211}," libcudnn_ops_infer.so.8\n",[96,120981,120982,120984,120986,120988,120991],{"class":98,"line":1294},[96,120983,24555],{"class":1946},[96,120985,120900],{"class":211},[96,120987,120903],{"class":155},[96,120989,120990],{"class":211}," libcudnn_ops_train.so.8.9.7",[96,120992,120993],{"class":211}," libcudnn_ops_train.so.8\n",[96,120995,120996],{"class":98,"line":1300},[96,120997,120998],{"class":165},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[96,121000,121001,121003],{"class":98,"line":1312},[96,121002,24555],{"class":1946},[96,121004,120789],{"class":211},[96,121006,121007],{"class":98,"line":1595},[96,121008,121009],{"class":165},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[96,121011,121012,121014,121017,121020,121022,121025],{"class":98,"line":1600},[96,121013,26740],{"class":1946},[96,121015,121016],{"class":155}," -l",[96,121018,121019],{"class":211}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[96,121021,562],{"class":155},[96,121023,121024],{"class":211},".so",[96,121026,119227],{"class":155},[67,121028,121030],{"id":121029},"_355-常见问题","3.5.5 常见问题",[50,121032,121033],{},[53,121034,121035],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[87,121037,121039],{"className":118502,"code":121038,"language":118504,"meta":18,"style":18},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[93,121040,121041],{"__ignoreMap":18},[96,121042,121043,121045,121047],{"class":98,"line":99},[96,121044,24555],{"class":1946},[96,121046,118562],{"class":211},[96,121048,121049],{"class":211}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[14,121051,121052],{},"blacklist-nouveau.conf文件内容如下：",[87,121054,121056],{"className":118502,"code":121055,"language":118504,"meta":18,"style":18},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[93,121057,121058,121066,121073,121085,121095],{"__ignoreMap":18},[96,121059,121060,121063],{"class":98,"line":99},[96,121061,121062],{"class":1946},"blacklist",[96,121064,121065],{"class":211}," nouveau\n",[96,121067,121068,121070],{"class":98,"line":19},[96,121069,121062],{"class":1946},[96,121071,121072],{"class":211}," lbm-nouveau\n",[96,121074,121075,121077,121080,121083],{"class":98,"line":1162},[96,121076,115909],{"class":1946},[96,121078,121079],{"class":211}," nouveau",[96,121081,121082],{"class":211}," modeset=",[96,121084,3068],{"class":155},[96,121086,121087,121090,121092],{"class":98,"line":1177},[96,121088,121089],{"class":155},"alias",[96,121091,121079],{"class":211},[96,121093,121094],{"class":211}," off\n",[96,121096,121097,121099,121102],{"class":98,"line":1183},[96,121098,121089],{"class":155},[96,121100,121101],{"class":211}," lbm-nouveau",[96,121103,121094],{"class":211},[14,121105,121106],{},"接着运行下方命令",[87,121108,121110],{"className":118502,"code":121109,"language":118504,"meta":18,"style":18},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[93,121111,121112,121122,121127],{"__ignoreMap":18},[96,121113,121114,121116,121119],{"class":98,"line":99},[96,121115,24555],{"class":1946},[96,121117,121118],{"class":211}," update-initramfs",[96,121120,121121],{"class":155}," -u\n",[96,121123,121124],{"class":98,"line":19},[96,121125,121126],{"class":1946},"或者\n",[96,121128,121129,121131,121134],{"class":98,"line":1162},[96,121130,24555],{"class":1946},[96,121132,121133],{"class":211}," dracut",[96,121135,121136],{"class":155}," --force\n",[14,121138,121139],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[87,121141,121143],{"className":118502,"code":121142,"language":118504,"meta":18,"style":18},"lsmod | grep nouveau\n",[93,121144,121145],{"__ignoreMap":18},[96,121146,121147,121150,121152,121154],{"class":98,"line":99},[96,121148,121149],{"class":1946},"lsmod",[96,121151,25088],{"class":102},[96,121153,30215],{"class":1946},[96,121155,121065],{"class":211},[50,121157,121158],{"start":19},[53,121159,121160],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[87,121162,121164],{"className":118502,"code":121163,"language":118504,"meta":18,"style":18},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[93,121165,121166],{"__ignoreMap":18},[96,121167,121168,121170,121172],{"class":98,"line":99},[96,121169,24555],{"class":1946},[96,121171,118562],{"class":211},[96,121173,121174],{"class":211}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[14,121176,121177],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[87,121179,121181],{"className":118502,"code":121180,"language":118504,"meta":18,"style":18},"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",[93,121182,121183,121191,121199,121207,121214,121222,121232,121240],{"__ignoreMap":18},[96,121184,121185,121188],{"class":98,"line":99},[96,121186,121187],{"class":1946},"Section",[96,121189,121190],{"class":211}," \"OutputClass\"\n",[96,121192,121193,121196],{"class":98,"line":19},[96,121194,121195],{"class":1946},"   Identifier",[96,121197,121198],{"class":211}," \"nvidia\"\n",[96,121200,121201,121204],{"class":98,"line":1162},[96,121202,121203],{"class":1946},"   MatchDriver",[96,121205,121206],{"class":211}," \"nvidia-drm\"\n",[96,121208,121209,121212],{"class":98,"line":1177},[96,121210,121211],{"class":1946},"   Driver",[96,121213,121198],{"class":211},[96,121215,121216,121219],{"class":98,"line":1183},[96,121217,121218],{"class":1946},"   Option",[96,121220,121221],{"class":211}," \"AllowEmptyInitialConfiguration\"\n",[96,121223,121224,121226,121229],{"class":98,"line":1197},[96,121225,121218],{"class":1946},[96,121227,121228],{"class":211}," \"PrimaryGPU\"",[96,121230,121231],{"class":211}," \"yes\"\n",[96,121233,121234,121237],{"class":98,"line":1203},[96,121235,121236],{"class":1946},"   ModulePath",[96,121238,121239],{"class":211}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[96,121241,121242],{"class":98,"line":1294},[96,121243,121244],{"class":1946},"EndSection\n",[50,121246,121247],{"start":1162},[53,121248,121249],{},"安装N卡驱动提示错误",[87,121251,121253],{"className":120795,"code":121252,"language":120797,"meta":120798,"style":18},"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",[93,121254,121255],{"__ignoreMap":18},[96,121256,121257],{"class":98,"line":99},[96,121258,121252],{},[50,121260,121261],{},[53,121262,121263],{},"检查当前运行的内核版本：",[14,121265,121266],{},"运行以下命令以查看你当前正在使用的内核版本：",[87,121268,121270],{"className":117275,"code":121269,"language":117277,"meta":18,"style":18},"uname -r\n",[93,121271,121272],{"__ignoreMap":18},[96,121273,121274,121276],{"class":98,"line":99},[96,121275,70183],{"class":1946},[96,121277,121278],{"class":155}," -r\n",[50,121280,121281],{"start":19},[53,121282,121283],{},"安装内核开发文件：",[14,121285,121286,121287,121290],{},"确保你已经安装了与当前内核版本相匹配的 ",[93,121288,121289],{},"kernel-devel"," 包。运行以下命令来安装：",[87,121292,121294],{"className":117275,"code":121293,"language":117277,"meta":18,"style":18},"sudo dnf install kernel-devel-$(uname -r)\n",[93,121295,121296],{"__ignoreMap":18},[96,121297,121298,121300,121302,121304,121307,121309,121311,121313],{"class":98,"line":99},[96,121299,24555],{"class":1946},[96,121301,26294],{"class":211},[96,121303,23819],{"class":211},[96,121305,121306],{"class":211}," kernel-devel-",[96,121308,25078],{"class":106},[96,121310,70183],{"class":1946},[96,121312,119618],{"class":155},[96,121314,113],{"class":106},[14,121316,121317],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[50,121319,121320],{"start":1162},[53,121321,121322],{},"安装内核源代码（如果需要）：",[14,121324,121325],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[87,121327,121329],{"className":117275,"code":121328,"language":117277,"meta":18,"style":18},"sudo dnf install kernel-headers kernel-source\n",[93,121330,121331],{"__ignoreMap":18},[96,121332,121333,121335,121337,121339,121342],{"class":98,"line":99},[96,121334,24555],{"class":1946},[96,121336,26294],{"class":211},[96,121338,23819],{"class":211},[96,121340,121341],{"class":211}," kernel-headers",[96,121343,121344],{"class":211}," kernel-source\n",[50,121346,121347],{"start":1177},[53,121348,121349],{},"检查安装：",[14,121351,121352,121353,121356],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[93,121354,121355],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[87,121358,121360],{"className":117275,"code":121359,"language":117277,"meta":18,"style":18},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[93,121361,121362],{"__ignoreMap":18},[96,121363,121364,121366],{"class":98,"line":99},[96,121365,26740],{"class":1946},[96,121367,121368],{"class":211}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[14,121370,121371,121372,121375],{},"如果仍然遇到问题，可以通过 ",[93,121373,121374],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[5110,121377,121378],{},"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":18,"searchDepth":19,"depth":19,"links":121380},[121381,121385,121395,121399,121400],{"id":118478,"depth":19,"text":118479,"children":121382},[121383,121384],{"id":118488,"depth":1162,"text":118489},{"id":118498,"depth":1162,"text":118499},{"id":118698,"depth":19,"text":118699,"children":121386},[121387,121388,121389,121390,121391,121392,121393,121394],{"id":118702,"depth":1162,"text":118703},{"id":118772,"depth":1162,"text":118773},{"id":118861,"depth":1162,"text":118862},{"id":119106,"depth":1162,"text":119107},{"id":119176,"depth":1162,"text":119177},{"id":119243,"depth":1162,"text":119244},{"id":119278,"depth":1162,"text":119279},{"id":119333,"depth":1162,"text":119334},{"id":119384,"depth":19,"text":119385,"children":121396},[121397,121398],{"id":119388,"depth":1162,"text":119389},{"id":119468,"depth":1162,"text":119469},{"id":119654,"depth":19,"text":119655},{"id":119827,"depth":19,"text":119828,"children":121401},[121402,121403,121404,121405,121406],{"id":119831,"depth":1162,"text":119832},{"id":119872,"depth":1162,"text":119873},{"id":120159,"depth":1162,"text":120160},{"id":120533,"depth":1162,"text":120534},{"id":121029,"depth":1162,"text":121030},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118470,"description":23361},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121413,"title":121414,"body":121415,"description":23361,"extension":21,"meta":121755,"navigation":23,"path":121756,"seo":121757,"stem":121758,"__hash__":121759},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121416,"toc":121753},[121417,121420,121425,121428,121674,121679,121682,121718,121721,121750],[10,121418,121414],{"id":121419},"_4-命令教程长期积累",[50,121421,121422],{},[53,121423,121424],{},"大多数命令",[14,121426,121427],{},"常用 Linux 命令速查：",[87,121429,121431],{"className":117275,"code":121430,"language":117277,"meta":18,"style":18},"# 文件与目录\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",[93,121432,121433,121438,121445,121452,121460,121467,121474,121482,121490,121497,121504,121512,121516,121521,121528,121536,121543,121547,121552,121559,121567,121575,121583,121591,121595,121600,121608,121615,121622,121630,121638,121642,121647,121656,121665],{"__ignoreMap":18},[96,121434,121435],{"class":98,"line":99},[96,121436,121437],{"class":165},"# 文件与目录\n",[96,121439,121440,121442],{"class":98,"line":19},[96,121441,26740],{"class":1946},[96,121443,121444],{"class":165},"        # 列出目录内容\n",[96,121446,121447,121449],{"class":98,"line":1162},[96,121448,101255],{"class":155},[96,121450,121451],{"class":165},"        # 切换目录\n",[96,121453,121454,121457],{"class":98,"line":1177},[96,121455,121456],{"class":155},"pwd",[96,121458,121459],{"class":165},"       # 显示当前路径\n",[96,121461,121462,121464],{"class":98,"line":1183},[96,121463,101245],{"class":1946},[96,121465,121466],{"class":165},"     # 创建目录\n",[96,121468,121469,121471],{"class":98,"line":1197},[96,121470,25301],{"class":1946},[96,121472,121473],{"class":165},"        # 删除文件或目录\n",[96,121475,121476,121479],{"class":98,"line":1203},[96,121477,121478],{"class":1946},"cp",[96,121480,121481],{"class":165},"        # 复制文件或目录\n",[96,121483,121484,121487],{"class":98,"line":1294},[96,121485,121486],{"class":1946},"mv",[96,121488,121489],{"class":165},"        # 移动\u002F重命名文件或目录\n",[96,121491,121492,121494],{"class":98,"line":1300},[96,121493,101262],{"class":1946},[96,121495,121496],{"class":165},"     # 创建空文件\n",[96,121498,121499,121501],{"class":98,"line":1312},[96,121500,120744],{"class":1946},[96,121502,121503],{"class":165},"       # 查看文件内容\n",[96,121505,121506,121509],{"class":98,"line":1595},[96,121507,121508],{"class":1946},"head\u002Ftail",[96,121510,121511],{"class":165}," # 查看文件头部\u002F尾部\n",[96,121513,121514],{"class":98,"line":1600},[96,121515,2383],{"emptyLinePlaceholder":23},[96,121517,121518],{"class":98,"line":1606},[96,121519,121520],{"class":165},"# 权限管理\n",[96,121522,121523,121525],{"class":98,"line":1611},[96,121524,24590],{"class":1946},[96,121526,121527],{"class":165},"     # 修改文件权限\n",[96,121529,121530,121533],{"class":98,"line":1625},[96,121531,121532],{"class":1946},"chown",[96,121534,121535],{"class":165},"     # 修改文件所有者\n",[96,121537,121538,121540],{"class":98,"line":1630},[96,121539,24555],{"class":1946},[96,121541,121542],{"class":165},"      # 以管理员身份执行\n",[96,121544,121545],{"class":98,"line":1636},[96,121546,2383],{"emptyLinePlaceholder":23},[96,121548,121549],{"class":98,"line":1657},[96,121550,121551],{"class":165},"# 系统信息\n",[96,121553,121554,121556],{"class":98,"line":1662},[96,121555,70183],{"class":1946},[96,121557,121558],{"class":165},"     # 系统信息\n",[96,121560,121561,121564],{"class":98,"line":1676},[96,121562,121563],{"class":1946},"df",[96,121565,121566],{"class":165},"        # 磁盘使用情况\n",[96,121568,121569,121572],{"class":98,"line":1681},[96,121570,121571],{"class":1946},"free",[96,121573,121574],{"class":165},"      # 内存使用情况\n",[96,121576,121577,121580],{"class":98,"line":1710},[96,121578,121579],{"class":1946},"top\u002Fhtop",[96,121581,121582],{"class":165},"  # 进程监控\n",[96,121584,121585,121588],{"class":98,"line":1715},[96,121586,121587],{"class":1946},"ps",[96,121589,121590],{"class":165},"        # 查看进程\n",[96,121592,121593],{"class":98,"line":1732},[96,121594,2383],{"emptyLinePlaceholder":23},[96,121596,121597],{"class":98,"line":1737},[96,121598,121599],{"class":165},"# 网络\n",[96,121601,121602,121605],{"class":98,"line":1742},[96,121603,121604],{"class":1946},"ping",[96,121606,121607],{"class":165},"      # 测试网络连通性\n",[96,121609,121610,121612],{"class":98,"line":1747},[96,121611,26828],{"class":1946},[96,121613,121614],{"class":165},"      # 发送 HTTP 请求\n",[96,121616,121617,121619],{"class":98,"line":1761},[96,121618,120268],{"class":1946},[96,121620,121621],{"class":165},"      # 下载文件\n",[96,121623,121624,121627],{"class":98,"line":1766},[96,121625,121626],{"class":1946},"ssh",[96,121628,121629],{"class":165},"       # 远程登录\n",[96,121631,121632,121635],{"class":98,"line":2560},[96,121633,121634],{"class":1946},"scp",[96,121636,121637],{"class":165},"       # 远程文件传输\n",[96,121639,121640],{"class":98,"line":2574},[96,121641,2383],{"emptyLinePlaceholder":23},[96,121643,121644],{"class":98,"line":2582},[96,121645,121646],{"class":165},"# 包管理（Debian\u002FUbuntu）\n",[96,121648,121649,121651,121653],{"class":98,"line":2587},[96,121650,117347],{"class":1946},[96,121652,117326],{"class":211},[96,121654,121655],{"class":165},"   # 更新软件源\n",[96,121657,121658,121660,121662],{"class":98,"line":2593},[96,121659,117347],{"class":1946},[96,121661,23819],{"class":211},[96,121663,121664],{"class":165},"  # 安装软件包\n",[96,121666,121667,121669,121671],{"class":98,"line":2599},[96,121668,117347],{"class":1946},[96,121670,26058],{"class":211},[96,121672,121673],{"class":165},"   # 卸载软件包\n",[50,121675,121676],{"start":19},[53,121677,121678],{},"KDE Dolphin 以root打开",[14,121680,121681],{},"kde5",[87,121683,121685],{"className":117275,"code":121684,"language":117277,"meta":18,"style":18},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[93,121686,121687],{"__ignoreMap":18},[96,121688,121689,121692,121695,121698,121700,121702,121705,121708,121710,121713,121715],{"class":98,"line":99},[96,121690,121691],{"class":1946},"pkexec",[96,121693,121694],{"class":211}," env",[96,121696,121697],{"class":211}," DISPLAY=",[96,121699,28122],{"class":106},[96,121701,28180],{"class":211},[96,121703,121704],{"class":106},"$XAUTHORITY ",[96,121706,121707],{"class":211},"KDE_SESSION_VERSION=",[96,121709,426],{"class":155},[96,121711,121712],{"class":211}," KDE_FULL_SESSION=",[96,121714,1345],{"class":155},[96,121716,121717],{"class":211}," dolphin\n",[14,121719,121720],{},"kde6",[87,121722,121724],{"className":117275,"code":121723,"language":117277,"meta":18,"style":18},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[93,121725,121726],{"__ignoreMap":18},[96,121727,121728,121730,121732,121734,121736,121738,121740,121742,121744,121746,121748],{"class":98,"line":99},[96,121729,121691],{"class":1946},[96,121731,121694],{"class":211},[96,121733,121697],{"class":211},[96,121735,28122],{"class":106},[96,121737,28180],{"class":211},[96,121739,121704],{"class":106},[96,121741,121707],{"class":211},[96,121743,451],{"class":155},[96,121745,121712],{"class":211},[96,121747,1345],{"class":155},[96,121749,121717],{"class":211},[5110,121751,121752],{},"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":18,"searchDepth":19,"depth":19,"links":121754},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121414,"description":23361},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121761,"title":121762,"body":121763,"description":23361,"extension":21,"meta":121777,"navigation":23,"path":121778,"seo":121779,"stem":121780,"__hash__":121781},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121764,"toc":121775},[121765,121768],[10,121766,121762],{"id":121767},"_5-各种环境配置",[14,121769,121770],{},[345,121771,121774],{"href":121772,"rel":121773},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[23850],"电控组环境搭建大全",{"title":18,"searchDepth":19,"depth":19,"links":121776},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121762,"description":23361},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121783,"title":121784,"body":121785,"description":23361,"extension":21,"meta":122133,"navigation":23,"path":122134,"seo":122135,"stem":122136,"__hash__":122137},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121786,"toc":122125},[121787,121790,121794,121798,121802,121807,121814,121818,122111,122115,122122],[10,121788,121784],{"id":121789},"_6-拓展功能",[38,121791,121793],{"id":121792},"_61-wine","6.1 Wine",[38,121795,121797],{"id":121796},"_62-android","6.2 Android",[67,121799,121801],{"id":121800},"_621-i卡a卡","6.2.1 I卡、A卡",[50,121803,121804],{},[53,121805,121806],{},"Wayland-Waydroid(体验超级好)",[14,121808,121809,121810],{},"Waydroid 官网与安装指南：",[345,121811,121812],{"href":121812,"rel":121813},"https:\u002F\u002Fwaydro.id\u002F",[23850],[67,121815,121817],{"id":121816},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[50,121819,121820],{},[53,121821,121822,121823,121825,121826,121830,121832,121835,121840,122037],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53695,121824],{},"BlissOS 官网下载：",[345,121827,121828],{"href":121828,"rel":121829},"https:\u002F\u002Fblissos.org\u002F",[23850],[53695,121831],{},[1445,121833],{"alt":18,"src":121834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[50,121836,121837],{"start":1162},[53,121838,121839],{},"比较推荐的配置",[87,121841,121843],{"className":117275,"code":121842,"language":117277,"meta":18,"style":18},"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",[93,121844,121845,121852,121862,121872,121882,121894,121904,121911,121921,121930,121939,121949,121959,121968,121978,121988,122000,122010,122019,122029],{"__ignoreMap":18},[96,121846,121847,121850],{"class":98,"line":99},[96,121848,121849],{"class":1946},"qemu-system-x86_64",[96,121851,24657],{"class":155},[96,121853,121854,121857,121860],{"class":98,"line":19},[96,121855,121856],{"class":155},"        -M",[96,121858,121859],{"class":211}," q35,vmport=off",[96,121861,24657],{"class":155},[96,121863,121864,121867,121870],{"class":98,"line":1162},[96,121865,121866],{"class":155},"        -accel",[96,121868,121869],{"class":211}," kvm",[96,121871,24657],{"class":155},[96,121873,121874,121877,121880],{"class":98,"line":1177},[96,121875,121876],{"class":155},"        -cpu",[96,121878,121879],{"class":211}," qemu64,+sse3,+sse4.2",[96,121881,24657],{"class":155},[96,121883,121884,121887,121890,121892],{"class":98,"line":1183},[96,121885,121886],{"class":155},"        -smp",[96,121888,121889],{"class":211}," 8,cores=",[96,121891,400],{"class":155},[96,121893,24657],{"class":155},[96,121895,121896,121899,121902],{"class":98,"line":1197},[96,121897,121898],{"class":155},"        -m",[96,121900,121901],{"class":211}," 6G",[96,121903,24657],{"class":155},[96,121905,121906,121909],{"class":98,"line":1203},[96,121907,121908],{"class":155},"        -usb",[96,121910,24657],{"class":155},[96,121912,121913,121916,121919],{"class":98,"line":1294},[96,121914,121915],{"class":155},"        -device",[96,121917,121918],{"class":211}," virtio-tablet",[96,121920,24657],{"class":155},[96,121922,121923,121925,121928],{"class":98,"line":1300},[96,121924,121915],{"class":155},[96,121926,121927],{"class":211}," virtio-keyboard",[96,121929,24657],{"class":155},[96,121931,121932,121934,121937],{"class":98,"line":1312},[96,121933,121915],{"class":155},[96,121935,121936],{"class":211}," usb-tablet",[96,121938,24657],{"class":155},[96,121940,121941,121944,121947],{"class":98,"line":1595},[96,121942,121943],{"class":155},"        -bios",[96,121945,121946],{"class":211}," OVMF-pure-efi64.fd",[96,121948,24657],{"class":155},[96,121950,121951,121954,121957],{"class":98,"line":1600},[96,121952,121953],{"class":155},"        -net",[96,121955,121956],{"class":211}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[96,121958,24657],{"class":155},[96,121960,121961,121963,121966],{"class":98,"line":1606},[96,121962,121953],{"class":155},[96,121964,121965],{"class":211}," nic,model=virtio",[96,121967,24657],{"class":155},[96,121969,121970,121973,121976],{"class":98,"line":1611},[96,121971,121972],{"class":155},"        -audio",[96,121974,121975],{"class":211}," sdl,model=hda",[96,121977,24657],{"class":155},[96,121979,121980,121983,121986],{"class":98,"line":1625},[96,121981,121982],{"class":155},"        -display",[96,121984,121985],{"class":211}," sdl,gl=on,show-cursor=on",[96,121987,24657],{"class":155},[96,121989,121990,121992,121995,121998],{"class":98,"line":1630},[96,121991,121915],{"class":155},[96,121993,121994],{"class":211}," virtio-vga-gl,xres=1920,yres=",[96,121996,121997],{"class":155},"1080",[96,121999,24657],{"class":155},[96,122001,122002,122005,122008],{"class":98,"line":1636},[96,122003,122004],{"class":155},"        -drive",[96,122006,122007],{"class":211}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[96,122009,24657],{"class":155},[96,122011,122012,122014,122017],{"class":98,"line":1657},[96,122013,122004],{"class":155},[96,122015,122016],{"class":211}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[96,122018,24657],{"class":155},[96,122020,122021,122024,122027],{"class":98,"line":1662},[96,122022,122023],{"class":155},"        -monitor",[96,122025,122026],{"class":211}," stdio",[96,122028,24657],{"class":155},[96,122030,122031,122034],{"class":98,"line":1676},[96,122032,122033],{"class":155},"        -serial",[96,122035,122036],{"class":211}," none\n",[50,122038,122039],{"start":1183},[53,122040,122041,122042],{},"常用操作：",[50,122043,122044,122047,122103],{},[53,122045,122046],{},"全屏：Ctrl+Alt+F",[53,122048,122049,122050,122055],{},"adb调试",[50,122051,122052],{},[53,122053,122054],{},"使Linux与Android用ADB连接。",[87,122056,122058],{"className":117275,"code":122057,"language":117277,"meta":18,"style":18},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[93,122059,122060,122065,122076,122081,122093,122098],{"__ignoreMap":18},[96,122061,122062],{"class":98,"line":99},[96,122063,122064],{"class":165},"# 连接安卓\n",[96,122066,122067,122070,122073],{"class":98,"line":19},[96,122068,122069],{"class":1946},"adb",[96,122071,122072],{"class":211}," connect",[96,122074,122075],{"class":155}," 127.0.0.1\n",[96,122077,122078],{"class":98,"line":1162},[96,122079,122080],{"class":165},"# 打开shell\n",[96,122082,122083,122085,122087,122090],{"class":98,"line":1177},[96,122084,122069],{"class":1946},[96,122086,26862],{"class":155},[96,122088,122089],{"class":211}," 127.0.0.1:5555",[96,122091,122092],{"class":211}," shell\n",[96,122094,122095],{"class":98,"line":1183},[96,122096,122097],{"class":165},"# 使用root权限\n",[96,122099,122100],{"class":98,"line":1197},[96,122101,122102],{"class":1946},"su\n",[53,122104,122105,122106],{},"中文输入法",[50,122107,122108],{},[53,122109,122110],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[38,122112,122114],{"id":122113},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[14,122116,122117,122118],{},"rEFInd 官网与文档：",[345,122119,122120],{"href":122120,"rel":122121},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[23850],[5110,122123,122124],{},"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":18,"searchDepth":19,"depth":19,"links":122126},[122127,122128,122132],{"id":121792,"depth":19,"text":121793},{"id":121796,"depth":19,"text":121797,"children":122129},[122130,122131],{"id":121800,"depth":1162,"text":121801},{"id":121816,"depth":1162,"text":121817},{"id":122113,"depth":19,"text":122114},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121784,"description":23361},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122139,"title":122140,"body":122141,"description":23361,"extension":21,"meta":125440,"navigation":23,"path":125441,"seo":125442,"stem":125443,"__hash__":125444},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122142,"toc":125414},[122143,122146,122150,122153,122160,122410,122413,122485,122488,122492,122496,122501,122504,122507,122510,122515,122518,122521,122524,122529,122532,122537,122540,122543,122548,122551,122556,122559,122563,122567,122570,122575,122578,122592,122595,122598,122607,122610,122619,122622,122625,122634,122637,122646,122649,122652,122661,122664,122667,122682,122685,122688,122697,122702,122705,122708,122717,122720,122729,122732,122741,122744,122753,122758,122761,122769,122774,122777,122786,122789,122797,122802,122805,122814,122817,122820,122824,122827,122832,122835,122840,122854,122859,122864,122875,122880,122886,122891,122906,122911,122914,122919,122924,122929,122937,122942,122949,122954,122965,122970,122973,122977,122980,122983,122988,122991,123010,123015,123018,123027,123032,123035,123057,123060,123090,123093,123098,123101,123115,123120,123139,123142,123145,123150,123162,123167,123172,123175,123180,123183,123198,123201,123206,123211,123215,123220,123260,123263,123267,123273,123279,123284,123287,123294,123299,123306,123309,123312,123319,123333,123336,123396,123399,123413,123425,123428,123431,123434,123498,123501,123504,123507,123527,123530,123535,123542,123546,123549,123553,123558,123563,123567,123570,123573,123615,123620,123623,123645,123660,123662,123667,123679,123739,123741,123743,123797,123799,123801,123807,123812,123815,123820,123824,123827,123889,123894,123897,123899,123903,123915,123997,123999,124001,124055,124061,124063,124067,124072,124074,124079,124083,124103,124138,124142,124145,124148,124151,124158,124161,124173,124176,124191,124194,124213,124261,124264,124281,124284,124298,124303,124306,124315,124330,124342,124380,124385,124394,124399,124404,124430,124439,124443,124447,124452,124455,124459,124463,124468,124471,124476,124479,124484,124487,124492,124495,124499,124504,124507,124512,124515,124519,124524,124527,124532,124535,124540,124543,124547,124552,124555,124560,124563,124568,124571,124575,124580,124583,124588,124591,124596,124599,124604,124607,124612,124615,124620,124623,124627,124632,124635,124640,124647,124651,124656,124659,124664,124667,124671,124676,124679,124682,124685,124688,124691,124695,124698,124708,124713,124718,124740,124745,124750,124757,124761,124766,124769,124772,124777,124780,124783,124786,124789,124792,124795,124798,124801,124804,124807,124810,124813,124818,124823,124828,124833,124838,124843,124848,124851,124855,124858,124862,124867,124872,124877,124882,124886,124892,124900,124905,124908,124913,124928,124931,124936,124970,124985,124988,125043,125069,125081,125084,125093,125096,125111,125116,125119,125125,125130,125133,125138,125141,125146,125151,125158,125161,125176,125179,125214,125219,125227,125265,125268,125271,125276,125279,125284,125295,125329,125334,125337,125346,125351,125357,125360,125365,125374,125379,125382,125385,125390,125398,125401,125406,125411],[10,122144,122140],{"id":122145},"_7-其他操作",[38,122147,122149],{"id":122148},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[14,122151,122152],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[14,122154,122155,122156,122159],{},"进入工控机的硬盘目录，进入",[93,122157,122158],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[87,122161,122165],{"className":122162,"code":122163,"language":122164,"meta":18,"style":18},"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",[93,122166,122167,122175,122186,122193,122200,122212,122219,122231,122242,122253,122260,122267,122274,122286,122298,122305,122317,122329,122336,122348,122360,122372,122383,122390,122401],{"__ignoreMap":18},[96,122168,122169,122172],{"class":98,"line":99},[96,122170,122171],{"class":51279},"network",[96,122173,122174],{"class":106},": \n",[96,122176,122177,122180,122182,122184],{"class":98,"line":19},[96,122178,122179],{"class":51279},"  version",[96,122181,51416],{"class":106},[96,122183,184],{"class":155},[96,122185,2657],{"class":106},[96,122187,122188,122191],{"class":98,"line":1162},[96,122189,122190],{"class":51279},"  wifis",[96,122192,122174],{"class":106},[96,122194,122195,122198],{"class":98,"line":1177},[96,122196,122197],{"class":51279},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[96,122199,122174],{"class":106},[96,122201,122202,122205,122207,122210],{"class":98,"line":1183},[96,122203,122204],{"class":51279},"      renderer",[96,122206,51416],{"class":106},[96,122208,122209],{"class":211},"NetworkManager",[96,122211,2657],{"class":106},[96,122213,122214,122217],{"class":98,"line":1197},[96,122215,122216],{"class":51279},"      match",[96,122218,122174],{"class":106},[96,122220,122221,122224,122226,122229],{"class":98,"line":1203},[96,122222,122223],{"class":51279},"        name",[96,122225,51416],{"class":106},[96,122227,122228],{"class":211},"\"wlan0\"",[96,122230,2657],{"class":106},[96,122232,122233,122236,122238,122240],{"class":98,"line":1294},[96,122234,122235],{"class":51279},"      dhcp4",[96,122237,51416],{"class":106},[96,122239,1345],{"class":155},[96,122241,2657],{"class":106},[96,122243,122244,122247,122249,122251],{"class":98,"line":1300},[96,122245,122246],{"class":51279},"      dhcp6",[96,122248,51416],{"class":106},[96,122250,1345],{"class":155},[96,122252,2657],{"class":106},[96,122254,122255,122258],{"class":98,"line":1312},[96,122256,122257],{"class":51279},"      access-points",[96,122259,122174],{"class":106},[96,122261,122262,122265],{"class":98,"line":1595},[96,122263,122264],{"class":211},"        \"EMIS_Vinci_Robocon_5G\"",[96,122266,122174],{"class":106},[96,122268,122269,122272],{"class":98,"line":1600},[96,122270,122271],{"class":51279},"          auth",[96,122273,122174],{"class":106},[96,122275,122276,122279,122281,122284],{"class":98,"line":1606},[96,122277,122278],{"class":51279},"            key-management",[96,122280,51416],{"class":106},[96,122282,122283],{"class":211},"\"psk\"",[96,122285,2657],{"class":106},[96,122287,122288,122291,122293,122296],{"class":98,"line":1611},[96,122289,122290],{"class":51279},"            password",[96,122292,51416],{"class":106},[96,122294,122295],{"class":211},"\"vinci666\"",[96,122297,2657],{"class":106},[96,122299,122300,122303],{"class":98,"line":1625},[96,122301,122302],{"class":51279},"          networkmanager",[96,122304,122174],{"class":106},[96,122306,122307,122310,122312,122315],{"class":98,"line":1630},[96,122308,122309],{"class":51279},"            uuid",[96,122311,51416],{"class":106},[96,122313,122314],{"class":211},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[96,122316,2657],{"class":106},[96,122318,122319,122322,122324,122327],{"class":98,"line":1636},[96,122320,122321],{"class":51279},"            name",[96,122323,51416],{"class":106},[96,122325,122326],{"class":211},"\"EMIS_Vinci_Robocon_5G\"",[96,122328,2657],{"class":106},[96,122330,122331,122334],{"class":98,"line":1657},[96,122332,122333],{"class":51279},"            passthrough",[96,122335,122174],{"class":106},[96,122337,122338,122341,122343,122346],{"class":98,"line":1662},[96,122339,122340],{"class":51279},"              wifi-security.auth-alg",[96,122342,51416],{"class":106},[96,122344,122345],{"class":211},"\"open\"",[96,122347,2657],{"class":106},[96,122349,122350,122353,122355,122358],{"class":98,"line":1676},[96,122351,122352],{"class":51279},"              ipv6.addr-gen-mode",[96,122354,51416],{"class":106},[96,122356,122357],{"class":211},"\"default\"",[96,122359,2657],{"class":106},[96,122361,122362,122365,122367,122370],{"class":98,"line":1681},[96,122363,122364],{"class":51279},"              ipv6.ip6-privacy",[96,122366,51416],{"class":106},[96,122368,122369],{"class":211},"\"-1\"",[96,122371,2657],{"class":106},[96,122373,122374,122377,122379,122381],{"class":98,"line":1710},[96,122375,122376],{"class":51279},"              proxy._",[96,122378,51416],{"class":106},[96,122380,7636],{"class":211},[96,122382,2657],{"class":106},[96,122384,122385,122388],{"class":98,"line":1715},[96,122386,122387],{"class":51279},"      networkmanager",[96,122389,122174],{"class":106},[96,122391,122392,122395,122397,122399],{"class":98,"line":1732},[96,122393,122394],{"class":51279},"        uuid",[96,122396,51416],{"class":106},[96,122398,122314],{"class":211},[96,122400,2657],{"class":106},[96,122402,122403,122405,122407],{"class":98,"line":1737},[96,122404,122223],{"class":51279},[96,122406,51416],{"class":106},[96,122408,122409],{"class":211},"\"EMIS_Vinci_Robocon_5G\"\n",[14,122411,122412],{},"将其改为新wifi的名和密码：",[87,122414,122416],{"className":122162,"code":122415,"language":122164,"meta":18,"style":18},"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",[93,122417,122418,122424,122433,122439,122446,122455,122463,122469,122475],{"__ignoreMap":18},[96,122419,122420,122422],{"class":98,"line":99},[96,122421,122171],{"class":51279},[96,122423,3722],{"class":106},[96,122425,122426,122428,122430],{"class":98,"line":19},[96,122427,122179],{"class":51279},[96,122429,51416],{"class":106},[96,122431,122432],{"class":155},"2\n",[96,122434,122435,122437],{"class":98,"line":1162},[96,122436,122190],{"class":51279},[96,122438,3722],{"class":106},[96,122440,122441,122444],{"class":98,"line":1177},[96,122442,122443],{"class":51279},"    wlan0",[96,122445,3722],{"class":106},[96,122447,122448,122450,122452],{"class":98,"line":1183},[96,122449,122235],{"class":51279},[96,122451,51416],{"class":106},[96,122453,122454],{"class":155},"true\n",[96,122456,122457,122459,122461],{"class":98,"line":1197},[96,122458,122246],{"class":51279},[96,122460,51416],{"class":106},[96,122462,122454],{"class":155},[96,122464,122465,122467],{"class":98,"line":1203},[96,122466,122257],{"class":51279},[96,122468,3722],{"class":106},[96,122470,122471,122473],{"class":98,"line":1294},[96,122472,122264],{"class":211},[96,122474,3722],{"class":106},[96,122476,122477,122480,122482],{"class":98,"line":1300},[96,122478,122479],{"class":51279},"          password",[96,122481,51416],{"class":106},[96,122483,122484],{"class":211},"\"vinci666\"\n",[14,122486,122487],{},"工控机开机即可连上网。",[38,122489,122491],{"id":122490},"_72-ssh远程开发","7.2 SSH远程开发",[67,122493,122495],{"id":122494},"_721-环境准备","7.2.1 环境准备",[14,122497,122498],{},[256,122499,122500],{},"1.硬件准备",[14,122502,122503],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[14,122505,122506],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[14,122508,122509],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[14,122511,122512],{},[256,122513,122514],{},"2.设置固定IP",[14,122516,122517],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[14,122519,122520],{},"1.进入设置界面",[14,122522,122523],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[14,122525,122526],{},[1445,122527],{"alt":18,"src":122528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[14,122530,122531],{},"2.配置所连接的网络",[14,122533,122534],{},[1445,122535],{"alt":18,"src":122536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[14,122538,122539],{},"3.设置固定IP",[14,122541,122542],{},"查看当前IP地址。",[14,122544,122545],{},[1445,122546],{"alt":18,"src":122547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[14,122549,122550],{},"设置固定IP。",[14,122552,122553],{},[1445,122554],{"alt":18,"src":122555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[14,122557,122558],{},"至此，IP配置完毕。",[67,122560,122562],{"id":122561},"_722-环境搭建","7.2.2 环境搭建",[14,122564,122565],{},[256,122566,25732],{},[14,122568,122569],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[14,122571,122572],{},[256,122573,122574],{},"实现",[14,122576,122577],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[50,122579,122580,122583,122586,122589],{},[53,122581,122582],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[53,122584,122585],{},"远程主机启动SSH服务；",[53,122587,122588],{},"本地主机登陆远程主机；",[53,122590,122591],{},"实现数据传输。",[14,122593,122594],{},"1.安装SSH客户端与服务端",[14,122596,122597],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[87,122599,122601],{"className":120795,"code":122600,"language":120797,"meta":120798,"style":18}," sudo apt install openssh-server\n",[93,122602,122603],{"__ignoreMap":18},[96,122604,122605],{"class":98,"line":99},[96,122606,122600],{},[14,122608,122609],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[87,122611,122613],{"className":120795,"code":122612,"language":120797,"meta":120798,"style":18},"sudo apt install openssh-client\n",[93,122614,122615],{"__ignoreMap":18},[96,122616,122617],{"class":98,"line":99},[96,122618,122612],{},[14,122620,122621],{},"2.远程主机启动SSH服务",[14,122623,122624],{},"远程主机启动 ssh 服务命令如下：",[87,122626,122628],{"className":120795,"code":122627,"language":120797,"meta":120798,"style":18},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[93,122629,122630],{"__ignoreMap":18},[96,122631,122632],{"class":98,"line":99},[96,122633,122627],{},[14,122635,122636],{},"启动后可使用如下命令查看服务是否正常运行：",[87,122638,122640],{"className":120795,"code":122639,"language":120797,"meta":120798,"style":18},"ps -e | grep ssh\n",[93,122641,122642],{"__ignoreMap":18},[96,122643,122644],{"class":98,"line":99},[96,122645,122639],{},[14,122647,122648],{},"如果启动成功，会包含 sshd 程序。",[14,122650,122651],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[87,122653,122655],{"className":120795,"code":122654,"language":120797,"meta":120798,"style":18},"sudo systemctl enable ssh\n",[93,122656,122657],{"__ignoreMap":18},[96,122658,122659],{"class":98,"line":99},[96,122660,122654],{},[14,122662,122663],{},"3.本地远程登录",[14,122665,122666],{},"登录远程主机可以调用如下命令:",[87,122668,122670],{"className":117275,"code":122669,"language":117277,"meta":18,"style":18},"ssh -X 用户名@ip地址\n",[93,122671,122672],{"__ignoreMap":18},[96,122673,122674,122676,122679],{"class":98,"line":99},[96,122675,121626],{"class":1946},[96,122677,122678],{"class":155}," -X",[96,122680,122681],{"class":211}," 用户名@ip地址\n",[14,122683,122684],{},"然后根据提示，录入登陆密码，即可成功登录。",[14,122686,122687],{},"如果退出，可以调用exit命令：",[87,122689,122691],{"className":120795,"code":122690,"language":120797,"meta":120798,"style":18},"exit\n",[93,122692,122693],{"__ignoreMap":18},[96,122694,122695],{"class":98,"line":99},[96,122696,122690],{},[14,122698,122699],{},[256,122700,122701],{},"4.实现数据传输",[14,122703,122704],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[14,122706,122707],{},"上传文件指令格式如下：",[87,122709,122711],{"className":120795,"code":122710,"language":120797,"meta":120798,"style":18},"scp 本地文件路径 账号@ip:路径\n",[93,122712,122713],{"__ignoreMap":18},[96,122714,122715],{"class":98,"line":99},[96,122716,122710],{},[14,122718,122719],{},"上传文件夹指令格式如下：",[87,122721,122723],{"className":120795,"code":122722,"language":120797,"meta":120798,"style":18},"scp -r 本地文件夹路径 账号@ip:路径\n",[93,122724,122725],{"__ignoreMap":18},[96,122726,122727],{"class":98,"line":99},[96,122728,122722],{},[14,122730,122731],{},"下载文件指令格式如下：",[87,122733,122735],{"className":120795,"code":122734,"language":120797,"meta":120798,"style":18},"scp 账号@ip:路径 本地文件夹路径\n",[93,122736,122737],{"__ignoreMap":18},[96,122738,122739],{"class":98,"line":99},[96,122740,122734],{},[14,122742,122743],{},"下载文件夹指令格式如下：",[87,122745,122747],{"className":120795,"code":122746,"language":120797,"meta":120798,"style":18},"scp -r 账号@ip:路径 本地文件夹路径\n",[93,122748,122749],{"__ignoreMap":18},[96,122750,122751],{"class":98,"line":99},[96,122752,122746],{},[14,122754,122755],{},[256,122756,122757],{},"优化",[14,122759,122760],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[50,122762,122763,122766],{},[53,122764,122765],{},"本地生成密钥对；",[53,122767,122768],{},"将公钥上传至远程主机。",[14,122770,122771],{},[256,122772,122773],{},"1.生成密钥对",[14,122775,122776],{},"本地客户端生成公私钥：（一路回车默认即可）",[87,122778,122780],{"className":120795,"code":122779,"language":120797,"meta":120798,"style":18},"ssh-keygen\n",[93,122781,122782],{"__ignoreMap":18},[96,122783,122784],{"class":98,"line":99},[96,122785,122779],{},[14,122787,122788],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[50,122790,122791,122794],{},[53,122792,122793],{},"id_rsa （私钥）；",[53,122795,122796],{},"id_rsa.pub (公钥)。",[14,122798,122799],{},[256,122800,122801],{},"2.公钥上传",[14,122803,122804],{},"上传指令如下：",[87,122806,122808],{"className":120795,"code":122807,"language":120797,"meta":120798,"style":18},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[93,122809,122810],{"__ignoreMap":18},[96,122811,122812],{"class":98,"line":99},[96,122813,122807],{},[14,122815,122816],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[14,122818,122819],{},"以后再远程登录就无需录入密码了。",[67,122821,122823],{"id":122822},"_723-使用vscode优化","7.2.3 使用VScode优化",[14,122825,122826],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[14,122828,122829],{},[256,122830,122831],{},"1.准备工作",[14,122833,122834],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[14,122836,122837],{},[256,122838,122839],{},"2.为VScode安装远程开发插件",[14,122841,122842,122843,122846,122847,122850,122851,28364],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[93,122844,122845],{},"扩展：商店","的搜索栏输入",[93,122848,122849],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[93,122852,122853],{},"安装",[14,122855,122856],{},[1445,122857],{"alt":18,"src":122858},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[14,122860,122861],{},[256,122862,122863],{},"3.配置远程连接",[14,122865,122866,122867,122870,122871,122874],{},"步骤1：使用快捷键",[93,122868,122869],{},"ctrl + shift + p","打开命令输入窗口，并输入",[93,122872,122873],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[14,122876,122877],{},[1445,122878],{"alt":18,"src":122879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[14,122881,122882,122883,28364],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[93,122884,122885],{},"Add New SSH Host",[14,122887,122888],{},[1445,122889],{"alt":18,"src":122890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[14,122892,122893,122894,122897,122898,122901,122902,122905],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[93,122895,122896],{},"ssh +X ubuntu@192.168.43.164","，其中，",[93,122899,122900],{},"ubuntu","需要替换为你的登录用户名，",[93,122903,122904],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[14,122907,122908],{},[1445,122909],{"alt":18,"src":122910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[14,122912,122913],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[14,122915,122916],{},[1445,122917],{"alt":18,"src":122918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[14,122920,122921],{},[1445,122922],{"alt":18,"src":122923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[14,122925,122926],{},[256,122927,122928],{},"4.使用",[14,122930,122931,122932,122870,122934,122936],{},"步骤1：继续使用快捷键",[93,122933,122869],{},[93,122935,122873],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[14,122938,122939],{},[1445,122940],{"alt":18,"src":122941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[14,122943,122944,122945,122948],{},"或者，也可以点击侧边栏的",[93,122946,122947],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[14,122950,122951],{},[1445,122952],{"alt":18,"src":122953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[14,122955,122956,122957,122960,122961,122964],{},"步骤2：选择菜单栏的",[93,122958,122959],{},"文件","下的",[93,122962,122963],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[14,122966,122967],{},[1445,122968],{"alt":18,"src":122969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[14,122971,122972],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[38,122974,122976],{"id":122975},"_73-远程桌面","7.3 远程桌面",[14,122978,122979],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[14,122981,122982],{},"我们选择使用VNC来看。",[50,122984,122985],{},[53,122986,122987],{},"安装VNC服务器：",[14,122989,122990],{},"这里以TigerVNC为例进行安装：",[87,122992,122994],{"className":117275,"code":122993,"language":117277,"meta":18,"style":18},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[93,122995,122996],{"__ignoreMap":18},[96,122997,122998,123000,123002,123004,123007],{"class":98,"line":99},[96,122999,24555],{"class":1946},[96,123001,117296],{"class":211},[96,123003,23819],{"class":211},[96,123005,123006],{"class":211}," tigervnc-standalone-server",[96,123008,123009],{"class":211}," tigervnc-common\n",[50,123011,123012],{"start":19},[53,123013,123014],{},"设置VNC密码：",[14,123016,123017],{},"为VNC用户设置密码，运行以下命令：",[87,123019,123021],{"className":117275,"code":123020,"language":117277,"meta":18,"style":18},"vncpasswd\n",[93,123022,123023],{"__ignoreMap":18},[96,123024,123025],{"class":98,"line":99},[96,123026,123020],{"class":1946},[50,123028,123029],{"start":1162},[53,123030,123031],{},"配置VNC启动脚本:",[14,123033,123034],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[87,123036,123038],{"className":117275,"code":123037,"language":117277,"meta":18,"style":18},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[93,123039,123040,123049],{"__ignoreMap":18},[96,123041,123042,123044,123046],{"class":98,"line":99},[96,123043,101245],{"class":1946},[96,123045,29195],{"class":155},[96,123047,123048],{"class":211}," ~\u002F.vnc\n",[96,123050,123051,123054],{"class":98,"line":19},[96,123052,123053],{"class":1946},"nano",[96,123055,123056],{"class":211}," ~\u002F.vnc\u002Fxstartup\n",[14,123058,123059],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[87,123061,123063],{"className":117275,"code":123062,"language":117277,"meta":18,"style":18},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[93,123064,123065,123070,123078,123085],{"__ignoreMap":18},[96,123066,123067],{"class":98,"line":99},[96,123068,123069],{"class":165},"#!\u002Fbin\u002Fsh\n",[96,123071,123072,123075],{"class":98,"line":19},[96,123073,123074],{"class":155},"unset",[96,123076,123077],{"class":211}," SESSION_MANAGER\n",[96,123079,123080,123082],{"class":98,"line":1162},[96,123081,123074],{"class":155},[96,123083,123084],{"class":211}," DBUS_SESSION_BUS_ADDRESS\n",[96,123086,123087],{"class":98,"line":1177},[96,123088,123089],{"class":1946},"gnome-session\n",[14,123091,123092],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[50,123094,123095],{"start":1177},[53,123096,123097],{},"给予执行权限：",[14,123099,123100],{},"为xstartup文件设置执行权限：",[87,123102,123104],{"className":117275,"code":123103,"language":117277,"meta":18,"style":18},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[93,123105,123106],{"__ignoreMap":18},[96,123107,123108,123110,123113],{"class":98,"line":99},[96,123109,24590],{"class":1946},[96,123111,123112],{"class":211}," +x",[96,123114,123056],{"class":211},[50,123116,123117],{"start":1183},[53,123118,123119],{},"启动VNC服务器：",[87,123121,123123],{"className":117275,"code":123122,"language":117277,"meta":18,"style":18},"vncserver -geometry 1920x1080 -localhost=0\n",[93,123124,123125],{"__ignoreMap":18},[96,123126,123127,123130,123133,123136],{"class":98,"line":99},[96,123128,123129],{"class":1946},"vncserver",[96,123131,123132],{"class":155}," -geometry",[96,123134,123135],{"class":211}," 1920x1080",[96,123137,123138],{"class":155}," -localhost=0\n",[14,123140,123141],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[14,123143,123144],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[50,123146,123147],{"start":1197},[53,123148,123149],{},"查看已开启的VNC服务器：",[87,123151,123153],{"className":117275,"code":123152,"language":117277,"meta":18,"style":18},"vncserver -list\n",[93,123154,123155],{"__ignoreMap":18},[96,123156,123157,123159],{"class":98,"line":99},[96,123158,123129],{"class":1946},[96,123160,123161],{"class":155}," -list\n",[14,123163,123164],{},[1445,123165],{"alt":18,"src":123166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[50,123168,123169],{"start":1203},[53,123170,123171],{},"连接到VNC服务器：",[14,123173,123174],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[50,123176,123177],{"start":1294},[53,123178,123179],{},"停止VNC服务器：",[14,123181,123182],{},"如果需要停止VNC服务器，可以使用以下命令：",[87,123184,123186],{"className":117275,"code":123185,"language":117277,"meta":18,"style":18},"vncserver -kill :1\n",[93,123187,123188],{"__ignoreMap":18},[96,123189,123190,123192,123195],{"class":98,"line":99},[96,123191,123129],{"class":1946},[96,123193,123194],{"class":155}," -kill",[96,123196,123197],{"class":211}," :1\n",[14,123199,123200],{},"将:1替换为你实际使用的显示编号。",[14,123202,123203],{},[1445,123204],{"alt":18,"src":123205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[14,123207,123208],{},[1445,123209],{"alt":18,"src":123210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[38,123212,123214],{"id":123213},"_74-usb端口设置","7.4 USB端口设置",[14,123216,123217],{},[256,123218,123219],{},"首先先配置好权限",[87,123221,123223],{"className":117275,"code":123222,"language":117277,"meta":18,"style":18},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[93,123224,123225,123230,123243,123250,123255],{"__ignoreMap":18},[96,123226,123227],{"class":98,"line":99},[96,123228,123229],{"class":165},"# 将用户权限提高\n",[96,123231,123232,123234,123236,123238,123241],{"class":98,"line":19},[96,123233,24555],{"class":1946},[96,123235,26553],{"class":211},[96,123237,26556],{"class":155},[96,123239,123240],{"class":211}," dialout",[96,123242,26561],{"class":106},[96,123244,123245,123247],{"class":98,"line":1162},[96,123246,26580],{"class":1946},[96,123248,123249],{"class":211}," dialout\n",[96,123251,123252],{"class":98,"line":1177},[96,123253,123254],{"class":165},"# 查看下面命令是否输出dialout（若输出才正常）\n",[96,123256,123257],{"class":98,"line":1183},[96,123258,123259],{"class":1946},"groups\n",[14,123261,123262],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[67,123264,123266],{"id":123265},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[14,123268,123269,123272],{},[256,123270,123271],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[14,123274,123275,123278],{},[256,123276,123277],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[14,123280,123281],{},[256,123282,123283],{},"流程如下：",[14,123285,123286],{},"（1）.查找设备idVendor和idProduct",[14,123288,123289,123290,123293],{},"接入两个USB设备，在终端调用指令",[93,123291,123292],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[14,123295,123296],{},[1445,123297],{"alt":18,"src":123298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[14,123300,123301,123302,123305],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[93,123303,123304],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[14,123307,123308],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[14,123310,123311],{},"（2）.编写映射规则",[14,123313,123314,123315,123318],{},"在",[93,123316,123317],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[87,123320,123322],{"className":117275,"code":123321,"language":117277,"meta":18,"style":18},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[93,123323,123324],{"__ignoreMap":18},[96,123325,123326,123328,123330],{"class":98,"line":99},[96,123327,24555],{"class":1946},[96,123329,118562],{"class":211},[96,123331,123332],{"class":211}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[14,123334,123335],{},"输入如下内容：",[87,123337,123339],{"className":117275,"code":123338,"language":117277,"meta":18,"style":18},"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",[93,123340,123341,123371],{"__ignoreMap":18},[96,123342,123343,123346,123348,123351,123354,123357,123360,123362,123365,123368],{"class":98,"line":99},[96,123344,123345],{"class":106},"KERNEL",[96,123347,152],{"class":102},[96,123349,123350],{"class":211},"=\"ttyUSB*\",",[96,123352,123353],{"class":1946}," ATTRS",[96,123355,123356],{"class":211},"{idVendor}==",[96,123358,123359],{"class":1946},"\"10c4\"",[96,123361,485],{"class":1946},[96,123363,123364],{"class":211}," ATTRS{idProduct}==\"ea60\",",[96,123366,123367],{"class":211}," MODE:=\"0777\",",[96,123369,123370],{"class":211}," SYMLINK+=\"mylidar\"\n",[96,123372,123373,123375,123377,123379,123381,123383,123386,123388,123391,123393],{"class":98,"line":19},[96,123374,123345],{"class":106},[96,123376,152],{"class":102},[96,123378,123350],{"class":211},[96,123380,123353],{"class":1946},[96,123382,123356],{"class":211},[96,123384,123385],{"class":1946},"\"1a86\"",[96,123387,485],{"class":1946},[96,123389,123390],{"class":211}," ATTRS{idProduct}==\"7523\",",[96,123392,123367],{"class":211},[96,123394,123395],{"class":211}," SYMLINK+=\"mycar\"\n",[14,123397,123398],{},"代码解释：",[1114,123400,123401,123404,123407,123410],{},[53,123402,123403],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[53,123405,123406],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[53,123408,123409],{},"SYMLINK是符号连接，即绑定的别名；",[53,123411,123412],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[14,123414,123415,123416,123419,123422],{},"***小提示：***",[23538,123417,123418],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[93,123420,123421],{},"\u002Fetc\u002Fudev\u002Frule.d",[23538,123423,123424],{},"目录即可。",[14,123426,123427],{},"表格 还在加载中，请等待加载完成后再尝试复制",[14,123429,123430],{},"（3）.使规则生效",[14,123432,123433],{},"在终端下输入如下指令：",[87,123435,123437],{"className":117275,"code":123436,"language":117277,"meta":18,"style":18},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[93,123438,123439,123444,123456,123467,123471,123476,123489],{"__ignoreMap":18},[96,123440,123441],{"class":98,"line":99},[96,123442,123443],{"class":165},"# Ubuntu用下方命令\n",[96,123445,123446,123448,123450,123453],{"class":98,"line":19},[96,123447,24555],{"class":1946},[96,123449,120027],{"class":211},[96,123451,123452],{"class":211}," udev",[96,123454,123455],{"class":211}," reload\n",[96,123457,123458,123460,123462,123464],{"class":98,"line":1162},[96,123459,24555],{"class":1946},[96,123461,120027],{"class":211},[96,123463,123452],{"class":211},[96,123465,123466],{"class":211}," restart\n",[96,123468,123469],{"class":98,"line":1177},[96,123470,2383],{"emptyLinePlaceholder":23},[96,123472,123473],{"class":98,"line":1183},[96,123474,123475],{"class":165},"#Fedora用下方命令\n",[96,123477,123478,123480,123483,123486],{"class":98,"line":1197},[96,123479,24555],{"class":1946},[96,123481,123482],{"class":211}," udevadm",[96,123484,123485],{"class":211}," control",[96,123487,123488],{"class":155}," --reload\n",[96,123490,123491,123493,123495],{"class":98,"line":1203},[96,123492,24555],{"class":1946},[96,123494,123482],{"class":211},[96,123496,123497],{"class":211}," trigger\n",[14,123499,123500],{},"再重新插拔设备即可。",[14,123502,123503],{},"（4）.测试",[14,123505,123506],{},"终端下输入如下指令",[87,123508,123510],{"className":117275,"code":123509,"language":117277,"meta":18,"style":18},"ll \u002Fdev | grep ttyUSB\n",[93,123511,123512],{"__ignoreMap":18},[96,123513,123514,123517,123520,123522,123524],{"class":98,"line":99},[96,123515,123516],{"class":1946},"ll",[96,123518,123519],{"class":211}," \u002Fdev",[96,123521,25088],{"class":102},[96,123523,30215],{"class":1946},[96,123525,123526],{"class":211}," ttyUSB\n",[14,123528,123529],{},"运行结果如下：",[14,123531,123532],{},[1445,123533],{"alt":18,"src":123534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[14,123536,123537,123538,123541],{},"也可以多次插拔USB设备，会发现设备端口",[93,123539,123540],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[14,123543,123544],{},[256,123545,117943],{},[14,123547,123548],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[67,123550,123552],{"id":123551},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[14,123554,123555,123557],{},[256,123556,123271],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[14,123559,123560,123562],{},[256,123561,123277],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[14,123564,123565],{},[256,123566,123283],{},[14,123568,123569],{},"（1）.查看所连接的主机USB接口的KERNELS",[14,123571,123572],{},"调用如下指令查看第一台雷达的USB信息：",[87,123574,123576],{"className":117275,"code":123575,"language":117277,"meta":18,"style":18},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[93,123577,123578,123598],{"__ignoreMap":18},[96,123579,123580,123583,123585,123588,123591,123593,123595],{"class":98,"line":99},[96,123581,123582],{"class":1946},"udevadm",[96,123584,69800],{"class":211},[96,123586,123587],{"class":155}," --attribute-walk",[96,123589,123590],{"class":155}," --name=\u002Fdev\u002FttyUSB0",[96,123592,25088],{"class":102},[96,123594,30215],{"class":1946},[96,123596,123597],{"class":211}," KERNELS\n",[96,123599,123600,123602,123604,123606,123609,123611,123613],{"class":98,"line":19},[96,123601,123582],{"class":1946},[96,123603,69800],{"class":211},[96,123605,123587],{"class":155},[96,123607,123608],{"class":155}," --name=\u002Fdev\u002FttyACM0",[96,123610,25088],{"class":102},[96,123612,30215],{"class":1946},[96,123614,123597],{"class":211},[14,123616,123617],{},[1445,123618],{"alt":18,"src":123619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[14,123621,123622],{},"调用如下指令查看第二台雷达的USB信息：",[87,123624,123626],{"className":117275,"code":123625,"language":117277,"meta":18,"style":18},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[93,123627,123628],{"__ignoreMap":18},[96,123629,123630,123632,123634,123636,123639,123641,123643],{"class":98,"line":99},[96,123631,123582],{"class":1946},[96,123633,69800],{"class":211},[96,123635,123587],{"class":155},[96,123637,123638],{"class":155}," --name=\u002Fdev\u002FttyUSB1",[96,123640,25088],{"class":102},[96,123642,30215],{"class":1946},[96,123644,123597],{"class":211},[14,123646,123647,123648,123651,123652,123655,123656,123659],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[93,123649,123650],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[93,123653,123654],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[256,123657,123658],{},"唯一性标识","”。",[14,123661,123311],{},[14,123663,123314,123664,123666],{},[93,123665,123317],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[87,123668,123669],{"className":117275,"code":123321,"language":117277,"meta":18,"style":18},[93,123670,123671],{"__ignoreMap":18},[96,123672,123673,123675,123677],{"class":98,"line":99},[96,123674,24555],{"class":1946},[96,123676,118562],{"class":211},[96,123678,123332],{"class":211},[87,123680,123682],{"className":117275,"code":123681,"language":117277,"meta":18,"style":18},"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",[93,123683,123684,123713],{"__ignoreMap":18},[96,123685,123686,123688,123690,123692,123695,123697,123700,123703,123705,123708,123710],{"class":98,"line":99},[96,123687,123345],{"class":106},[96,123689,152],{"class":102},[96,123691,123350],{"class":211},[96,123693,123694],{"class":106}," KERNELS",[96,123696,152],{"class":102},[96,123698,123699],{"class":211},"=\"1-1.3:1.0\",",[96,123701,123702],{"class":1946}," MODE:",[96,123704,152],{"class":211},[96,123706,123707],{"class":1946},"\"0777\"",[96,123709,485],{"class":1946},[96,123711,123712],{"class":211}," SYMLINK+=\"rplidar_front\"\n",[96,123714,123715,123717,123719,123721,123723,123725,123728,123730,123732,123734,123736],{"class":98,"line":19},[96,123716,123345],{"class":106},[96,123718,152],{"class":102},[96,123720,123350],{"class":211},[96,123722,123694],{"class":106},[96,123724,152],{"class":102},[96,123726,123727],{"class":211},"=\"1-1.4:1.0\",",[96,123729,123702],{"class":1946},[96,123731,152],{"class":211},[96,123733,123707],{"class":1946},[96,123735,485],{"class":1946},[96,123737,123738],{"class":211}," SYMLINK+=\"rplidar_back\"\n",[14,123740,123430],{},[14,123742,123433],{},[87,123744,123745],{"className":117275,"code":123436,"language":117277,"meta":18,"style":18},[93,123746,123747,123751,123761,123771,123775,123779,123789],{"__ignoreMap":18},[96,123748,123749],{"class":98,"line":99},[96,123750,123443],{"class":165},[96,123752,123753,123755,123757,123759],{"class":98,"line":19},[96,123754,24555],{"class":1946},[96,123756,120027],{"class":211},[96,123758,123452],{"class":211},[96,123760,123455],{"class":211},[96,123762,123763,123765,123767,123769],{"class":98,"line":1162},[96,123764,24555],{"class":1946},[96,123766,120027],{"class":211},[96,123768,123452],{"class":211},[96,123770,123466],{"class":211},[96,123772,123773],{"class":98,"line":1177},[96,123774,2383],{"emptyLinePlaceholder":23},[96,123776,123777],{"class":98,"line":1183},[96,123778,123475],{"class":165},[96,123780,123781,123783,123785,123787],{"class":98,"line":1197},[96,123782,24555],{"class":1946},[96,123784,123482],{"class":211},[96,123786,123485],{"class":211},[96,123788,123488],{"class":155},[96,123790,123791,123793,123795],{"class":98,"line":1203},[96,123792,24555],{"class":1946},[96,123794,123482],{"class":211},[96,123796,123497],{"class":211},[14,123798,123500],{},[14,123800,123503],{},[14,123802,123506,123803,123806],{},[93,123804,123805],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[14,123808,123809],{},[1445,123810],{"alt":18,"src":123811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[14,123813,123814],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[14,123816,123817,123819],{},[256,123818,117943],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[67,123821,123823],{"id":123822},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[14,123825,123826],{},"（1）.查看所连接的主机USB接口的信息",[87,123828,123830],{"className":117275,"code":123829,"language":117277,"meta":18,"style":18},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[93,123831,123832,123862],{"__ignoreMap":18},[96,123833,123834,123836,123838,123841,123843,123845,123847,123849,123852,123855,123857,123860],{"class":98,"line":99},[96,123835,123582],{"class":1946},[96,123837,69800],{"class":211},[96,123839,123840],{"class":155}," -a",[96,123842,29195],{"class":155},[96,123844,28401],{"class":106},[96,123846,123582],{"class":1946},[96,123848,69800],{"class":211},[96,123850,123851],{"class":155}," -q",[96,123853,123854],{"class":211}," path",[96,123856,25094],{"class":155},[96,123858,123859],{"class":211}," \u002Fdev\u002FttyACM0",[96,123861,113],{"class":106},[96,123863,123864,123866,123868,123870,123872,123874,123876,123878,123880,123882,123884,123887],{"class":98,"line":19},[96,123865,123582],{"class":1946},[96,123867,69800],{"class":211},[96,123869,123840],{"class":155},[96,123871,29195],{"class":155},[96,123873,28401],{"class":106},[96,123875,123582],{"class":1946},[96,123877,69800],{"class":211},[96,123879,123851],{"class":155},[96,123881,123854],{"class":211},[96,123883,25094],{"class":155},[96,123885,123886],{"class":211}," \u002Fdev\u002FttyUSB0",[96,123888,113],{"class":106},[14,123890,123891],{},[1445,123892],{"alt":18,"src":123893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[14,123895,123896],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[14,123898,123311],{},[14,123900,123314,123901,123666],{},[93,123902,123317],{},[87,123904,123905],{"className":117275,"code":123321,"language":117277,"meta":18,"style":18},[93,123906,123907],{"__ignoreMap":18},[96,123908,123909,123911,123913],{"class":98,"line":99},[96,123910,24555],{"class":1946},[96,123912,118562],{"class":211},[96,123914,123332],{"class":211},[87,123916,123918],{"className":117275,"code":123917,"language":117277,"meta":18,"style":18},"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",[93,123919,123920,123948,123974],{"__ignoreMap":18},[96,123921,123922,123924,123926,123929,123931,123933,123935,123937,123940,123943,123945],{"class":98,"line":99},[96,123923,123345],{"class":106},[96,123925,152],{"class":102},[96,123927,123928],{"class":211},"=\"ttyACM*\",",[96,123930,123353],{"class":1946},[96,123932,123356],{"class":211},[96,123934,123385],{"class":1946},[96,123936,485],{"class":1946},[96,123938,123939],{"class":211}," ATTRS{idProduct}==\"55d4\",",[96,123941,123942],{"class":211}," ATTRS{serial}==\"0001\",",[96,123944,123367],{"class":211},[96,123946,123947],{"class":211}," SYMLINK+=\"ttyACM_MCU\"\n",[96,123949,123950,123952,123954,123956,123958,123960,123962,123964,123966,123969,123971],{"class":98,"line":19},[96,123951,123345],{"class":106},[96,123953,152],{"class":102},[96,123955,123928],{"class":211},[96,123957,123353],{"class":1946},[96,123959,123356],{"class":211},[96,123961,123385],{"class":1946},[96,123963,485],{"class":1946},[96,123965,123939],{"class":211},[96,123967,123968],{"class":211}," ATTRS{serial}==\"0002\",",[96,123970,123367],{"class":211},[96,123972,123973],{"class":211}," SYMLINK+=\"ttyACM_Lidar\"\n",[96,123975,123976,123978,123980,123982,123984,123986,123988,123990,123992,123994],{"class":98,"line":1162},[96,123977,123345],{"class":106},[96,123979,152],{"class":102},[96,123981,123350],{"class":211},[96,123983,123353],{"class":1946},[96,123985,123356],{"class":211},[96,123987,123385],{"class":1946},[96,123989,485],{"class":1946},[96,123991,123390],{"class":211},[96,123993,123367],{"class":211},[96,123995,123996],{"class":211}," SYMLINK+=\"ttyUSB_IMU\"\n",[14,123998,123430],{},[14,124000,123433],{},[87,124002,124003],{"className":117275,"code":123436,"language":117277,"meta":18,"style":18},[93,124004,124005,124009,124019,124029,124033,124037,124047],{"__ignoreMap":18},[96,124006,124007],{"class":98,"line":99},[96,124008,123443],{"class":165},[96,124010,124011,124013,124015,124017],{"class":98,"line":19},[96,124012,24555],{"class":1946},[96,124014,120027],{"class":211},[96,124016,123452],{"class":211},[96,124018,123455],{"class":211},[96,124020,124021,124023,124025,124027],{"class":98,"line":1162},[96,124022,24555],{"class":1946},[96,124024,120027],{"class":211},[96,124026,123452],{"class":211},[96,124028,123466],{"class":211},[96,124030,124031],{"class":98,"line":1177},[96,124032,2383],{"emptyLinePlaceholder":23},[96,124034,124035],{"class":98,"line":1183},[96,124036,123475],{"class":165},[96,124038,124039,124041,124043,124045],{"class":98,"line":1197},[96,124040,24555],{"class":1946},[96,124042,123482],{"class":211},[96,124044,123485],{"class":211},[96,124046,123488],{"class":155},[96,124048,124049,124051,124053],{"class":98,"line":1203},[96,124050,24555],{"class":1946},[96,124052,123482],{"class":211},[96,124054,123497],{"class":211},[14,124056,124057,124058],{},"再重新插拔设备即可，或者 ",[256,124059,124060],{},"直接重启系统。",[14,124062,123503],{},[14,124064,123506,124065,123806],{},[93,124066,123805],{},[14,124068,124069],{},[1445,124070],{"alt":18,"src":124071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[14,124073,123814],{},[14,124075,124076,124078],{},[256,124077,117943],{}," 一些设备可能没有串口号等。",[67,124080,124082],{"id":124081},"_744-其他注意事项","7.4.4 其他注意事项",[14,124084,124085,124086,124088,124089,124092,124093,18394,124096,124099,124100,124102],{},"并非所有的USB设备端口号都是",[93,124087,123540],{},"的格式，比如Arduino的端口号可能是",[93,124090,124091],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[93,124094,124095],{},"videon",[93,124097,124098],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[93,124101,124095],{},"端口，绑定时需要关联的也是该接口。",[14,124104,124105,124106,124109,124110,124113,124114,124116,124117,124120,124121,124124,124125,124128,124129,124128,124132,124128,124135,28364],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[93,124107,124108],{},"KERNEL==\"ttyUSB*\"","修改为",[93,124111,124112],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[93,124115,124108],{},"修改为类似于",[93,124118,124119],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[93,124122,124123],{},"video[0,2,4,6]","表示可以绑定的端口为",[93,124126,124127],{},"video0","或",[93,124130,124131],{},"video2",[93,124133,124134],{},"video4",[93,124136,124137],{},"video6",[38,124139,124141],{"id":124140},"_75-挂载内网网页","7.5 挂载内网网页",[14,124143,124144],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[14,124146,124147],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[14,124149,124150],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[14,124152,124153,124154],{},"Termux 下载地址（F-Droid）：",[345,124155,124156],{"href":124156,"rel":124157},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[23850],[14,124159,124160],{},"首先打开app后，先更新软件缓存：",[87,124162,124164],{"className":117275,"code":124163,"language":117277,"meta":18,"style":18},"pkg update\n",[93,124165,124166],{"__ignoreMap":18},[96,124167,124168,124171],{"class":98,"line":99},[96,124169,124170],{"class":1946},"pkg",[96,124172,26221],{"class":211},[14,124174,124175],{},"然后换源",[87,124177,124179],{"className":117275,"code":124178,"language":117277,"meta":18,"style":18},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[93,124180,124181],{"__ignoreMap":18},[96,124182,124183,124185,124188],{"class":98,"line":99},[96,124184,123053],{"class":1946},[96,124186,124187],{"class":106}," $PREFIX",[96,124189,124190],{"class":211},"\u002Fetc\u002Fapt\u002Fsources.list\n",[14,124192,124193],{},"将该文件内容替换为下面：",[87,124195,124197],{"className":117275,"code":124196,"language":117277,"meta":18,"style":18},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[93,124198,124199],{"__ignoreMap":18},[96,124200,124201,124204,124207,124210],{"class":98,"line":99},[96,124202,124203],{"class":1946},"deb",[96,124205,124206],{"class":211}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[96,124208,124209],{"class":211}," stable",[96,124211,124212],{"class":211}," main\n",[1114,124214,124215,124242],{},[53,124216,124217,124218,124220,124221],{},"如果你使用的是",[93,124219,123053],{},"编辑器：",[1114,124222,124223,124230,124236],{},[53,124224,124225,124226,124229],{},"按 ",[93,124227,124228],{},"Ctrl+O"," 保存文件。",[53,124231,124225,124232,124235],{},[93,124233,124234],{},"Enter"," 确认文件名。",[53,124237,124225,124238,124241],{},[93,124239,124240],{},"Ctrl+X"," 退出编辑器。",[53,124243,124217,124244,124220,124247],{},[93,124245,124246],{},"vim",[1114,124248,124249,124255],{},[53,124250,124225,124251,124254],{},[93,124252,124253],{},"Esc"," 退出编辑模式。",[53,124256,124257,124258,124260],{},"输入 ",[93,124259,119200],{}," 保存并退出。",[14,124262,124263],{},"接下来重新更新软件源：",[87,124265,124267],{"className":117275,"code":124266,"language":117277,"meta":18,"style":18},"pkg update && pkg upgrade\n",[93,124268,124269],{"__ignoreMap":18},[96,124270,124271,124273,124275,124277,124279],{"class":98,"line":99},[96,124272,124170],{"class":1946},[96,124274,117326],{"class":211},[96,124276,26169],{"class":106},[96,124278,124170],{"class":1946},[96,124280,117312],{"class":211},[14,124282,124283],{},"安装python：",[87,124285,124287],{"className":117275,"code":124286,"language":117277,"meta":18,"style":18},"pkg install python\n",[93,124288,124289],{"__ignoreMap":18},[96,124290,124291,124293,124295],{"class":98,"line":99},[96,124292,124170],{"class":1946},[96,124294,23819],{"class":211},[96,124296,124297],{"class":211}," python\n",[14,124299,124300,26452],{},[256,124301,124302],{},"通过Termux访问设备存储",[14,124304,124305],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[87,124307,124309],{"className":117275,"code":124308,"language":117277,"meta":18,"style":18},"termux-setup-storage\n",[93,124310,124311],{"__ignoreMap":18},[96,124312,124313],{"class":98,"line":99},[96,124314,124308],{"class":1946},[50,124316,124317],{},[53,124318,124319,26452,124322],{},[256,124320,124321],{},"进入HTML文件所在的目录",[50,124323,124324],{},[53,124325,124326,124327,124329],{},"使用",[93,124328,101255],{},"命令进入HTML文件所在的目录：",[87,124331,124333],{"className":117275,"code":124332,"language":117277,"meta":18,"style":18},"cd ~\u002Fyour_html_folder\n",[93,124334,124335],{"__ignoreMap":18},[96,124336,124337,124339],{"class":98,"line":99},[96,124338,101255],{"class":155},[96,124340,124341],{"class":211}," ~\u002Fyour_html_folder\n",[50,124343,124344],{"start":19},[53,124345,124346,26452,124349,124354,124371],{},[256,124347,124348],{},"启动Python HTTP服务器",[50,124350,124351],{},[53,124352,124353],{},"运行以下命令启动一个简单的HTTP服务器：",[87,124355,124357],{"className":117275,"code":124356,"language":117277,"meta":18,"style":18},"python -m http.server 8000\n",[93,124358,124359],{"__ignoreMap":18},[96,124360,124361,124363,124365,124368],{"class":98,"line":99},[96,124362,30359],{"class":1946},[96,124364,100861],{"class":155},[96,124366,124367],{"class":211}," http.server",[96,124369,124370],{"class":155}," 8000\n",[50,124372,124373],{"start":1162},[53,124374,124375,124376,124379],{},"这会在端口",[93,124377,124378],{},"8000","上启动一个Web服务器。",[1114,124381,124382],{},[53,124383,124384],{},"启动服务器后，Termux会显示日志信息，例如：",[87,124386,124388],{"className":120795,"code":124387,"language":120797,"meta":120798,"style":18},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[93,124389,124390],{"__ignoreMap":18},[96,124391,124392],{"class":98,"line":99},[96,124393,124387],{},[1114,124395,124396],{},[53,124397,124398],{},"这表示服务器已成功启动。",[14,124400,124401],{},[256,124402,124403],{},"在浏览器中访问HTML文件",[50,124405,124406],{},[53,124407,124408,26452,124411,124416],{},[256,124409,124410],{},"在同一设备上访问",[50,124412,124413],{},[53,124414,124415],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[87,124417,124420],{"className":124418,"code":124419,"language":71643,"meta":18,"style":18},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[93,124421,124422],{"__ignoreMap":18},[96,124423,124424,124427],{"class":98,"line":99},[96,124425,124426],{"class":106},"http:",[96,124428,124429],{"class":165},"\u002F\u002Flocalhost:8000\n",[1114,124431,124432],{},[53,124433,124434,124435,124438],{},"如果HTML文件中有",[93,124436,124437],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[38,124440,124442],{"id":124441},"_76-linux重点知识","7.6 Linux重点知识",[67,124444,124446],{"id":124445},"_761-关于点的说明","7.6.1 关于点的说明",[14,124448,124449],{},[1445,124450],{"alt":18,"src":124451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[14,124453,124454],{},"一点本目录，两点上目录",[67,124456,124458],{"id":124457},"_762-目录","7.6.2 目录",[21982,124460,124462],{"id":124461},"_7621-系统启动必须","7.6.2.1 系统启动必须",[14,124464,124465],{},[256,124466,124467],{},"\u002Fboot:",[14,124469,124470],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[14,124472,124473],{},[256,124474,124475],{},"\u002Fetc:",[14,124477,124478],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[14,124480,124481],{},[256,124482,124483],{},"\u002Flib：",[14,124485,124486],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[14,124488,124489],{},[256,124490,124491],{},"\u002Fsys:",[14,124493,124494],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[21982,124496,124498],{"id":124497},"_7622-指令集合","7.6.2.2 指令集合",[14,124500,124501],{},[256,124502,124503],{},"\u002Fbin:",[14,124505,124506],{},"为二进制文件的缩写，存放最经常使用的命令",[14,124508,124509],{},[256,124510,124511],{},"\u002Fsbin:",[14,124513,124514],{},"只有系统管理员才能使用的程序和指令",[21982,124516,124518],{"id":124517},"_7623-外部文件管理","7.6.2.3 外部文件管理",[14,124520,124521],{},[256,124522,124523],{},"\u002Fdev:",[14,124525,124526],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[14,124528,124529],{},[256,124530,124531],{},"\u002Fmedia:",[14,124533,124534],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[14,124536,124537],{},[256,124538,124539],{},"\u002Fmnt:",[14,124541,124542],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[21982,124544,124546],{"id":124545},"_7624-临时文件","7.6.2.4 临时文件",[14,124548,124549],{},[256,124550,124551],{},"\u002Frun:",[14,124553,124554],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[14,124556,124557],{},[256,124558,124559],{},"\u002Flost+found:",[14,124561,124562],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[14,124564,124565],{},[256,124566,124567],{},"\u002Ftmp:",[14,124569,124570],{},"这个目录是用来存放一些临时文件的",[21982,124572,124574],{"id":124573},"_7625-账户","7.6.2.5 账户",[14,124576,124577],{},[256,124578,124579],{},"\u002Froot：",[14,124581,124582],{},"系统管理员的用户主目录",[14,124584,124585,26452],{},[256,124586,124587],{},"\u002Fhome",[14,124589,124590],{},"用户的主目录，以用户的账号命名的",[14,124592,124593,26452],{},[256,124594,124595],{},"\u002Fusr",[14,124597,124598],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[14,124600,124601],{},[256,124602,124603],{},"\u002Fusr\u002Fbin：",[14,124605,124606],{},"系统用户使用的应用程序与指令",[14,124608,124609],{},[256,124610,124611],{},"\u002Fusr\u002Fsbin：",[14,124613,124614],{},"超级用户使用的比较高级的管理程序和系统守护程序",[14,124616,124617],{},[256,124618,124619],{},"\u002Fusr\u002Fsrc：",[14,124621,124622],{},"内核源代码默认的放置目录",[21982,124624,124626],{"id":124625},"_7626-运行过程要用","7.6.2.6 运行过程要用",[14,124628,124629],{},[256,124630,124631],{},"\u002Fvar：",[14,124633,124634],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[14,124636,124637],{},[256,124638,124639],{},"\u002Fproc:",[14,124641,124642,124643,124646],{},"管理 ",[256,124644,124645],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[21982,124648,124650],{"id":124649},"_7627-扩展用的","7.6.2.7 扩展用的",[14,124652,124653],{},[256,124654,124655],{},"\u002Fopt:",[14,124657,124658],{},"默认是空的，我们安装额外软件可以放在这个里面",[14,124660,124661],{},[256,124662,124663],{},"\u002Fsrv:",[14,124665,124666],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[67,124668,124670],{"id":124669},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[14,124672,124673],{},[1445,124674],{"alt":18,"src":124675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[14,124677,124678],{},"windows-->linux:",[14,124680,124681],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[14,124683,124684],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[14,124686,124687],{},"linux传输文件到windows",[14,124689,124690],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[67,124692,124694],{"id":124693},"_764-易忘知识","7.6.4 易忘知识",[14,124696,124697],{},"操作系统内核查看",[87,124699,124700],{"className":117275,"code":121269,"language":117277,"meta":18,"style":18},[93,124701,124702],{"__ignoreMap":18},[96,124703,124704,124706],{"class":98,"line":99},[96,124705,70183],{"class":1946},[96,124707,121278],{"class":155},[14,124709,124710],{},[1445,124711],{"alt":18,"src":124712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[14,124714,124715],{},[1445,124716],{"alt":18,"src":124717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[87,124719,124721],{"className":117275,"code":124720,"language":117277,"meta":18,"style":18},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[93,124722,124723,124735],{"__ignoreMap":18},[96,124724,124725,124727,124730,124733],{"class":98,"line":99},[96,124726,121486],{"class":1946},[96,124728,124729],{"class":211}," mvtest",[96,124731,124732],{"class":211}," mvtest2",[96,124734,2657],{"class":106},[96,124736,124737],{"class":98,"line":19},[96,124738,124739],{"class":1946},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[14,124741,124742],{},[1445,124743],{"alt":18,"src":124744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[14,124746,124747],{},[1445,124748],{"alt":18,"src":124749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[14,124751,124752,124753,124756],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[93,124754,124755],{},"du -a"," 可以快速查看磁盘使用细节。",[67,124758,124760],{"id":124759},"_765-vim","7.6.5 Vim",[14,124762,124763],{},[1445,124764],{"alt":18,"src":124765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[14,124767,124768],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[14,124770,124771],{},"一开始进去为命令模式，此时点击输入的字母为命令",[14,124773,124774],{},[256,124775,124776],{},"1.命令模式：",[14,124778,124779],{},"i 切换到输入模式，在光标当前位置开始输入文本",[14,124781,124782],{},"x 删除当前光标所在处的字符",[14,124784,124785],{},"：切换到底线命令模式，以在最底一行输入命令",[14,124787,124788],{},"a 进行插入模式，在光标下一个位置输入文本",[14,124790,124791],{},"o 在当前的下方插入一个新行，并进入插入模式",[14,124793,124794],{},"0 在当前行的上方插入一个新行，并进入插入模式",[14,124796,124797],{},"dd 剪切当前行",[14,124799,124800],{},"yy 复制当前行",[14,124802,124803],{},"p 粘贴剪贴板内容到光标下方",[14,124805,124806],{},"P 粘贴剪贴板内容到光标上方",[14,124808,124809],{},"u 撤销上一次操作",[14,124811,124812],{},"ctrl+r 重做上一次操作",[14,124814,124815,124817],{},[902,124816],{}," 保存文件",[14,124819,124820,124822],{},[752,124821],{}," 退出Vim编辑器",[14,124824,124825,124827],{},[752,124826],{},"! 强制退出Vim编辑器，不保存修改",[14,124829,124830],{},[256,124831,124832],{},"2.输入模式：",[14,124834,124835],{},[1445,124836],{"alt":18,"src":124837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[14,124839,124840],{},[256,124841,124842],{},"3.底线命令模式：",[14,124844,124845],{},[1445,124846],{"alt":18,"src":124847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[14,124849,124850],{},"按下esc可以退出底线命令模式",[67,124852,124854],{"id":124853},"_766-apt","7.6.6 apt",[14,124856,124857],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[67,124859,124861],{"id":124860},"_767-home与root的区别","7.6.7 home与root的区别",[14,124863,124864],{},[1445,124865],{"alt":18,"src":124866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[14,124868,124869],{},[1445,124870],{"alt":18,"src":124871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[14,124873,124874],{},[1445,124875],{"alt":18,"src":124876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[14,124878,124879],{},[1445,124880],{"alt":18,"src":124881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[67,124883,124885],{"id":124884},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[14,124887,124888],{},[345,124889,124890],{"href":124890,"rel":124891},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[23850],[50,124893,124894,124897],{},[53,124895,124896],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[53,124898,124899],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[14,124901,124902],{},[1445,124903],{"alt":18,"src":124904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[14,124906,124907],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[14,124909,124910],{},[1445,124911],{"alt":18,"src":124912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[87,124914,124916],{"className":120795,"code":124915,"language":120797,"meta":120798,"style":18},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[93,124917,124918,124923],{"__ignoreMap":18},[96,124919,124920],{"class":98,"line":99},[96,124921,124922],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[96,124924,124925],{"class":98,"line":19},[96,124926,124927],{},".\u002Fpycharm.sh\n",[14,124929,124930],{},"3️⃣创建.desktop文件",[14,124932,124933],{},[256,124934,124935],{},"原理：",[1114,124937,124938,124948],{},[53,124939,124940,124941,124947],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[256,124942,124943,124946],{},[93,124944,124945],{},".desktop"," 文件"," 来识别应用。",[53,124949,124950,124952,124953],{},[93,124951,124945],{}," 文件相当于一个“应用注册表”，告诉系统：",[1114,124954,124955,124958,124961,124964,124967],{},[53,124956,124957],{},"应用名字（Name）",[53,124959,124960],{},"图标（Icon）",[53,124962,124963],{},"执行命令（Exec）",[53,124965,124966],{},"分类（Categories）",[53,124968,124969],{},"是否需要终端（Terminal）",[87,124971,124973],{"className":120795,"code":124972,"language":120797,"meta":120798,"style":18},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[93,124974,124975,124980],{"__ignoreMap":18},[96,124976,124977],{"class":98,"line":99},[96,124978,124979],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[96,124981,124982],{"class":98,"line":19},[96,124983,124984],{},"nano pycharm.desktop\n",[14,124986,124987],{},"nano是一个命令行下的编辑器，也可以使用vim",[87,124989,124991],{"className":120795,"code":124990,"language":120797,"meta":120798,"style":18},"[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",[93,124992,124993,124998,125003,125008,125013,125018,125023,125028,125033,125038],{"__ignoreMap":18},[96,124994,124995],{"class":98,"line":99},[96,124996,124997],{},"[Desktop Entry]\n",[96,124999,125000],{"class":98,"line":19},[96,125001,125002],{},"Version=1.0\n",[96,125004,125005],{"class":98,"line":1162},[96,125006,125007],{},"Type=Application\n",[96,125009,125010],{"class":98,"line":1177},[96,125011,125012],{},"Name=PyCharm\n",[96,125014,125015],{"class":98,"line":1183},[96,125016,125017],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[96,125019,125020],{"class":98,"line":1197},[96,125021,125022],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[96,125024,125025],{"class":98,"line":1203},[96,125026,125027],{},"Comment=JetBrains PyCharm IDE\n",[96,125029,125030],{"class":98,"line":1294},[96,125031,125032],{},"Categories=Development;IDE;\n",[96,125034,125035],{"class":98,"line":1300},[96,125036,125037],{},"Terminal=false\n",[96,125039,125040],{"class":98,"line":1312},[96,125041,125042],{},"StartupWMClass=jetbrains-pycharm\n",[1114,125044,125045,125051,125057,125063],{},[53,125046,125047,125050],{},[93,125048,125049],{},"Exec"," → 点击图标时执行的命令",[53,125052,125053,125056],{},[93,125054,125055],{},"Icon"," → 显示在菜单和桌面上的图标",[53,125058,125059,125062],{},[93,125060,125061],{},"Terminal=false"," → 不打开终端",[53,125064,125065,125068],{},[93,125066,125067],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125070,125071,125072],"blockquote",{},[14,125073,125074,125075,125077,125078],{},"可以理解成 ",[93,125076,124945],{}," 文件是 Linux 的 ",[256,125079,125080],{},"快捷方式配置文件",[14,125082,125083],{},"4️⃣设置可执行权限",[87,125085,125087],{"className":120795,"code":125086,"language":120797,"meta":120798,"style":18},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[93,125088,125089],{"__ignoreMap":18},[96,125090,125091],{"class":98,"line":99},[96,125092,125086],{},[14,125094,125095],{},"5️⃣桌面图标启动的话如下：",[87,125097,125099],{"className":120795,"code":125098,"language":120797,"meta":120798,"style":18},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[93,125100,125101,125106],{"__ignoreMap":18},[96,125102,125103],{"class":98,"line":99},[96,125104,125105],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[96,125107,125108],{"class":98,"line":19},[96,125109,125110],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[50,125112,125113],{"start":1162},[53,125114,125115],{},"下载Appimage文件实现软件的安装",[14,125117,125118],{},"1️⃣先下载appimage",[14,125120,125121],{},[345,125122,125123],{"href":125123,"rel":125124},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[23850],[14,125126,125127],{},[1445,125128],{"alt":18,"src":125129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[14,125131,125132],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[14,125134,125135],{},[1445,125136],{"alt":18,"src":125137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[14,125139,125140],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[14,125142,125143],{},[1445,125144],{"alt":18,"src":125145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[14,125147,125148],{},[1445,125149],{"alt":18,"src":125150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[14,125152,125153,125154,125157],{},"3️⃣给他们放在",[93,125155,125156],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[14,125159,125160],{},"4️⃣给软件执行权限",[87,125162,125164],{"className":120795,"code":125163,"language":120797,"meta":120798,"style":18},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[93,125165,125166,125171],{"__ignoreMap":18},[96,125167,125168],{"class":98,"line":99},[96,125169,125170],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[96,125172,125173],{"class":98,"line":19},[96,125174,125175],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[14,125177,125178],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[87,125180,125182],{"className":117275,"code":125181,"language":117277,"meta":18,"style":18},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[93,125183,125184,125191,125198,125204],{"__ignoreMap":18},[96,125185,125186,125188],{"class":98,"line":99},[96,125187,101255],{"class":155},[96,125189,125190],{"class":211}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[96,125192,125193,125195],{"class":98,"line":19},[96,125194,101262],{"class":1946},[96,125196,125197],{"class":211}," .\u002Fqqmusic.desktop\n",[96,125199,125200,125202],{"class":98,"line":1162},[96,125201,124246],{"class":1946},[96,125203,125197],{"class":211},[96,125205,125206,125208,125210,125212],{"class":98,"line":1177},[96,125207,24555],{"class":1946},[96,125209,24558],{"class":211},[96,125211,123112],{"class":211},[96,125213,125197],{"class":211},[14,125215,125216,125218],{},[93,125217,101262],{},"：一个 Linux 命令，主要功能是：",[1114,125220,125221,125224],{},[53,125222,125223],{},"如果文件不存在，就创建一个新的空文件",[53,125225,125226],{},"如果文件已存在，就更新该文件的最后修改时间",[87,125228,125230],{"className":120795,"code":125229,"language":120797,"meta":120798,"style":18},"[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",[93,125231,125232,125236,125241,125246,125251,125255,125260],{"__ignoreMap":18},[96,125233,125234],{"class":98,"line":99},[96,125235,124997],{},[96,125237,125238],{"class":98,"line":19},[96,125239,125240],{},"Name=QQ音乐\n",[96,125242,125243],{"class":98,"line":1162},[96,125244,125245],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[96,125247,125248],{"class":98,"line":1177},[96,125249,125250],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[96,125252,125253],{"class":98,"line":1183},[96,125254,125007],{},[96,125256,125257],{"class":98,"line":1197},[96,125258,125259],{},"Categories=Audio;Music;Player;\n",[96,125261,125262],{"class":98,"line":1203},[96,125263,125264],{},"Comment=QQ Music Client for Linux\n",[14,125266,125267],{},"将文件复制进去",[14,125269,125270],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[14,125272,125273],{},[1445,125274],{"alt":18,"src":125275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[14,125277,125278],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[14,125280,125281],{},[1445,125282],{"alt":18,"src":125283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[14,125285,125286,125287,125290,125291,125294],{},"如果你用的不是KDE，那么也可以直接修改",[93,125288,125289],{},"qqmuic.desktop","：在exec的末尾加上",[93,125292,125293],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[87,125296,125298],{"className":120795,"code":125297,"language":120797,"meta":120798,"style":18},"[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",[93,125299,125300,125304,125308,125313,125317,125321,125325],{"__ignoreMap":18},[96,125301,125302],{"class":98,"line":99},[96,125303,124997],{},[96,125305,125306],{"class":98,"line":19},[96,125307,125240],{},[96,125309,125310],{"class":98,"line":1162},[96,125311,125312],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[96,125314,125315],{"class":98,"line":1177},[96,125316,125250],{},[96,125318,125319],{"class":98,"line":1183},[96,125320,125007],{},[96,125322,125323],{"class":98,"line":1197},[96,125324,125259],{},[96,125326,125327],{"class":98,"line":1203},[96,125328,125264],{},[14,125330,125331],{},[1445,125332],{"alt":18,"src":125333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[14,125335,125336],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[87,125338,125340],{"className":120795,"code":125339,"language":120797,"meta":120798,"style":18},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[93,125341,125342],{"__ignoreMap":18},[96,125343,125344],{"class":98,"line":99},[96,125345,125339],{},[50,125347,125348],{"start":1177},[53,125349,125350],{},"去Flathub上安装软件",[14,125352,125353],{},[345,125354,125355],{"href":125355,"rel":125356},"https:\u002F\u002Fflathub.org\u002F",[23850],[14,125358,125359],{},"1️⃣去上面的官网搜索软件+下载软件",[14,125361,125362],{},[1445,125363],{"alt":18,"src":125364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[87,125366,125368],{"className":120795,"code":125367,"language":120797,"meta":120798,"style":18},"flatpak install flathub com.obsproject.Studio\n",[93,125369,125370],{"__ignoreMap":18},[96,125371,125372],{"class":98,"line":99},[96,125373,125367],{},[14,125375,125376],{},[1445,125377],{"alt":18,"src":125378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[14,125380,125381],{},"2️⃣运行软件",[14,125383,125384],{},"a.官方方式：",[14,125386,125387],{},[1445,125388],{"alt":18,"src":125389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[87,125391,125392],{"className":120795,"code":125367,"language":120797,"meta":120798,"style":18},[93,125393,125394],{"__ignoreMap":18},[96,125395,125396],{"class":98,"line":99},[96,125397,125367],{},[14,125399,125400],{},"b.当普通软件运行：",[14,125402,125403],{},[1445,125404],{"alt":18,"src":125405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[14,125407,125408],{},[1445,125409],{"alt":18,"src":125410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[5110,125412,125413],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":18,"searchDepth":19,"depth":19,"links":125415},[125416,125417,125422,125423,125429,125430],{"id":122148,"depth":19,"text":122149},{"id":122490,"depth":19,"text":122491,"children":125418},[125419,125420,125421],{"id":122494,"depth":1162,"text":122495},{"id":122561,"depth":1162,"text":122562},{"id":122822,"depth":1162,"text":122823},{"id":122975,"depth":19,"text":122976},{"id":123213,"depth":19,"text":123214,"children":125424},[125425,125426,125427,125428],{"id":123265,"depth":1162,"text":123266},{"id":123551,"depth":1162,"text":123552},{"id":123822,"depth":1162,"text":123823},{"id":124081,"depth":1162,"text":124082},{"id":124140,"depth":19,"text":124141},{"id":124441,"depth":19,"text":124442,"children":125431},[125432,125433,125434,125435,125436,125437,125438,125439],{"id":124445,"depth":1162,"text":124446},{"id":124457,"depth":1162,"text":124458},{"id":124669,"depth":1162,"text":124670},{"id":124693,"depth":1162,"text":124694},{"id":124759,"depth":1162,"text":124760},{"id":124853,"depth":1162,"text":124854},{"id":124860,"depth":1162,"text":124861},{"id":124884,"depth":1162,"text":124885},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122140,"description":23361},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125446,"title":125447,"body":125448,"description":23361,"extension":21,"meta":125452,"navigation":23,"path":125453,"seo":125454,"stem":125455,"__hash__":125456},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125449,"toc":125450},[],{"title":18,"searchDepth":19,"depth":19,"links":125451},[],{"category":30242},"\u002Fwiki\u002F2025-01-27-linux",{"title":125447,"description":23361},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125458,"title":125459,"body":125460,"description":125464,"extension":21,"meta":125855,"navigation":23,"path":125856,"seo":125857,"stem":125858,"__hash__":125859},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125461,"toc":125853},[125462,125465,125469,125486,125489,125542,125546,125548,125588,125597,125601,125604,125845,125850],[14,125463,125464],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125466,125468],{"id":125467},"_1ubuntu环境配置","1.Ubuntu环境配置",[50,125470,125471,125474,125477,125480,125483],{},[53,125472,125473],{},"ubuntu环境换源",[53,125475,125476],{},"安装cuda",[53,125478,125479],{},"安装miniconda",[53,125481,125482],{},"安装pytorch",[53,125484,125485],{},"安装genesis",[14,125487,125488],{},"参考链接：",[87,125490,125492],{"className":23807,"code":125491,"language":23809,"meta":18,"style":18},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[93,125493,125494],{"__ignoreMap":18},[96,125495,125496,125499,125502,125505,125507,125510,125513,125515,125518,125521,125523,125526,125529,125531,125534,125537,125539],{"class":98,"line":99},[96,125497,125498],{"class":1946},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[96,125500,125501],{"class":211},"=blogdetail",[96,125503,125504],{"class":106},"&sharetype",[96,125506,152],{"class":102},[96,125508,125509],{"class":211},"blogdetail",[96,125511,125512],{"class":106},"&sharerId",[96,125514,152],{"class":102},[96,125516,125517],{"class":211},"144728092",[96,125519,125520],{"class":106},"&sharerefer",[96,125522,152],{"class":102},[96,125524,125525],{"class":211},"PC",[96,125527,125528],{"class":106},"&sharesource",[96,125530,152],{"class":102},[96,125532,125533],{"class":211},"qq_69379513",[96,125535,125536],{"class":106},"&sharefrom",[96,125538,152],{"class":102},[96,125540,125541],{"class":211},"from_link\n",[10,125543,125545],{"id":125544},"_2genesis-报错issue","2.Genesis 报错issue",[14,125547,125488],{},[87,125549,125550],{"className":23807,"code":125491,"language":23809,"meta":18,"style":18},[93,125551,125552],{"__ignoreMap":18},[96,125553,125554,125556,125558,125560,125562,125564,125566,125568,125570,125572,125574,125576,125578,125580,125582,125584,125586],{"class":98,"line":99},[96,125555,125498],{"class":1946},[96,125557,125501],{"class":211},[96,125559,125504],{"class":106},[96,125561,152],{"class":102},[96,125563,125509],{"class":211},[96,125565,125512],{"class":106},[96,125567,152],{"class":102},[96,125569,125517],{"class":211},[96,125571,125520],{"class":106},[96,125573,152],{"class":102},[96,125575,125525],{"class":211},[96,125577,125528],{"class":106},[96,125579,152],{"class":102},[96,125581,125533],{"class":211},[96,125583,125536],{"class":106},[96,125585,152],{"class":102},[96,125587,125541],{"class":211},[87,125589,125591],{"className":23807,"code":125590,"language":23809,"meta":18,"style":18},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[93,125592,125593],{"__ignoreMap":18},[96,125594,125595],{"class":98,"line":99},[96,125596,125590],{"class":1946},[10,125598,125600],{"id":125599},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[14,125602,125603],{},"hello_robot.py",[87,125605,125607],{"className":30357,"code":125606,"language":30359,"meta":18,"style":18},"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",[93,125608,125609,125615,125630,125634,125646,125658,125662,125675,125679,125698,125708,125718,125732,125736,125740,125745,125749,125759,125766,125780,125787,125797,125802,125806,125824,125829,125833,125840],{"__ignoreMap":18},[96,125610,125611,125613],{"class":98,"line":99},[96,125612,30371],{"class":102},[96,125614,45284],{"class":106},[96,125616,125617,125620,125623,125625,125627],{"class":98,"line":19},[96,125618,125619],{"class":106},"os.environ[",[96,125621,125622],{"class":211},"'PYOPENGL_PLATFORM'",[96,125624,4426],{"class":106},[96,125626,152],{"class":102},[96,125628,125629],{"class":211}," 'glx'\n",[96,125631,125632],{"class":98,"line":1162},[96,125633,2383],{"emptyLinePlaceholder":23},[96,125635,125636,125638,125641,125643],{"class":98,"line":1177},[96,125637,30371],{"class":102},[96,125639,125640],{"class":106}," genesis ",[96,125642,31362],{"class":102},[96,125644,125645],{"class":106}," gs\n",[96,125647,125648,125650,125653,125655],{"class":98,"line":1183},[96,125649,30716],{"class":102},[96,125651,125652],{"class":106}," pynput ",[96,125654,30371],{"class":102},[96,125656,125657],{"class":106}," keyboard\n",[96,125659,125660],{"class":98,"line":1197},[96,125661,2383],{"emptyLinePlaceholder":23},[96,125663,125664,125667,125670,125672],{"class":98,"line":1203},[96,125665,125666],{"class":106},"gs.init(",[96,125668,125669],{"class":5200},"backend",[96,125671,152],{"class":102},[96,125673,125674],{"class":106},"gs.gpu)\n",[96,125676,125677],{"class":98,"line":1294},[96,125678,2383],{"emptyLinePlaceholder":23},[96,125680,125681,125684,125686,125689,125692,125694,125696],{"class":98,"line":1300},[96,125682,125683],{"class":106},"scene ",[96,125685,152],{"class":102},[96,125687,125688],{"class":106}," gs.Scene(",[96,125690,125691],{"class":5200},"show_viewer",[96,125693,152],{"class":102},[96,125695,31455],{"class":155},[96,125697,113],{"class":106},[96,125699,125700,125703,125705],{"class":98,"line":1312},[96,125701,125702],{"class":106},"plane ",[96,125704,152],{"class":102},[96,125706,125707],{"class":106}," scene.add_entity(gs.morphs.Plane())\n",[96,125709,125710,125713,125715],{"class":98,"line":1595},[96,125711,125712],{"class":106},"franka ",[96,125714,152],{"class":102},[96,125716,125717],{"class":106}," scene.add_entity(\n",[96,125719,125720,125723,125725,125727,125730],{"class":98,"line":1600},[96,125721,125722],{"class":106},"    gs.morphs.MJCF(",[96,125724,45333],{"class":5200},[96,125726,152],{"class":102},[96,125728,125729],{"class":211},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[96,125731,38026],{"class":106},[96,125733,125734],{"class":98,"line":1606},[96,125735,113],{"class":106},[96,125737,125738],{"class":98,"line":1611},[96,125739,2383],{"emptyLinePlaceholder":23},[96,125741,125742],{"class":98,"line":1625},[96,125743,125744],{"class":106},"scene.build()\n",[96,125746,125747],{"class":98,"line":1630},[96,125748,2383],{"emptyLinePlaceholder":23},[96,125750,125751,125753,125756],{"class":98,"line":1636},[96,125752,31926],{"class":102},[96,125754,125755],{"class":1946}," on_press",[96,125757,125758],{"class":106},"(key):\n",[96,125760,125761,125764],{"class":98,"line":1657},[96,125762,125763],{"class":102},"    try",[96,125765,3722],{"class":106},[96,125767,125768,125770,125773,125775,125778],{"class":98,"line":1662},[96,125769,2480],{"class":102},[96,125771,125772],{"class":106}," key.char ",[96,125774,2932],{"class":102},[96,125776,125777],{"class":211}," 'q'",[96,125779,3722],{"class":106},[96,125781,125782,125784],{"class":98,"line":1676},[96,125783,15716],{"class":102},[96,125785,125786],{"class":155}," False\n",[96,125788,125789,125792,125795],{"class":98,"line":1681},[96,125790,125791],{"class":102},"    except",[96,125793,125794],{"class":155}," AttributeError",[96,125796,3722],{"class":106},[96,125798,125799],{"class":98,"line":1710},[96,125800,125801],{"class":102},"        pass\n",[96,125803,125804],{"class":98,"line":1715},[96,125805,2383],{"emptyLinePlaceholder":23},[96,125807,125808,125811,125813,125816,125819,125821],{"class":98,"line":1732},[96,125809,125810],{"class":106},"listener ",[96,125812,152],{"class":102},[96,125814,125815],{"class":106}," keyboard.Listener(",[96,125817,125818],{"class":5200},"on_press",[96,125820,152],{"class":102},[96,125822,125823],{"class":106},"on_press)\n",[96,125825,125826],{"class":98,"line":1737},[96,125827,125828],{"class":106},"listener.start()\n",[96,125830,125831],{"class":98,"line":1742},[96,125832,2383],{"emptyLinePlaceholder":23},[96,125834,125835,125837],{"class":98,"line":1747},[96,125836,108642],{"class":102},[96,125838,125839],{"class":106}," listener.running:\n",[96,125841,125842],{"class":98,"line":1761},[96,125843,125844],{"class":106},"    scene.step()\n",[14,125846,125847],{},[1445,125848],{"alt":18,"src":125849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[5110,125851,125852],{},"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":18,"searchDepth":19,"depth":19,"links":125854},[],{"category":23363},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125459,"description":125464},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":125861,"title":125862,"body":125863,"description":23361,"extension":21,"meta":125878,"navigation":23,"path":125879,"seo":125880,"stem":125881,"__hash__":125882},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":125864,"toc":125875},[125865,125868,125872],[10,125866,125862],{"id":125867},"_1-基础知识",[38,125869,125871],{"id":125870},"_11-js的组成","1.1 js的组成",[14,125873,125874],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":18,"searchDepth":19,"depth":19,"links":125876},[125877],{"id":125870,"depth":19,"text":125871},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":125862,"description":23361},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":125884,"title":125885,"body":125886,"description":23361,"extension":21,"meta":126025,"navigation":23,"path":126026,"seo":126027,"stem":126028,"__hash__":126029},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":125887,"toc":126013},[125888,125891,125895,125898,125902,125912,125916,125919,125922,125925,125929,125936,125942,125946,125952,125963,125967,125970,125974,125977,125981,125984,125988,125991,125995,125998,126001,126004,126007,126010],[10,125889,125885],{"id":125890},"_2-vscode必备内容",[38,125892,125894],{"id":125893},"_21-标签分类","2.1 标签分类",[14,125896,125897],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[38,125899,125901],{"id":125900},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[14,125903,125904,125905,125907,125908,125911],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[93,125906,333],{}," 然后按 ",[93,125909,125910],{},"Tab","，快速自动生成基本结构。",[38,125913,125915],{"id":125914},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[14,125917,125918],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[14,125920,125921],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[14,125923,125924],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[38,125926,125928],{"id":125927},"_24-视图缩放","2.4 视图缩放",[14,125930,125931,125932,125935],{},"缩放视图 ",[93,125933,125934],{},"ctrl+"," 可实现代码增大。",[14,125937,125938,125941],{},[93,125939,125940],{},"ctrl-"," 可实现代码减小。",[38,125943,125945],{"id":125944},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[14,125947,125948,125949,28364],{},"VSCode 新建文件快捷键为 ",[93,125950,125951],{},"ctrl+N",[14,125953,125954,125955,125958,125959,125962],{},"保存快捷键为 ",[93,125956,125957],{},"ctrl+S","，将文本保存为 ",[93,125960,125961],{},".html"," 文件。",[38,125964,125966],{"id":125965},"_26-auto-rename-tag","2.6 Auto Rename Tag",[14,125968,125969],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[38,125971,125973],{"id":125972},"_27-vscode-icons","2.7 vscode-icons",[14,125975,125976],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[38,125978,125980],{"id":125979},"_28-easy-less","2.8 Easy LESS",[14,125982,125983],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[38,125985,125987],{"id":125986},"_29-会了吧插件","2.9 会了吧插件",[14,125989,125990],{},"会了吧插件可以展示代码中英语单词的意思。",[38,125992,125994],{"id":125993},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[14,125996,125997],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[14,125999,126000],{},"②选定多个相同的单词:ctrl+D",[14,126002,126003],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[14,126005,126006],{},"④全局替换某些单词:ctrl+h",[14,126008,126009],{},"⑤快速定位到某一行:ctrl+g",[14,126011,126012],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":18,"searchDepth":19,"depth":19,"links":126014},[126015,126016,126017,126018,126019,126020,126021,126022,126023,126024],{"id":125893,"depth":19,"text":125894},{"id":125900,"depth":19,"text":125901},{"id":125914,"depth":19,"text":125915},{"id":125927,"depth":19,"text":125928},{"id":125944,"depth":19,"text":125945},{"id":125965,"depth":19,"text":125966},{"id":125972,"depth":19,"text":125973},{"id":125979,"depth":19,"text":125980},{"id":125986,"depth":19,"text":125987},{"id":125993,"depth":19,"text":125994},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":125885,"description":23361},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126031,"title":126032,"body":126033,"description":23361,"extension":21,"meta":126192,"navigation":23,"path":126193,"seo":126194,"stem":126195,"__hash__":126196},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126034,"toc":126184},[126035,126038,126042,126052,126058,126064,126068,126077,126081,126086,126089,126092,126096,126099,126109,126118,126127,126136,126146,126153,126158,126163,126176],[10,126036,126032],{"id":126037},"_3-html文本与容器标签",[38,126039,126041],{"id":126040},"_31-标题标签","3.1 标题标签",[14,126043,126044,126047,126048,126051],{},[93,126045,126046],{},"\u003Ch1>","我是一级标签",[93,126049,126050],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[14,126053,126054,126047,126056],{},[93,126055,126046],{},[93,126057,126050],{},[14,126059,123314,126060,126063],{},[93,126061,126062],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[38,126065,126067],{"id":126066},"_32-段落标签","3.2 段落标签",[14,126069,126070,126073,126074],{},[93,126071,126072],{},"\u003Cp>","....",[93,126075,126076],{},"\u003C\u002Fp>",[38,126078,126080],{"id":126079},"_33-换行标签","3.3 换行标签",[14,126082,126083],{},[93,126084,126085],{},"\u003Cbr \u002F>",[14,126087,126088],{},"具有强制换行的作用",[14,126090,126091],{},"单标签",[38,126093,126095],{"id":126094},"_34-文本格式化标签","3.4 文本格式化标签",[14,126097,126098],{},"提供粗体、斜体和下划线等效果",[14,126100,126101,126102,82518,126105,126108],{},"加粗：",[93,126103,126104],{},"\u003Cstrong>...\u003C\u002Fstrong>",[93,126106,126107],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[14,126110,126111,126112,82518,126115,126108],{},"斜体：",[93,126113,126114],{},"\u003Cem>...\u003C\u002Fem>",[93,126116,126117],{},"\u003Ci>...\u003C\u002Fi>",[14,126119,126120,126121,82518,126124,126108],{},"删除线：",[93,126122,126123],{},"\u003Cdel>...\u003C\u002Fdel>",[93,126125,126126],{},"\u003Cs>...\u003C\u002Fs>",[14,126128,126129,126130,82518,126133,126108],{},"下划线：",[93,126131,126132],{},"\u003Cins>...\u003C\u002Fins>",[93,126134,126135],{},"\u003Cu>...\u003C\u002Fu>",[38,126137,126139,126140,18394,126143,102672],{"id":126138},"_35-div和span标签","3.5 ",[93,126141,126142],{},"\u003Cdiv>",[93,126144,126145],{},"\u003Cspan>",[14,126147,126148,100997,126150,126152],{},[93,126149,126142],{},[93,126151,126145],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[14,126154,126155],{},[93,126156,126157],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[14,126159,126160],{},[93,126161,126162],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[14,126164,126165,126166,126168,126169,126171,126172,126175],{},"两者特点：①",[93,126167,126142],{}," 标签用来布局，但一行通常只放一个 ",[93,126170,126142],{},"。可以理解为一个大盒子，独占一行，在 ",[93,126173,126174],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[14,126177,77228,126178,126180,126181,126183],{},[93,126179,126145],{}," 标签也可用于布局，一行可以放多个 ",[93,126182,126145],{},"，可理解为小盒子。",{"title":18,"searchDepth":19,"depth":19,"links":126185},[126186,126187,126188,126189,126190],{"id":126040,"depth":19,"text":126041},{"id":126066,"depth":19,"text":126067},{"id":126079,"depth":19,"text":126080},{"id":126094,"depth":19,"text":126095},{"id":126138,"depth":19,"text":126191},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126032,"description":23361},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126198,"title":126199,"body":126200,"description":23361,"extension":21,"meta":126397,"navigation":23,"path":126398,"seo":126399,"stem":126400,"__hash__":126401},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126201,"toc":126389},[126202,126205,126209,126212,126218,126225,126231,126237,126240,126243,126246,126249,126252,126255,126258,126262,126265,126268,126271,126277,126283,126289,126296,126300,126306,126312,126315,126318,126324,126330,126336,126339,126342,126346,126349,126359,126365,126369,126378,126382,126385],[10,126203,126199],{"id":126204},"_4-html图像与链接",[38,126206,126208],{"id":126207},"_41-图像标签","4.1 图像标签",[14,126210,126211],{},"（1）标签",[14,126213,126214,126217],{},[93,126215,126216],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[14,126219,126220,126221,126224],{},"src是",[93,126222,126223],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[14,126226,126227,126228],{},"alt:文本，替换文本。图像不能显示的文字 ",[93,126229,126230],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[14,126232,126233,126234],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[93,126235,126236],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[14,126238,126239],{},"width:像素，设置图像的宽度",[14,126241,126242],{},"height:像素，设置图像的高度",[14,126244,126245],{},"border：像素，设置图像的边框粗细",[14,126247,126248],{},"（2）图像标签属性的注意点：",[14,126250,126251],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[14,126253,126254],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[14,126256,126257],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[38,126259,126261],{"id":126260},"_42-路径注意要点","4.2 路径注意要点：",[14,126263,126264],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[14,126266,126267],{},"（2）根目录：就是打开文件夹的第一层根目录",[14,126269,126270],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[14,126272,126273,126274],{},"①同一级路径：图像文件位于HTML文件同一级，如",[93,126275,126276],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[14,126278,126279,126280],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[93,126281,126282],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[14,126284,126285,126286],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[93,126287,126288],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[14,126290,126291,126292,358],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[345,126293,126294],{"href":126294,"rel":126295},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[23850],[38,126297,126299],{"id":126298},"_43-超链接标签","4.3 超链接标签",[14,126301,126302,126305],{},[93,126303,126304],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[14,126307,126308,126309],{},"①语法格式：",[93,126310,126311],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[14,126313,126314],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[14,126316,126317],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[14,126319,126320,126321],{},"③链接分类：外部链接：",[93,126322,126323],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[14,126325,126326,126327],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[93,126328,126329],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[14,126331,126332,126333],{},"空链接：如果当时没有确定链接目标时，",[93,126334,126335],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[14,126337,126338],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[14,126340,126341],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[38,126343,126345],{"id":126344},"_44-锚点链接","4.4 锚点链接",[14,126347,126348],{},"点我们点击链接，可以快速定位到页面中的某个位置",[14,126350,126351,126352,126355,126356],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[93,126353,126354],{},"\u003Ca href=\"#two\">","第二级",[93,126357,126358],{},"\u003C\u002Fa>",[14,126360,126361,126362],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[93,126363,126364],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[38,126366,126368],{"id":126367},"_45-注释标签","4.5 注释标签",[14,126370,126371,126374,126375],{},[93,126372,126373],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[93,126376,126377],{},"ctrl+\u002F",[38,126379,126381],{"id":126380},"_46-特殊字符","4.6 特殊字符",[14,126383,126384],{},"可以实现添加多个空格",[1445,126386],{"style":126387,"src":126388},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":18,"searchDepth":19,"depth":19,"links":126390},[126391,126392,126393,126394,126395,126396],{"id":126207,"depth":19,"text":126208},{"id":126260,"depth":19,"text":126261},{"id":126298,"depth":19,"text":126299},{"id":126344,"depth":19,"text":126345},{"id":126367,"depth":19,"text":126368},{"id":126380,"depth":19,"text":126381},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126199,"description":23361},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126403,"title":126404,"body":126405,"description":23361,"extension":21,"meta":126698,"navigation":23,"path":126699,"seo":126700,"stem":126701,"__hash__":126702},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126406,"toc":126689},[126407,126410,126414,126417,126420,126423,126426,126429,126432,126435,126438,126441,126461,126467,126471,126474,126477,126480,126483,126486,126489,126493,126496,126499,126502,126505,126518,126523,126526,126529,126544,126547,126550,126553,126556,126559,126563,126566,126573,126576,126579,126582,126585,126588,126594,126597,126600,126606,126609,126612,126615,126621,126624,126627,126641,126648,126651,126654,126661,126670,126673,126676,126679,126683,126686],[10,126408,126404],{"id":126409},"_5-html表格列表与表单",[38,126411,126413],{"id":126412},"_51-表格标签","5.1 表格标签",[14,126415,126416],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[14,126418,126419],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[14,126421,126422],{},"②表格基本语法：",[1445,126424],{"style":126387,"src":126425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[14,126427,126428],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[1445,126430],{"style":126387,"src":126431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[14,126433,126434],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[1445,126436],{"style":126387,"src":126437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[14,126439,126440],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[14,126442,126443,126446,126447,126449,126450,126453,126454,126456,126457,126460],{},[93,126444,126445],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[93,126448,126445],{},"内部必须拥有",[93,126451,126452],{},"\u003Ctr>","标签，一般位于第一行，",[93,126455,126445],{},"比",[93,126458,126459],{},"\u003Cth>","范围广",[14,126462,126463,126466],{},[93,126464,126465],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[38,126468,126470],{"id":126469},"_52-合并单元格","5.2 合并单元格",[14,126472,126473],{},"（1）合并单元格方式：",[14,126475,126476],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[14,126478,126479],{},"②跨列合并：colspan=\"合并单元格的个数\"",[14,126481,126482],{},"（2）目标单元格：",[14,126484,126485],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[14,126487,126488],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[38,126490,126492],{"id":126491},"_53-列表标签","5.3 列表标签",[14,126494,126495],{},"（1）分类：无序列表、有序列表、自定义列表",[14,126497,126498],{},"①无序列表：",[1445,126500],{"style":126387,"src":126501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[14,126503,126504],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[14,126506,126507,126510,126511,126514,126515,126517],{},[93,126508,126509],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[93,126512,126513],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[93,126516,126509],{},"中输入其他标签或文字是不对的",[14,126519,126520,126522],{},[93,126521,126513],{},"之间相当于一个容器，可以容纳所有元素",[14,126524,126525],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[14,126527,126528],{},"在css中去除前边的小圆点采用如下代码:",[87,126530,126534],{"className":126531,"code":126532,"language":126533,"meta":18,"style":18},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[93,126535,126536],{"__ignoreMap":18},[96,126537,126538,126541],{"class":98,"line":99},[96,126539,126540],{"class":51279},"list-style",[96,126542,126543],{"class":106},": none;\n",[14,126545,126546],{},"②有序列表：",[1445,126548],{"style":126387,"src":126549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[14,126551,126552],{},"③自定义列表：",[1445,126554],{"style":126387,"src":126555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[1445,126557],{"style":126387,"src":126558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[38,126560,126562],{"id":126561},"_54-表单标签","5.4 表单标签",[14,126564,126565],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[14,126567,126568,126569,126572],{},"（1）表单域：包含单元素的区域，",[93,126570,126571],{},"\u003Cform>","标签可以实现信息的收集和传递。",[1445,126574],{"style":126387,"src":126575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[14,126577,126578],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[14,126580,126581],{},"表单元素提交必须有name属性",[14,126583,126584],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[14,126586,126587],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[14,126589,77205,126590,126593],{},[93,126591,126592],{},"\u003Cinput>","输入表单元素",[1445,126595],{"style":126387,"src":126596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[1445,126598],{"style":126387,"src":126599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[14,126601,126602,126603],{},"单选按钮：",[93,126604,126605],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[1445,126607],{"style":126387,"src":126608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[14,126610,126611],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[1445,126613],{"style":126387,"src":126614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[14,126616,126617,126620],{},[256,126618,126619],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[14,126622,126623],{},"②select下拉表单元素：可以节约页面控件",[1445,126625],{"style":126387,"src":126626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[14,126628,126629,13779,126631,126634,126635,126637,126638,126640],{},[256,126630,136],{},[93,126632,126633],{},"\u003Cselect>","中至少包含一对",[93,126636,102693],{},"；在",[93,126639,102693],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[14,126642,126643,126644,126647],{},"③",[93,126645,126646],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[1445,126649],{"style":126387,"src":126650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[14,126652,126653],{},"3行20列",[38,126655,126657,126658,102672],{"id":126656},"_55-lable标签","5.5 ",[93,126659,126660],{},"\u003Clable>",[14,126662,126663,126664,126666,126667,126669],{},"它不是表单标签，但常常与表单标签搭配使用，",[93,126665,126660],{},"标签用于绑定一个表单标签，当点击",[93,126668,126660],{},"标签内的文本",[14,126671,126672],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[1445,126674],{"style":126387,"src":126675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[1445,126677],{"style":126387,"src":126678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[38,126680,126682],{"id":126681},"_56-实例","5.6 实例",[1445,126684],{"style":126387,"src":126685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[5110,126687,126688],{},"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":18,"searchDepth":19,"depth":19,"links":126690},[126691,126692,126693,126694,126695,126697],{"id":126412,"depth":19,"text":126413},{"id":126469,"depth":19,"text":126470},{"id":126491,"depth":19,"text":126492},{"id":126561,"depth":19,"text":126562},{"id":126656,"depth":19,"text":126696},"5.5 \u003Clable>标签",{"id":126681,"depth":19,"text":126682},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126404,"description":23361},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126704,"title":126705,"body":126706,"description":23361,"extension":21,"meta":127255,"navigation":23,"path":127256,"seo":127257,"stem":127258,"__hash__":127259},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126707,"toc":127230},[126708,126711,126715,126718,126721,126725,126728,126731,126734,126737,126740,126743,126746,126750,126753,126757,126760,126763,126766,126770,126773,126776,126779,126785,126788,126791,126794,126797,126800,126803,126806,126839,126843,126846,126849,126852,126856,126859,126862,126865,126868,126871,126875,126878,126881,126884,126888,126891,126895,126898,126902,126905,126910,126914,126917,126921,126924,126927,126930,126933,126960,126963,126967,126970,126973,126978,126981,126984,126988,126991,126996,126999,127002,127005,127009,127012,127015,127018,127022,127025,127028,127031,127035,127039,127042,127082,127085,127089,127096,127099,127103,127106,127152,127156,127159,127162,127165,127193,127197,127200,127227],[10,126709,126705],{"id":126710},"_6-css语法与文本样式",[38,126712,126714],{"id":126713},"_61-css语法规范","6.1 css语法规范",[14,126716,126717],{},"由两部分组成，选择器及一条或多条声明",[1445,126719],{"style":126387,"src":126720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[14,126722,126723],{},[256,126724,136],{},[14,126726,126727],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[14,126729,126730],{},"②属性与属性值以“键值对”的形式出现",[14,126732,126733],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[14,126735,126736],{},"④属性和属性值之间用英文“;”分开",[1445,126738],{"style":126387,"src":126739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[1445,126741],{"style":126387,"src":126742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[1445,126744],{"style":126387,"src":126745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[38,126747,126749],{"id":126748},"_62-css选择器","6.2 css选择器",[14,126751,126752],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[67,126754,126756],{"id":126755},"_621-标签选择器","6.2.1 标签选择器",[14,126758,126759],{},"①优点：能快速为页面中同类型的标签统一设置样式",[14,126761,126762],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[1445,126764],{"style":126387,"src":126765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[67,126767,126769],{"id":126768},"_622-类选择器","6.2.2 类选择器",[14,126771,126772],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[14,126774,126775],{},"②样例",[1445,126777],{"style":126387,"src":126778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[14,126780,126781,126782,126784],{},"③ ",[256,126783,126619],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[14,126786,126787],{},"可以理解为给这个标签起了个名字，来表示；",[14,126789,126790],{},"长名称或词组可以使用横线来为选择器命名；",[14,126792,126793],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[14,126795,126796],{},"命名要有意义；",[1445,126798],{"style":126387,"src":126799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[14,126801,126802],{},"类选择器也可以指定特殊的元素p.center{}",[14,126804,126805],{},"p.center和.center都对",[87,126807,126809],{"className":126531,"code":126808,"language":126533,"meta":18,"style":18},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[93,126810,126811,126816,126825,126835],{"__ignoreMap":18},[96,126812,126813],{"class":98,"line":99},[96,126814,126815],{"class":165},"\u002F* 类选择器指定特殊元素 *\u002F\n",[96,126817,126818,126820,126823],{"class":98,"line":19},[96,126819,14],{"class":51279},[96,126821,126822],{"class":1946},".center",[96,126824,15556],{"class":106},[96,126826,126827,126829,126831,126833],{"class":98,"line":1162},[96,126828,70505],{"class":155},[96,126830,51416],{"class":106},[96,126832,51571],{"class":155},[96,126834,1273],{"class":106},[96,126836,126837],{"class":98,"line":1177},[96,126838,1548],{"class":106},[67,126840,126842],{"id":126841},"_623-多类名使用","6.2.3 多类名使用",[14,126844,126845],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[1445,126847],{"style":126387,"src":126848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[14,126850,126851],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[67,126853,126855],{"id":126854},"_624-id选择器","6.2.4 id选择器",[14,126857,126858],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[14,126860,126861],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[1445,126863],{"style":126387,"src":126864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[14,126866,126867],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[14,126869,126870],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[67,126872,126874],{"id":126873},"_625-通配符选择器","6.2.5 通配符选择器",[14,126876,126877],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[14,126879,126880],{},"* {",[14,126882,126883],{},"color=\"red\"}",[67,126885,126887],{"id":126886},"_626-总结","6.2.6 总结",[1445,126889],{"style":126387,"src":126890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[38,126892,126894],{"id":126893},"_63-css字体属性","6.3 css字体属性",[14,126896,126897],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[67,126899,126901],{"id":126900},"_631-字体系列","6.3.1 字体系列",[14,126903,126904],{},"font-family: '宋体';",[14,126906,126907,126909],{},[256,126908,136],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[67,126911,126913],{"id":126912},"_632-字体大小","6.3.2 字体大小",[14,126915,126916],{},"font-size: 20px",[14,126918,126919,26452],{},[256,126920,126619],{},[14,126922,126923],{},"①px（像素）大小是网页的最常用单位",[14,126925,126926],{},"②谷歌浏览器默认为16px",[14,126928,126929],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[14,126931,126932],{},"④可以给body指定整个页面的大小：会自动引用",[87,126934,126936],{"className":126531,"code":126935,"language":126533,"meta":18,"style":18},"body {\n  font-size: 16px;\n}\n",[93,126937,126938,126944,126956],{"__ignoreMap":18},[96,126939,126940,126942],{"class":98,"line":99},[96,126941,51779],{"class":51279},[96,126943,15556],{"class":106},[96,126945,126946,126948,126950,126952,126954],{"class":98,"line":19},[96,126947,70605],{"class":155},[96,126949,51416],{"class":106},[96,126951,708],{"class":155},[96,126953,51471],{"class":102},[96,126955,1273],{"class":106},[96,126957,126958],{"class":98,"line":1162},[96,126959,1548],{"class":106},[14,126961,126962],{},"⑤标题标签比较特殊，需要单独指定大小",[67,126964,126966],{"id":126965},"_633-字体粗细","6.3.3 字体粗细",[14,126968,126969],{},"font-weight: bold;",[14,126971,126972],{},"font-weight: 100；",[14,126974,126975,126977],{},[256,126976,136],{}," ①粗体文字变细：尽量别用normal，多用数字",[14,126979,126980],{},"font-weight= 400;",[14,126982,126983],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[67,126985,126987],{"id":126986},"_634-文字样式","6.3.4 文字样式",[14,126989,126990],{},"font-style: normal；",[14,126992,126993,26452],{},[256,126994,126995],{},"属性值",[14,126997,126998],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[14,127000,127001],{},"②italic：浏览器会显示斜体的字体样式",[1445,127003],{"style":126387,"src":127004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[67,127006,127008],{"id":127007},"_635-字体符合属性","6.3.5 字体符合属性",[1445,127010],{"style":126387,"src":127011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[1445,127013],{"style":126387,"src":127014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[14,127016,127017],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[14,127019,127020,26452],{},[256,127021,126619],{},[14,127023,127024],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[14,127026,127027],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[14,127029,127030],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[38,127032,127034],{"id":127033},"_64-css-test文本属性","6.4 css test文本属性",[67,127036,127038],{"id":127037},"_641-文本颜色","6.4.1 文本颜色",[14,127040,127041],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[87,127043,127045],{"className":126531,"code":127044,"language":126533,"meta":18,"style":18},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[93,127046,127047,127052,127058,127068,127073,127078],{"__ignoreMap":18},[96,127048,127049],{"class":98,"line":99},[96,127050,127051],{"class":165},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[96,127053,127054,127056],{"class":98,"line":19},[96,127055,14],{"class":51279},[96,127057,15556],{"class":106},[96,127059,127060,127062,127064,127066],{"class":98,"line":1162},[96,127061,70884],{"class":155},[96,127063,51416],{"class":106},[96,127065,57400],{"class":155},[96,127067,1273],{"class":106},[96,127069,127070],{"class":98,"line":1177},[96,127071,127072],{"class":165},"  \u002F* color: #ff0000; *\u002F\n",[96,127074,127075],{"class":98,"line":1183},[96,127076,127077],{"class":165},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[96,127079,127080],{"class":98,"line":1197},[96,127081,1548],{"class":106},[1445,127083],{"style":126387,"src":127084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[67,127086,127088],{"id":127087},"_642-对齐文本","6.4.2 对齐文本",[14,127090,127091,127092,127095],{},"text-align属于用于设置元素内文本内容的 ",[256,127093,127094],{},"水平对齐"," 方式",[14,127097,127098],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[67,127100,127102],{"id":127101},"_643-装饰文本","6.4.3 装饰文本",[14,127104,127105],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[87,127107,127109],{"className":126531,"code":127108,"language":126533,"meta":18,"style":18},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[93,127110,127111,127117,127127,127131,127137,127148],{"__ignoreMap":18},[96,127112,127113,127115],{"class":98,"line":99},[96,127114,345],{"class":51279},[96,127116,15556],{"class":106},[96,127118,127119,127121,127123,127125],{"class":98,"line":19},[96,127120,70481],{"class":155},[96,127122,51416],{"class":106},[96,127124,54716],{"class":155},[96,127126,1273],{"class":106},[96,127128,127129],{"class":98,"line":1162},[96,127130,1548],{"class":106},[96,127132,127133,127135],{"class":98,"line":1177},[96,127134,14],{"class":51279},[96,127136,15556],{"class":106},[96,127138,127139,127141,127143,127146],{"class":98,"line":1183},[96,127140,70481],{"class":155},[96,127142,51416],{"class":106},[96,127144,127145],{"class":155},"underline",[96,127147,1273],{"class":106},[96,127149,127150],{"class":98,"line":1197},[96,127151,1548],{"class":106},[67,127153,127155],{"id":127154},"_644-文本缩进","6.4.4 文本缩进",[14,127157,127158],{},"实现文本的第一行首行缩进自己指定的距离",[14,127160,127161],{},"20px往右边走；-20px往左边走",[14,127163,127164],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[87,127166,127168],{"className":126531,"code":127167,"language":126533,"meta":18,"style":18},"p {\n  text-indent: 2em;\n}\n",[93,127169,127170,127176,127189],{"__ignoreMap":18},[96,127171,127172,127174],{"class":98,"line":99},[96,127173,14],{"class":51279},[96,127175,15556],{"class":106},[96,127177,127178,127181,127183,127185,127187],{"class":98,"line":19},[96,127179,127180],{"class":155},"  text-indent",[96,127182,51416],{"class":106},[96,127184,184],{"class":155},[96,127186,23538],{"class":102},[96,127188,1273],{"class":106},[96,127190,127191],{"class":98,"line":1162},[96,127192,1548],{"class":106},[67,127194,127196],{"id":127195},"_645-行间距","6.4.5 行间距",[14,127198,127199],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[87,127201,127203],{"className":126531,"code":127202,"language":126533,"meta":18,"style":18},"p {\n  line-height: 1.6;\n}\n",[93,127204,127205,127211,127223],{"__ignoreMap":18},[96,127206,127207,127209],{"class":98,"line":99},[96,127208,14],{"class":51279},[96,127210,15556],{"class":106},[96,127212,127213,127216,127218,127221],{"class":98,"line":19},[96,127214,127215],{"class":155},"  line-height",[96,127217,51416],{"class":106},[96,127219,127220],{"class":155},"1.6",[96,127222,1273],{"class":106},[96,127224,127225],{"class":98,"line":1162},[96,127226,1548],{"class":106},[5110,127228,127229],{},"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":18,"searchDepth":19,"depth":19,"links":127231},[127232,127233,127241,127248],{"id":126713,"depth":19,"text":126714},{"id":126748,"depth":19,"text":126749,"children":127234},[127235,127236,127237,127238,127239,127240],{"id":126755,"depth":1162,"text":126756},{"id":126768,"depth":1162,"text":126769},{"id":126841,"depth":1162,"text":126842},{"id":126854,"depth":1162,"text":126855},{"id":126873,"depth":1162,"text":126874},{"id":126886,"depth":1162,"text":126887},{"id":126893,"depth":19,"text":126894,"children":127242},[127243,127244,127245,127246,127247],{"id":126900,"depth":1162,"text":126901},{"id":126912,"depth":1162,"text":126913},{"id":126965,"depth":1162,"text":126966},{"id":126986,"depth":1162,"text":126987},{"id":127007,"depth":1162,"text":127008},{"id":127033,"depth":19,"text":127034,"children":127249},[127250,127251,127252,127253,127254],{"id":127037,"depth":1162,"text":127038},{"id":127087,"depth":1162,"text":127088},{"id":127101,"depth":1162,"text":127102},{"id":127154,"depth":1162,"text":127155},{"id":127195,"depth":1162,"text":127196},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126705,"description":23361},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127261,"title":127262,"body":127263,"description":23361,"extension":21,"meta":127912,"navigation":23,"path":127913,"seo":127914,"stem":127915,"__hash__":127916},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127264,"toc":127893},[127265,127268,127272,127276,127336,127340,127350,127353,127356,127360,127385,127389,127392,127395,127398,127401,127404,127408,127411,127414,127456,127459,127485,127491,127494,127498,127502,127508,127511,127514,127517,127520,127523,127526,127571,127575,127578,127581,127585,127589,127618,127621,127626,127629,127632,127635,127638,127642,127646,127649,127651,127654,127658,127661,127665,127668,127671,127674,127678,127682,127688,127698,127701,127704,127707,127710,127713,127836,127844,127852,127890],[10,127266,127262],{"id":127267},"_7-css引入方式与选择器进阶",[38,127269,127271],{"id":127270},"_71-css引入方式","7.1 css引入方式",[67,127273,127275],{"id":127274},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[87,127277,127281],{"className":127278,"code":127279,"language":127280,"meta":18,"style":18},"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",[93,127282,127283,127291,127298,127310,127323,127328],{"__ignoreMap":18},[96,127284,127285,127287,127289],{"class":98,"line":99},[96,127286,1017],{"class":106},[96,127288,5110],{"class":51279},[96,127290,51286],{"class":106},[96,127292,127293,127296],{"class":98,"line":19},[96,127294,127295],{"class":51279},"  h1",[96,127297,15556],{"class":106},[96,127299,127300,127303,127305,127308],{"class":98,"line":1162},[96,127301,127302],{"class":155},"    color",[96,127304,51416],{"class":106},[96,127306,127307],{"class":155},"blue",[96,127309,1273],{"class":106},[96,127311,127312,127315,127317,127319,127321],{"class":98,"line":1177},[96,127313,127314],{"class":155},"    font-size",[96,127316,51416],{"class":106},[96,127318,907],{"class":155},[96,127320,51471],{"class":102},[96,127322,1273],{"class":106},[96,127324,127325],{"class":98,"line":1183},[96,127326,127327],{"class":106},"  }\n",[96,127329,127330,127332,127334],{"class":98,"line":1197},[96,127331,51764],{"class":106},[96,127333,5110],{"class":51279},[96,127335,51286],{"class":106},[14,127337,127338,26452],{},[256,127339,126619],{},[14,127341,77205,127342,127345,127346,127349],{},[93,127343,127344],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[93,127347,127348],{},"\u003Chead>","标签中",[14,127351,127352],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[14,127354,127355],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[67,127357,127359],{"id":127358},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[87,127361,127363],{"className":127278,"code":127362,"language":127280,"meta":18,"style":18},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[93,127364,127365],{"__ignoreMap":18},[96,127366,127367,127369,127371,127373,127375,127378,127381,127383],{"class":98,"line":99},[96,127368,1017],{"class":106},[96,127370,14],{"class":51279},[96,127372,62605],{"class":1946},[96,127374,152],{"class":106},[96,127376,127377],{"class":211},"\"color: red; font-size: 16px;\"",[96,127379,127380],{"class":106},">这是一个段落\u003C\u002F",[96,127382,14],{"class":51279},[96,127384,51286],{"class":106},[14,127386,127387,26452],{},[256,127388,126619],{},[14,127390,127391],{},"①style其实就是标签的属性",[14,127393,127394],{},"②在双引号中间，写法要符合css规范",[14,127396,127397],{},"③可以控制当前的标签设置样式",[14,127399,127400],{},"④书写繁琐，简单时才用",[14,127402,127403],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[67,127405,127407],{"id":127406},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[14,127409,127410],{},"使用最多，单独建一个css文件，然后html引用",[14,127412,127413],{},"①css文件部分： style.css",[87,127415,127417],{"className":126531,"code":127416,"language":126533,"meta":18,"style":18},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[93,127418,127419,127424,127430,127440,127452],{"__ignoreMap":18},[96,127420,127421],{"class":98,"line":99},[96,127422,127423],{"class":165},"\u002F* style.css *\u002F\n",[96,127425,127426,127428],{"class":98,"line":19},[96,127427,10],{"class":51279},[96,127429,15556],{"class":106},[96,127431,127432,127434,127436,127438],{"class":98,"line":1162},[96,127433,70884],{"class":155},[96,127435,51416],{"class":106},[96,127437,127307],{"class":155},[96,127439,1273],{"class":106},[96,127441,127442,127444,127446,127448,127450],{"class":98,"line":1177},[96,127443,70605],{"class":155},[96,127445,51416],{"class":106},[96,127447,907],{"class":155},[96,127449,51471],{"class":102},[96,127451,1273],{"class":106},[96,127453,127454],{"class":98,"line":1183},[96,127455,1548],{"class":106},[14,127457,127458],{},"②html部分",[87,127460,127462],{"className":127278,"code":127461,"language":127280,"meta":18,"style":18},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[93,127463,127464],{"__ignoreMap":18},[96,127465,127466,127468,127470,127472,127474,127476,127478,127480,127483],{"class":98,"line":99},[96,127467,1017],{"class":106},[96,127469,68984],{"class":51279},[96,127471,68987],{"class":1946},[96,127473,152],{"class":106},[96,127475,68992],{"class":211},[96,127477,61036],{"class":1946},[96,127479,152],{"class":106},[96,127481,127482],{"class":211},"\"style.css\"",[96,127484,51286],{"class":106},[14,127486,127487,127490],{},[93,127488,127489],{},"\u003Chr>","水平线标签（但是不常用！）",[14,127492,127493],{},"ctrl+0回到页面原来大小",[38,127495,127497],{"id":127496},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[67,127499,127501],{"id":127500},"_721-快速生成html","7.2.1 快速生成html",[14,127503,127504,127505],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[93,127506,127507],{},"\u003Cdiv>``\u003C\u002Fdiv>",[14,127509,127510],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[14,127512,127513],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[14,127515,127516],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[14,127518,127519],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[14,127521,127522],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[14,127524,127525],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[87,127527,127529],{"className":127278,"code":127528,"language":127280,"meta":18,"style":18},"\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",[93,127530,127531,127536,127541,127546,127551,127556,127561,127566],{"__ignoreMap":18},[96,127532,127533],{"class":98,"line":99},[96,127534,127535],{"class":165},"\u003C!-- Emmet 语法示例 -->\n",[96,127537,127538],{"class":98,"line":19},[96,127539,127540],{"class":165},"\u003C!-- div*3        → 生成3个div -->\n",[96,127542,127543],{"class":98,"line":1162},[96,127544,127545],{"class":165},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[96,127547,127548],{"class":98,"line":1177},[96,127549,127550],{"class":165},"\u003C!-- div+p        → 兄弟div和p -->\n",[96,127552,127553],{"class":98,"line":1183},[96,127554,127555],{"class":165},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[96,127557,127558],{"class":98,"line":1197},[96,127559,127560],{"class":165},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[96,127562,127563],{"class":98,"line":1203},[96,127564,127565],{"class":165},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[96,127567,127568],{"class":98,"line":1294},[96,127569,127570],{"class":165},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[67,127572,127574],{"id":127573},"_722-快速生成css","7.2.2 快速生成css",[14,127576,127577],{},"简写开头",[14,127579,127580],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[38,127582,127584],{"id":127583},"_73-css复合选择器","7.3 css复合选择器",[67,127586,127588],{"id":127587},"_731-后代选择器","7.3.1 后代选择器",[87,127590,127592],{"className":126531,"code":127591,"language":126533,"meta":18,"style":18},".parent .child {\n  color: blue;\n}\n",[93,127593,127594,127604,127614],{"__ignoreMap":18},[96,127595,127596,127599,127602],{"class":98,"line":99},[96,127597,127598],{"class":1946},".parent",[96,127600,127601],{"class":1946}," .child",[96,127603,15556],{"class":106},[96,127605,127606,127608,127610,127612],{"class":98,"line":19},[96,127607,70884],{"class":155},[96,127609,51416],{"class":106},[96,127611,127307],{"class":155},[96,127613,1273],{"class":106},[96,127615,127616],{"class":98,"line":1162},[96,127617,1548],{"class":106},[14,127619,127620],{},"元素1 元素2 {样式声明}",[14,127622,127623],{},[256,127624,127625],{},"注意点:",[14,127627,127628],{},"①元素1和元素2中间用空格隔开",[14,127630,127631],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[14,127633,127634],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[14,127636,127637],{},"④元素1和元素2可以是任意基础选择器",[67,127639,127641],{"id":127640},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[14,127643,127644],{},[256,127645,127625],{},[14,127647,127648],{},"①元素1和元素2中间用大于号隔开",[14,127650,127631],{},[14,127652,127653],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[67,127655,127657],{"id":127656},"_733-并集选择器","7.3.3 并集选择器",[14,127659,127660],{},"元素1，元素2 {样式声明}",[14,127662,127663],{},[256,127664,127625],{},[14,127666,127667],{},"①元素1和元素2中间用逗号隔开",[14,127669,127670],{},"②逗号可以理解为和的意思",[14,127672,127673],{},"③并集选择器通常用于集体声明",[67,127675,127677],{"id":127676},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[14,127679,127680],{},[256,127681,127625],{},[14,127683,127684,127685,127687],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[68984,127686],{},"－:visited－:hover－:active。",[14,127689,127690,127691,127694,127695,25719],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127692,127693],"hover",{}," 、 ",[127696,127697],"first-child",{},[14,127699,127700],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[14,127702,127703],{},"link对没访问的进行设置",[14,127705,127706],{},"vistied对已访问的进行改变",[14,127708,127709],{},"hover鼠标经过就会变",[14,127711,127712],{},"active常按(点)就会变",[87,127714,127716],{"className":126531,"code":127715,"language":126533,"meta":18,"style":18},"\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",[93,127717,127718,127723,127732,127742,127752,127756,127765,127776,127780,127788,127798,127808,127812,127821,127832],{"__ignoreMap":18},[96,127719,127720],{"class":98,"line":99},[96,127721,127722],{"class":165},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[96,127724,127725,127727,127730],{"class":98,"line":19},[96,127726,345],{"class":51279},[96,127728,127729],{"class":1946},":link",[96,127731,15556],{"class":106},[96,127733,127734,127736,127738,127740],{"class":98,"line":1162},[96,127735,70884],{"class":155},[96,127737,51416],{"class":106},[96,127739,62348],{"class":155},[96,127741,1273],{"class":106},[96,127743,127744,127746,127748,127750],{"class":98,"line":1177},[96,127745,70481],{"class":155},[96,127747,51416],{"class":106},[96,127749,54716],{"class":155},[96,127751,1273],{"class":106},[96,127753,127754],{"class":98,"line":1183},[96,127755,1548],{"class":106},[96,127757,127758,127760,127763],{"class":98,"line":1197},[96,127759,345],{"class":51279},[96,127761,127762],{"class":1946},":visited",[96,127764,15556],{"class":106},[96,127766,127767,127769,127771,127774],{"class":98,"line":1203},[96,127768,70884],{"class":155},[96,127770,51416],{"class":106},[96,127772,127773],{"class":155},"purple",[96,127775,1273],{"class":106},[96,127777,127778],{"class":98,"line":1294},[96,127779,1548],{"class":106},[96,127781,127782,127784,127786],{"class":98,"line":1300},[96,127783,345],{"class":51279},[96,127785,60919],{"class":1946},[96,127787,15556],{"class":106},[96,127789,127790,127792,127794,127796],{"class":98,"line":1312},[96,127791,70884],{"class":155},[96,127793,51416],{"class":106},[96,127795,54868],{"class":155},[96,127797,1273],{"class":106},[96,127799,127800,127802,127804,127806],{"class":98,"line":1595},[96,127801,70481],{"class":155},[96,127803,51416],{"class":106},[96,127805,127145],{"class":155},[96,127807,1273],{"class":106},[96,127809,127810],{"class":98,"line":1600},[96,127811,1548],{"class":106},[96,127813,127814,127816,127819],{"class":98,"line":1606},[96,127815,345],{"class":51279},[96,127817,127818],{"class":1946},":active",[96,127820,15556],{"class":106},[96,127822,127823,127825,127827,127830],{"class":98,"line":1611},[96,127824,70884],{"class":155},[96,127826,51416],{"class":106},[96,127828,127829],{"class":155},"green",[96,127831,1273],{"class":106},[96,127833,127834],{"class":98,"line":1625},[96,127835,1548],{"class":106},[67,127837,127839,127840,127843],{"id":127838},"_735-伪类选择器","7.3.5 ",[127841,127842],"focus",{},"伪类选择器",[14,127845,127846,127848,127849,127851],{},[127841,127847],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[93,127850,126592],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[87,127853,127855],{"className":126531,"code":127854,"language":126533,"meta":18,"style":18},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[93,127856,127857,127865,127876,127886],{"__ignoreMap":18},[96,127858,127859,127861,127863],{"class":98,"line":99},[96,127860,53800],{"class":51279},[96,127862,61879],{"class":1946},[96,127864,15556],{"class":106},[96,127866,127867,127870,127872,127874],{"class":98,"line":19},[96,127868,127869],{"class":155},"  border-color",[96,127871,51416],{"class":106},[96,127873,54868],{"class":155},[96,127875,1273],{"class":106},[96,127877,127878,127880,127882,127884],{"class":98,"line":1162},[96,127879,70777],{"class":155},[96,127881,51416],{"class":106},[96,127883,54716],{"class":155},[96,127885,1273],{"class":106},[96,127887,127888],{"class":98,"line":1177},[96,127889,1548],{"class":106},[5110,127891,127892],{},"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":18,"searchDepth":19,"depth":19,"links":127894},[127895,127900,127904],{"id":127270,"depth":19,"text":127271,"children":127896},[127897,127898,127899],{"id":127274,"depth":1162,"text":127275},{"id":127358,"depth":1162,"text":127359},{"id":127406,"depth":1162,"text":127407},{"id":127496,"depth":19,"text":127497,"children":127901},[127902,127903],{"id":127500,"depth":1162,"text":127501},{"id":127573,"depth":1162,"text":127574},{"id":127583,"depth":19,"text":127584,"children":127905},[127906,127907,127908,127909,127910],{"id":127587,"depth":1162,"text":127588},{"id":127640,"depth":1162,"text":127641},{"id":127656,"depth":1162,"text":127657},{"id":127676,"depth":1162,"text":127677},{"id":127838,"depth":1162,"text":127911},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127262,"description":23361},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":127918,"title":127919,"body":127920,"description":23361,"extension":21,"meta":129843,"navigation":23,"path":129844,"seo":129845,"stem":129846,"__hash__":129847},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":127921,"toc":129817},[127922,127925,127929,127938,127942,127968,127973,127976,127979,127982,127985,127989,127992,128002,128010,128014,128049,128054,128057,128060,128063,128066,128070,128073,128082,128086,128099,128104,128107,128110,128113,128117,128120,128124,128127,128182,128185,128216,128219,128273,128277,128280,128446,128569,128572,128575,128578,128581,128585,128588,128592,128595,128598,128602,128605,128636,128663,128691,128694,128698,128724,128767,128771,128865,128868,128895,128898,128901,128904,128907,128910,128913,128916,128919,128922,128926,128983,129010,129014,129062,129066,129107,129109,129112,129115,129118,129121,129125,129217,129220,129223,129226,129230,129353,129554,129558,129562,129565,129568,129571,129575,129578,129581,129606,129609,129612,129615,129618,129621,129625,129633,129695,129698,129756,129759,129762,129765,129768,129771,129774,129777,129814],[10,127923,127919],{"id":127924},"_8-css显示模式与背景特性",[38,127926,127928],{"id":127927},"_81-css元素显示模式","8.1 css元素显示模式",[14,127930,127931,127932,127934,127935,127937],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[93,127933,126142],{},"自己占一行，比如一行可以放多个",[93,127936,126145],{},"，HTML 元素一般分为块元素和行内元素两种类型",[67,127939,127941],{"id":127940},"_811-块元素","8.1.1 块元素",[14,127943,127944,127945,127947,127948,319,127951,319,127953,319,127955,319,127958,319,127961,127964,127965,127967],{},"常见的块元素有",[93,127946,126046],{},"~",[93,127949,127950],{},"\u003Ch6>",[93,127952,126072],{},[93,127954,126142],{},[93,127956,127957],{},"\u003Cul>",[93,127959,127960],{},"\u003Col>",[93,127962,127963],{},"\u003Cli>","等，其中 ",[93,127966,126142],{}," 标签是最典型的块元素",[14,127969,127970],{},[256,127971,127972],{},"块级元素的特点：",[14,127974,127975],{},"① 比较霸道，自己独占一行。",[14,127977,127978],{},"② 高度，宽度、外边距以及内边距都可以控制。",[14,127980,127981],{},"③ 宽度默认是容器（父级宽度）的100%。",[14,127983,127984],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[14,127986,127987],{},[256,127988,136],{},[14,127990,127991],{},"①文字类的元素内不能使用块级元素",[14,127993,77228,127994,127996,127997,127999,128000],{},[93,127995,126072],{}," 标签主要用于存放文字，因此 ",[93,127998,126072],{}," 里面不能放块级元素，特别是不能放",[93,128001,126142],{},[14,128003,128004,128005,127947,128007,128009],{},"⑥同理， ",[93,128006,126046],{},[93,128008,127950],{},"等都是文字类块级标签，里面也不能放其他块级元素",[67,128011,128013],{"id":128012},"_812-行内元素","8.1.2 行内元素",[14,128015,128016,128017,319,128019,319,128022,319,128025,319,128028,319,128031,319,128034,319,128037,319,128040,319,128043,128045,128046,128048],{},"常见的行内元素有 ",[93,128018,126304],{},[93,128020,128021],{},"\u003Cstrong>",[93,128023,128024],{},"\u003Cb>",[93,128026,128027],{},"\u003Cem>",[93,128029,128030],{},"\u003Ci>",[93,128032,128033],{},"\u003Cdel>",[93,128035,128036],{},"\u003Cs>",[93,128038,128039],{},"\u003Cins>",[93,128041,128042],{},"\u003Cu>",[93,128044,126145],{}," 等，其中 ",[93,128047,126145],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[14,128050,128051],{},[256,128052,128053],{},"特点：",[14,128055,128056],{},"① 相邻行内元素在一行上，一行可以显示多个。",[14,128058,128059],{},"② 高、宽直接设置是无效的。",[14,128061,128062],{},"③ 默认宽度就是它本身内容的宽度。",[14,128064,128065],{},"④ 行内元素只能容纳文本或其他行内元素。",[14,128067,128068],{},[256,128069,136],{},[14,128071,128072],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[14,128074,128075,128076,128078,128079,128081],{},"②特殊情况链接 ",[93,128077,126304],{}," 里面可以放块级元素，但是给 ",[93,128080,126304],{}," 转换一下块级模式最安全",[67,128083,128085],{"id":128084},"_813-行内块元素","8.1.3 行内块元素",[14,128087,128088,128089,319,128092,319,128095,128098],{},"在行内元素中有几个特殊的标签 —— ",[93,128090,128091],{},"\u003Cimg \u002F>",[93,128093,128094],{},"\u003Cinput \u002F>",[93,128096,128097],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[14,128100,128101],{},[256,128102,128103],{},"行内块元素的特点：",[14,128105,128106],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[14,128108,128109],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[14,128111,128112],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[67,128114,128116],{"id":128115},"_814-总结","8.1.4 总结",[1445,128118],{"style":126387,"src":128119},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[67,128121,128123],{"id":128122},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[14,128125,128126],{},"①转换为块元素：display:block;",[87,128128,128130],{"className":126531,"code":128129,"language":126533,"meta":18,"style":18},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[93,128131,128132,128137,128143,128154,128166,128178],{"__ignoreMap":18},[96,128133,128134],{"class":98,"line":99},[96,128135,128136],{"class":165},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[96,128138,128139,128141],{"class":98,"line":19},[96,128140,345],{"class":51279},[96,128142,15556],{"class":106},[96,128144,128145,128148,128150,128152],{"class":98,"line":1162},[96,128146,128147],{"class":155},"  display",[96,128149,51416],{"class":106},[96,128151,60848],{"class":155},[96,128153,1273],{"class":106},[96,128155,128156,128158,128160,128162,128164],{"class":98,"line":1177},[96,128157,70547],{"class":155},[96,128159,51416],{"class":106},[96,128161,418],{"class":155},[96,128163,51471],{"class":102},[96,128165,1273],{"class":106},[96,128167,128168,128170,128172,128174,128176],{"class":98,"line":1183},[96,128169,70767],{"class":155},[96,128171,51416],{"class":106},[96,128173,508],{"class":155},[96,128175,51471],{"class":102},[96,128177,1273],{"class":106},[96,128179,128180],{"class":98,"line":1197},[96,128181,1548],{"class":106},[14,128183,128184],{},"②转换为行内元素：display:inline;",[87,128186,128188],{"className":126531,"code":128187,"language":126533,"meta":18,"style":18},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[93,128189,128190,128195,128201,128212],{"__ignoreMap":18},[96,128191,128192],{"class":98,"line":99},[96,128193,128194],{"class":165},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[96,128196,128197,128199],{"class":98,"line":19},[96,128198,51590],{"class":51279},[96,128200,15556],{"class":106},[96,128202,128203,128205,128207,128210],{"class":98,"line":1162},[96,128204,128147],{"class":155},[96,128206,51416],{"class":106},[96,128208,128209],{"class":155},"inline",[96,128211,1273],{"class":106},[96,128213,128214],{"class":98,"line":1177},[96,128215,1548],{"class":106},[14,128217,128218],{},"③转换为行内块：display:inline-block;",[87,128220,128222],{"className":126531,"code":128221,"language":126533,"meta":18,"style":18},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[93,128223,128224,128229,128235,128245,128257,128269],{"__ignoreMap":18},[96,128225,128226],{"class":98,"line":99},[96,128227,128228],{"class":165},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[96,128230,128231,128233],{"class":98,"line":19},[96,128232,96],{"class":51279},[96,128234,15556],{"class":106},[96,128236,128237,128239,128241,128243],{"class":98,"line":1162},[96,128238,128147],{"class":155},[96,128240,51416],{"class":106},[96,128242,72362],{"class":155},[96,128244,1273],{"class":106},[96,128246,128247,128249,128251,128253,128255],{"class":98,"line":1177},[96,128248,70547],{"class":155},[96,128250,51416],{"class":106},[96,128252,719],{"class":155},[96,128254,51471],{"class":102},[96,128256,1273],{"class":106},[96,128258,128259,128261,128263,128265,128267],{"class":98,"line":1183},[96,128260,70767],{"class":155},[96,128262,51416],{"class":106},[96,128264,1058],{"class":155},[96,128266,51471],{"class":102},[96,128268,1273],{"class":106},[96,128270,128271],{"class":98,"line":1197},[96,128272,1548],{"class":106},[67,128274,128276],{"id":128275},"_816-小米侧边栏","8.1.6 小米侧边栏",[1445,128278],{"style":126387,"src":128279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[87,128281,128283],{"className":127278,"code":128282,"language":127280,"meta":18,"style":18},"\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",[93,128284,128285,128290,128305,128324,128343,128362,128381,128400,128419,128438],{"__ignoreMap":18},[96,128286,128287],{"class":98,"line":99},[96,128288,128289],{"class":165},"\u003C!-- 小米侧边栏案例 -->\n",[96,128291,128292,128294,128296,128298,128300,128303],{"class":98,"line":19},[96,128293,1017],{"class":106},[96,128295,51590],{"class":51279},[96,128297,53465],{"class":1946},[96,128299,152],{"class":106},[96,128301,128302],{"class":211},"\"sidebar\"",[96,128304,51286],{"class":106},[96,128306,128307,128309,128311,128313,128315,128317,128320,128322],{"class":98,"line":1162},[96,128308,52123],{"class":106},[96,128310,345],{"class":51279},[96,128312,61036],{"class":1946},[96,128314,152],{"class":106},[96,128316,61041],{"class":211},[96,128318,128319],{"class":106},">手机 电话卡\u003C\u002F",[96,128321,345],{"class":51279},[96,128323,51286],{"class":106},[96,128325,128326,128328,128330,128332,128334,128336,128339,128341],{"class":98,"line":1177},[96,128327,52123],{"class":106},[96,128329,345],{"class":51279},[96,128331,61036],{"class":1946},[96,128333,152],{"class":106},[96,128335,61041],{"class":211},[96,128337,128338],{"class":106},">电视 盒子\u003C\u002F",[96,128340,345],{"class":51279},[96,128342,51286],{"class":106},[96,128344,128345,128347,128349,128351,128353,128355,128358,128360],{"class":98,"line":1183},[96,128346,52123],{"class":106},[96,128348,345],{"class":51279},[96,128350,61036],{"class":1946},[96,128352,152],{"class":106},[96,128354,61041],{"class":211},[96,128356,128357],{"class":106},">笔记本 平板\u003C\u002F",[96,128359,345],{"class":51279},[96,128361,51286],{"class":106},[96,128363,128364,128366,128368,128370,128372,128374,128377,128379],{"class":98,"line":1197},[96,128365,52123],{"class":106},[96,128367,345],{"class":51279},[96,128369,61036],{"class":1946},[96,128371,152],{"class":106},[96,128373,61041],{"class":211},[96,128375,128376],{"class":106},">出行 穿戴\u003C\u002F",[96,128378,345],{"class":51279},[96,128380,51286],{"class":106},[96,128382,128383,128385,128387,128389,128391,128393,128396,128398],{"class":98,"line":1203},[96,128384,52123],{"class":106},[96,128386,345],{"class":51279},[96,128388,61036],{"class":1946},[96,128390,152],{"class":106},[96,128392,61041],{"class":211},[96,128394,128395],{"class":106},">智能 路由器\u003C\u002F",[96,128397,345],{"class":51279},[96,128399,51286],{"class":106},[96,128401,128402,128404,128406,128408,128410,128412,128415,128417],{"class":98,"line":1294},[96,128403,52123],{"class":106},[96,128405,345],{"class":51279},[96,128407,61036],{"class":1946},[96,128409,152],{"class":106},[96,128411,61041],{"class":211},[96,128413,128414],{"class":106},">健康 儿童\u003C\u002F",[96,128416,345],{"class":51279},[96,128418,51286],{"class":106},[96,128420,128421,128423,128425,128427,128429,128431,128434,128436],{"class":98,"line":1300},[96,128422,52123],{"class":106},[96,128424,345],{"class":51279},[96,128426,61036],{"class":1946},[96,128428,152],{"class":106},[96,128430,61041],{"class":211},[96,128432,128433],{"class":106},">耳机 音响\u003C\u002F",[96,128435,345],{"class":51279},[96,128437,51286],{"class":106},[96,128439,128440,128442,128444],{"class":98,"line":1312},[96,128441,51764],{"class":106},[96,128443,51590],{"class":51279},[96,128445,51286],{"class":106},[87,128447,128449],{"className":126531,"code":128448,"language":126533,"meta":18,"style":18},".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",[93,128450,128451,128460,128470,128483,128495,128507,128519,128529,128540,128544,128554,128565],{"__ignoreMap":18},[96,128452,128453,128456,128458],{"class":98,"line":99},[96,128454,128455],{"class":1946},".sidebar",[96,128457,1381],{"class":51279},[96,128459,15556],{"class":106},[96,128461,128462,128464,128466,128468],{"class":98,"line":19},[96,128463,128147],{"class":155},[96,128465,51416],{"class":106},[96,128467,60848],{"class":155},[96,128469,1273],{"class":106},[96,128471,128472,128474,128476,128479,128481],{"class":98,"line":1162},[96,128473,70547],{"class":155},[96,128475,51416],{"class":106},[96,128477,128478],{"class":155},"234",[96,128480,51471],{"class":102},[96,128482,1273],{"class":106},[96,128484,128485,128487,128489,128491,128493],{"class":98,"line":1177},[96,128486,70767],{"class":155},[96,128488,51416],{"class":106},[96,128490,559],{"class":155},[96,128492,51471],{"class":102},[96,128494,1273],{"class":106},[96,128496,128497,128499,128501,128503,128505],{"class":98,"line":1183},[96,128498,127215],{"class":155},[96,128500,51416],{"class":106},[96,128502,559],{"class":155},[96,128504,51471],{"class":102},[96,128506,1273],{"class":106},[96,128508,128509,128511,128513,128515,128517],{"class":98,"line":1197},[96,128510,70802],{"class":155},[96,128512,51416],{"class":106},[96,128514,1058],{"class":155},[96,128516,51471],{"class":102},[96,128518,1273],{"class":106},[96,128520,128521,128523,128525,128527],{"class":98,"line":1203},[96,128522,70884],{"class":155},[96,128524,51416],{"class":106},[96,128526,60821],{"class":155},[96,128528,1273],{"class":106},[96,128530,128531,128533,128535,128538],{"class":98,"line":1294},[96,128532,70857],{"class":155},[96,128534,51416],{"class":106},[96,128536,128537],{"class":155},"#55585a",[96,128539,1273],{"class":106},[96,128541,128542],{"class":98,"line":1300},[96,128543,1548],{"class":106},[96,128545,128546,128548,128550,128552],{"class":98,"line":1312},[96,128547,128455],{"class":1946},[96,128549,1381],{"class":51279},[96,128551,60919],{"class":1946},[96,128553,15556],{"class":106},[96,128555,128556,128558,128560,128563],{"class":98,"line":1595},[96,128557,70857],{"class":155},[96,128559,51416],{"class":106},[96,128561,128562],{"class":155},"#ff6700",[96,128564,1273],{"class":106},[96,128566,128567],{"class":98,"line":1600},[96,128568,1548],{"class":106},[1445,128570],{"style":126387,"src":128571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[14,128573,128574],{},"行高=盒子高度：实现文字的垂直居中",[14,128576,128577],{},"原理讲解：",[1445,128579],{"style":126387,"src":128580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[38,128582,128584],{"id":128583},"_82-css背景","8.2 css背景",[14,128586,128587],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[67,128589,128591],{"id":128590},"_821-背景颜色","8.2.1 背景颜色",[14,128593,128594],{},"background-color:颜色值;",[14,128596,128597],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[67,128599,128601],{"id":128600},"_822-背景图片","8.2.2 背景图片",[14,128603,128604],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[87,128606,128608],{"className":126531,"code":128607,"language":126533,"meta":18,"style":18},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[93,128609,128610,128616,128632],{"__ignoreMap":18},[96,128611,128612,128614],{"class":98,"line":99},[96,128613,51590],{"class":51279},[96,128615,15556],{"class":106},[96,128617,128618,128621,128623,128625,128627,128630],{"class":98,"line":19},[96,128619,128620],{"class":155},"  background-image",[96,128622,51416],{"class":106},[96,128624,61705],{"class":155},[96,128626,107],{"class":106},[96,128628,128629],{"class":5200},"images\u002Fbg.png",[96,128631,2702],{"class":106},[96,128633,128634],{"class":98,"line":1162},[96,128635,1548],{"class":106},[244,128637,128638,128647],{},[247,128639,128640],{},[250,128641,128642,128645],{},[253,128643,128644],{"align":23721},"参数值",[253,128646,102675],{"align":23721},[291,128648,128649,128656],{},[250,128650,128651,128653],{},[296,128652,54716],{"align":23721},[296,128654,128655],{"align":23721},"无背景图（默认的）",[250,128657,128658,128660],{},[296,128659,61705],{"align":23721},[296,128661,128662],{"align":23721},"使用绝对或相对地址指定背景图像",[87,128664,128665],{"className":126531,"code":128607,"language":126533,"meta":18,"style":18},[93,128666,128667,128673,128687],{"__ignoreMap":18},[96,128668,128669,128671],{"class":98,"line":99},[96,128670,51590],{"class":51279},[96,128672,15556],{"class":106},[96,128674,128675,128677,128679,128681,128683,128685],{"class":98,"line":19},[96,128676,128620],{"class":155},[96,128678,51416],{"class":106},[96,128680,61705],{"class":155},[96,128682,107],{"class":106},[96,128684,128629],{"class":5200},[96,128686,2702],{"class":106},[96,128688,128689],{"class":98,"line":1162},[96,128690,1548],{"class":106},[14,128692,128693],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[67,128695,128697],{"id":128696},"_823-背景平铺","8.2.3 背景平铺",[87,128699,128701],{"className":126531,"code":128700,"language":126533,"meta":18,"style":18},"div {\n  background-repeat: no-repeat;\n}\n",[93,128702,128703,128709,128720],{"__ignoreMap":18},[96,128704,128705,128707],{"class":98,"line":99},[96,128706,51590],{"class":51279},[96,128708,15556],{"class":106},[96,128710,128711,128714,128716,128718],{"class":98,"line":19},[96,128712,128713],{"class":155},"  background-repeat",[96,128715,51416],{"class":106},[96,128717,61715],{"class":155},[96,128719,1273],{"class":106},[96,128721,128722],{"class":98,"line":1162},[96,128723,1548],{"class":106},[244,128725,128726,128734],{},[247,128727,128728],{},[250,128729,128730,128732],{},[253,128731,128644],{"align":23721},[253,128733,102675],{"align":23721},[291,128735,128736,128744,128751,128759],{},[250,128737,128738,128741],{},[296,128739,128740],{"align":23721},"repeat",[296,128742,128743],{"align":23721},"背景图像在纵向和横向上平铺（默认的）",[250,128745,128746,128748],{},[296,128747,61715],{"align":23721},[296,128749,128750],{"align":23721},"背景图像不平铺",[250,128752,128753,128756],{},[296,128754,128755],{"align":23721},"repeat-x",[296,128757,128758],{"align":23721},"背景图像在横向上平铺",[250,128760,128761,128764],{},[296,128762,128763],{"align":23721},"repeat-y",[296,128765,128766],{"align":23721},"背景图像在纵向平铺",[67,128768,128770],{"id":128769},"_824-背景图片位置","8.2.4 背景图片位置",[87,128772,128774],{"className":126531,"code":128773,"language":126533,"meta":18,"style":18},"\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",[93,128775,128776,128781,128787,128801,128805,128810,128816,128832,128836,128841,128847,128861],{"__ignoreMap":18},[96,128777,128778],{"class":98,"line":99},[96,128779,128780],{"class":165},"\u002F* 方位名词 *\u002F\n",[96,128782,128783,128785],{"class":98,"line":19},[96,128784,51590],{"class":51279},[96,128786,15556],{"class":106},[96,128788,128789,128792,128794,128796,128799],{"class":98,"line":1162},[96,128790,128791],{"class":155},"  background-position",[96,128793,51416],{"class":106},[96,128795,51571],{"class":155},[96,128797,128798],{"class":155}," top",[96,128800,1273],{"class":106},[96,128802,128803],{"class":98,"line":1177},[96,128804,1548],{"class":106},[96,128806,128807],{"class":98,"line":1183},[96,128808,128809],{"class":165},"\u002F* 精确单位 *\u002F\n",[96,128811,128812,128814],{"class":98,"line":1197},[96,128813,51590],{"class":51279},[96,128815,15556],{"class":106},[96,128817,128818,128820,128822,128824,128826,128828,128830],{"class":98,"line":1203},[96,128819,128791],{"class":155},[96,128821,51416],{"class":106},[96,128823,807],{"class":155},[96,128825,51471],{"class":102},[96,128827,57483],{"class":155},[96,128829,51471],{"class":102},[96,128831,1273],{"class":106},[96,128833,128834],{"class":98,"line":1294},[96,128835,1548],{"class":106},[96,128837,128838],{"class":98,"line":1300},[96,128839,128840],{"class":165},"\u002F* 混合单位 *\u002F\n",[96,128842,128843,128845],{"class":98,"line":1312},[96,128844,51590],{"class":51279},[96,128846,15556],{"class":106},[96,128848,128849,128851,128853,128855,128857,128859],{"class":98,"line":1595},[96,128850,128791],{"class":155},[96,128852,51416],{"class":106},[96,128854,807],{"class":155},[96,128856,51471],{"class":102},[96,128858,17128],{"class":155},[96,128860,1273],{"class":106},[96,128862,128863],{"class":98,"line":1600},[96,128864,1548],{"class":106},[14,128866,128867],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[244,128869,128870,128878],{},[247,128871,128872],{},[250,128873,128874,128876],{},[253,128875,128644],{"align":23721},[253,128877,25848],{"align":23721},[291,128879,128880,128887],{},[250,128881,128882,128884],{},[296,128883,51947],{"align":23721},[296,128885,128886],{"align":23721},"百分数|由浮点数和单位标识符组成的长度值",[250,128888,128889,128892],{},[296,128890,128891],{"align":23721},"position",[296,128893,128894],{"align":23721},"top|center|bottom|left|center|right 方位名词",[14,128896,128897],{},"其他说明：",[14,128899,128900],{},"①参数是方位名词",[14,128902,128903],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[14,128905,128906],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[14,128908,128909],{},"②参数是精确单位",[14,128911,128912],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[14,128914,128915],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[14,128917,128918],{},"③参数是混合单位",[14,128920,128921],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[67,128923,128925],{"id":128924},"_825-背景图片固定","8.2.5 背景图片固定",[87,128927,128929],{"className":126531,"code":128928,"language":126533,"meta":18,"style":18},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[93,128930,128931,128936,128942,128954,128958,128963,128969,128979],{"__ignoreMap":18},[96,128932,128933],{"class":98,"line":99},[96,128934,128935],{"class":165},"\u002F* 背景滚动（默认） *\u002F\n",[96,128937,128938,128940],{"class":98,"line":19},[96,128939,51590],{"class":51279},[96,128941,15556],{"class":106},[96,128943,128944,128947,128949,128952],{"class":98,"line":1162},[96,128945,128946],{"class":155},"  background-attachment",[96,128948,51416],{"class":106},[96,128950,128951],{"class":155},"scroll",[96,128953,1273],{"class":106},[96,128955,128956],{"class":98,"line":1177},[96,128957,1548],{"class":106},[96,128959,128960],{"class":98,"line":1183},[96,128961,128962],{"class":165},"\u002F* 背景固定 *\u002F\n",[96,128964,128965,128967],{"class":98,"line":1197},[96,128966,51590],{"class":51279},[96,128968,15556],{"class":106},[96,128970,128971,128973,128975,128977],{"class":98,"line":1203},[96,128972,128946],{"class":155},[96,128974,51416],{"class":106},[96,128976,86212],{"class":155},[96,128978,1273],{"class":106},[96,128980,128981],{"class":98,"line":1294},[96,128982,1548],{"class":106},[244,128984,128985,128994],{},[247,128986,128987],{},[250,128988,128989,128992],{},[253,128990,128991],{"align":23721},"参数",[253,128993,102675],{"align":23721},[291,128995,128996,129003],{},[250,128997,128998,129000],{},[296,128999,128951],{"align":23721},[296,129001,129002],{"align":23721},"背景图像是随对象内容滚动",[250,129004,129005,129007],{},[296,129006,86212],{"align":23721},[296,129008,129009],{"align":23721},"背景图像固定",[67,129011,129013],{"id":129012},"_826-背景样式合写","8.2.6 背景样式合写",[87,129015,129017],{"className":126531,"code":129016,"language":126533,"meta":18,"style":18},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[93,129018,129019,129024,129030,129058],{"__ignoreMap":18},[96,129020,129021],{"class":98,"line":99},[96,129022,129023],{"class":165},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[96,129025,129026,129028],{"class":98,"line":19},[96,129027,51590],{"class":51279},[96,129029,15556],{"class":106},[96,129031,129032,129034,129036,129038,129041,129043,129045,129047,129049,129052,129054,129056],{"class":98,"line":1162},[96,129033,70590],{"class":155},[96,129035,51416],{"class":106},[96,129037,60821],{"class":155},[96,129039,129040],{"class":155}," url",[96,129042,107],{"class":106},[96,129044,128629],{"class":5200},[96,129046,13698],{"class":106},[96,129048,61715],{"class":155},[96,129050,129051],{"class":155}," fixed",[96,129053,17128],{"class":155},[96,129055,128798],{"class":155},[96,129057,1273],{"class":106},[96,129059,129060],{"class":98,"line":1177},[96,129061,1548],{"class":106},[67,129063,129065],{"id":129064},"_827-背景色半透明","8.2.7 背景色半透明",[87,129067,129069],{"className":126531,"code":129068,"language":126533,"meta":18,"style":18},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[93,129070,129071,129077,129103],{"__ignoreMap":18},[96,129072,129073,129075],{"class":98,"line":99},[96,129074,51590],{"class":51279},[96,129076,15556],{"class":106},[96,129078,129079,129081,129083,129085,129087,129089,129091,129093,129095,129097,129099,129101],{"class":98,"line":19},[96,129080,70590],{"class":155},[96,129082,51416],{"class":106},[96,129084,55089],{"class":155},[96,129086,107],{"class":106},[96,129088,298],{"class":155},[96,129090,12419],{"class":106},[96,129092,298],{"class":155},[96,129094,12419],{"class":106},[96,129096,298],{"class":155},[96,129098,12419],{"class":106},[96,129100,100500],{"class":155},[96,129102,2702],{"class":106},[96,129104,129105],{"class":98,"line":1162},[96,129106,1548],{"class":106},[14,129108,99375],{},[14,129110,129111],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[14,129113,129114],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[14,129116,129117],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[14,129119,129120],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[67,129122,129124],{"id":129123},"_828-总结","8.2.8 总结",[244,129126,129127,129138],{},[247,129128,129129],{},[250,129130,129131,129134,129136],{},[253,129132,129133],{"align":23721},"属性",[253,129135,102675],{"align":23721},[253,129137,259],{"align":23721},[291,129139,129140,129151,129162,129173,129184,129195,129206],{},[250,129141,129142,129145,129148],{},[296,129143,129144],{"align":23721},"background-color",[296,129146,129147],{"align":23721},"背景颜色",[296,129149,129150],{"align":23721},"预定义的颜色值\u002F十六进制\u002FRGB代码",[250,129152,129153,129156,129159],{},[296,129154,129155],{"align":23721},"background-image",[296,129157,129158],{"align":23721},"背景图片",[296,129160,129161],{"align":23721},"url(图片路径)",[250,129163,129164,129167,129170],{},[296,129165,129166],{"align":23721},"background-repeat",[296,129168,129169],{"align":23721},"是否平铺",[296,129171,129172],{"align":23721},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[250,129174,129175,129178,129181],{},[296,129176,129177],{"align":23721},"background-position",[296,129179,129180],{"align":23721},"背景位置",[296,129182,129183],{"align":23721},"length\u002Fposition 分别是x和y坐标",[250,129185,129186,129189,129192],{},[296,129187,129188],{"align":23721},"background-attachment",[296,129190,129191],{"align":23721},"背景附着",[296,129193,129194],{"align":23721},"scroll(背景滚动) \u002Ffixed (背景固定)",[250,129196,129197,129200,129203],{},[296,129198,129199],{"align":23721},"背景简写",[296,129201,129202],{"align":23721},"书写更简单",[296,129204,129205],{"align":23721},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[250,129207,129208,129211,129214],{},[296,129209,129210],{"align":23721},"背景半透明",[296,129212,129213],{"align":23721},"背景颜色半透明",[296,129215,129216],{"align":23721},"background: rgba(0,0,0.3); 后面必须是4个值",[14,129218,129219],{},"颜色渐变：",[1445,129221],{"style":126387,"src":129222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[1445,129224],{"style":126387,"src":129225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[67,129227,129229],{"id":129228},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[87,129231,129233],{"className":127278,"code":129232,"language":127280,"meta":18,"style":18},"\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",[93,129234,129235,129250,129269,129288,129307,129326,129345],{"__ignoreMap":18},[96,129236,129237,129239,129241,129243,129245,129248],{"class":98,"line":99},[96,129238,1017],{"class":106},[96,129240,51590],{"class":51279},[96,129242,53465],{"class":1946},[96,129244,152],{"class":106},[96,129246,129247],{"class":211},"\"nav\"",[96,129249,51286],{"class":106},[96,129251,129252,129254,129256,129258,129260,129262,129265,129267],{"class":98,"line":19},[96,129253,52123],{"class":106},[96,129255,345],{"class":51279},[96,129257,61036],{"class":1946},[96,129259,152],{"class":106},[96,129261,61041],{"class":211},[96,129263,129264],{"class":106},">五彩导航1\u003C\u002F",[96,129266,345],{"class":51279},[96,129268,51286],{"class":106},[96,129270,129271,129273,129275,129277,129279,129281,129284,129286],{"class":98,"line":1162},[96,129272,52123],{"class":106},[96,129274,345],{"class":51279},[96,129276,61036],{"class":1946},[96,129278,152],{"class":106},[96,129280,61041],{"class":211},[96,129282,129283],{"class":106},">五彩导航2\u003C\u002F",[96,129285,345],{"class":51279},[96,129287,51286],{"class":106},[96,129289,129290,129292,129294,129296,129298,129300,129303,129305],{"class":98,"line":1177},[96,129291,52123],{"class":106},[96,129293,345],{"class":51279},[96,129295,61036],{"class":1946},[96,129297,152],{"class":106},[96,129299,61041],{"class":211},[96,129301,129302],{"class":106},">五彩导航3\u003C\u002F",[96,129304,345],{"class":51279},[96,129306,51286],{"class":106},[96,129308,129309,129311,129313,129315,129317,129319,129322,129324],{"class":98,"line":1183},[96,129310,52123],{"class":106},[96,129312,345],{"class":51279},[96,129314,61036],{"class":1946},[96,129316,152],{"class":106},[96,129318,61041],{"class":211},[96,129320,129321],{"class":106},">五彩导航4\u003C\u002F",[96,129323,345],{"class":51279},[96,129325,51286],{"class":106},[96,129327,129328,129330,129332,129334,129336,129338,129341,129343],{"class":98,"line":1197},[96,129329,52123],{"class":106},[96,129331,345],{"class":51279},[96,129333,61036],{"class":1946},[96,129335,152],{"class":106},[96,129337,61041],{"class":211},[96,129339,129340],{"class":106},">五彩导航5\u003C\u002F",[96,129342,345],{"class":51279},[96,129344,51286],{"class":106},[96,129346,129347,129349,129351],{"class":98,"line":1203},[96,129348,51764],{"class":106},[96,129350,51590],{"class":51279},[96,129352,51286],{"class":106},[87,129354,129356],{"className":126531,"code":129355,"language":126533,"meta":18,"style":18},".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",[93,129357,129358,129367,129377,129389,129401,129411,129423,129433,129437,129462,129485,129508,129531],{"__ignoreMap":18},[96,129359,129360,129363,129365],{"class":98,"line":99},[96,129361,129362],{"class":1946},".nav",[96,129364,1381],{"class":51279},[96,129366,15556],{"class":106},[96,129368,129369,129371,129373,129375],{"class":98,"line":19},[96,129370,128147],{"class":155},[96,129372,51416],{"class":106},[96,129374,72362],{"class":155},[96,129376,1273],{"class":106},[96,129378,129379,129381,129383,129385,129387],{"class":98,"line":1162},[96,129380,70547],{"class":155},[96,129382,51416],{"class":106},[96,129384,924],{"class":155},[96,129386,51471],{"class":102},[96,129388,1273],{"class":106},[96,129390,129391,129393,129395,129397,129399],{"class":98,"line":1177},[96,129392,70767],{"class":155},[96,129394,51416],{"class":106},[96,129396,963],{"class":155},[96,129398,51471],{"class":102},[96,129400,1273],{"class":106},[96,129402,129403,129405,129407,129409],{"class":98,"line":1183},[96,129404,70505],{"class":155},[96,129406,51416],{"class":106},[96,129408,51571],{"class":155},[96,129410,1273],{"class":106},[96,129412,129413,129415,129417,129419,129421],{"class":98,"line":1197},[96,129414,127215],{"class":155},[96,129416,51416],{"class":106},[96,129418,963],{"class":155},[96,129420,51471],{"class":102},[96,129422,1273],{"class":106},[96,129424,129425,129427,129429,129431],{"class":98,"line":1203},[96,129426,70884],{"class":155},[96,129428,51416],{"class":106},[96,129430,60821],{"class":155},[96,129432,1273],{"class":106},[96,129434,129435],{"class":98,"line":1294},[96,129436,1548],{"class":106},[96,129438,129439,129441,129443,129446,129448,129450,129453,129455,129457,129459],{"class":98,"line":1300},[96,129440,129362],{"class":1946},[96,129442,1381],{"class":51279},[96,129444,129445],{"class":1946},":nth-child",[96,129447,107],{"class":106},[96,129449,324],{"class":155},[96,129451,129452],{"class":106},") { ",[96,129454,129144],{"class":155},[96,129456,51416],{"class":106},[96,129458,128562],{"class":155},[96,129460,129461],{"class":106},"; }\n",[96,129463,129464,129466,129468,129470,129472,129474,129476,129478,129480,129483],{"class":98,"line":1312},[96,129465,129362],{"class":1946},[96,129467,1381],{"class":51279},[96,129469,129445],{"class":1946},[96,129471,107],{"class":106},[96,129473,184],{"class":155},[96,129475,129452],{"class":106},[96,129477,129144],{"class":155},[96,129479,51416],{"class":106},[96,129481,129482],{"class":155},"#ff0000",[96,129484,129461],{"class":106},[96,129486,129487,129489,129491,129493,129495,129497,129499,129501,129503,129506],{"class":98,"line":1595},[96,129488,129362],{"class":1946},[96,129490,1381],{"class":51279},[96,129492,129445],{"class":1946},[96,129494,107],{"class":106},[96,129496,178],{"class":155},[96,129498,129452],{"class":106},[96,129500,129144],{"class":155},[96,129502,51416],{"class":106},[96,129504,129505],{"class":155},"#00a4ff",[96,129507,129461],{"class":106},[96,129509,129510,129512,129514,129516,129518,129520,129522,129524,129526,129529],{"class":98,"line":1600},[96,129511,129362],{"class":1946},[96,129513,1381],{"class":51279},[96,129515,129445],{"class":1946},[96,129517,107],{"class":106},[96,129519,400],{"class":155},[96,129521,129452],{"class":106},[96,129523,129144],{"class":155},[96,129525,51416],{"class":106},[96,129527,129528],{"class":155},"#ff00ff",[96,129530,129461],{"class":106},[96,129532,129533,129535,129537,129539,129541,129543,129545,129547,129549,129552],{"class":98,"line":1606},[96,129534,129362],{"class":1946},[96,129536,1381],{"class":51279},[96,129538,129445],{"class":1946},[96,129540,107],{"class":106},[96,129542,426],{"class":155},[96,129544,129452],{"class":106},[96,129546,129144],{"class":155},[96,129548,51416],{"class":106},[96,129550,129551],{"class":155},"#00ff00",[96,129553,129461],{"class":106},[38,129555,129557],{"id":129556},"_83-css三大特性","8.3 css三大特性",[67,129559,129561],{"id":129560},"_831-层叠性","8.3.1 层叠性",[14,129563,129564],{},"为了解决样式冲突问题",[14,129566,129567],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[14,129569,129570],{},"   ②样式不冲突，不会层叠",[67,129572,129574],{"id":129573},"_832-继承性","8.3.2 继承性",[14,129576,129577],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[14,129579,129580],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[87,129582,129584],{"className":126531,"code":129583,"language":126533,"meta":18,"style":18},"p {\n  color: #333;\n}\n",[93,129585,129586,129592,129602],{"__ignoreMap":18},[96,129587,129588,129590],{"class":98,"line":99},[96,129589,14],{"class":51279},[96,129591,15556],{"class":106},[96,129593,129594,129596,129598,129600],{"class":98,"line":19},[96,129595,70884],{"class":155},[96,129597,51416],{"class":106},[96,129599,62348],{"class":155},[96,129601,1273],{"class":106},[96,129603,129604],{"class":98,"line":1162},[96,129605,1548],{"class":106},[1445,129607],{"style":126387,"src":129608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[14,129610,129611],{},"解释：①行高可以跟单位也可以不跟单位",[14,129613,129614],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[14,129616,129617],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[14,129619,129620],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[67,129622,129624],{"id":129623},"_833-优先级","8.3.3 优先级",[50,129626,129627,129630],{},[53,129628,129629],{},"选择器相同，则执行层叠性",[53,129631,129632],{},"选择器不同，则根据选择器权重执行",[244,129634,129635,129645],{},[247,129636,129637],{},[250,129638,129639,129642],{},[253,129640,129641],{"align":23721},"选择器",[253,129643,129644],{"align":23721},"选择器权重",[291,129646,129647,129655,129663,129671,129679,129687],{},[250,129648,129649,129652],{},[296,129650,129651],{"align":23721},"继承 或者*",[296,129653,129654],{"align":23721},"0，0，0，0",[250,129656,129657,129660],{},[296,129658,129659],{"align":23721},"标签选择器",[296,129661,129662],{"align":23721},"0，0，0，1",[250,129664,129665,129668],{},[296,129666,129667],{"align":23721},"类选择器，伪类选择器",[296,129669,129670],{"align":23721},"0，0，1，0",[250,129672,129673,129676],{},[296,129674,129675],{"align":23721},"ID选择器",[296,129677,129678],{"align":23721},"0，1，0，0",[250,129680,129681,129684],{},[296,129682,129683],{"align":23721},"行内样式",[296,129685,129686],{"align":23721},"1，0，0，0",[250,129688,129689,129692],{},[296,129690,129691],{"align":23721},"！important",[296,129693,129694],{"align":23721},"无穷大",[14,129696,129697],{},"! important用法：",[87,129699,129701],{"className":126531,"code":129700,"language":126533,"meta":18,"style":18},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[93,129702,129703,129708,129714,129727,129731,129736,129742,129752],{"__ignoreMap":18},[96,129704,129705],{"class":98,"line":99},[96,129706,129707],{"class":165},"\u002F* !important 拥有最高优先级 *\u002F\n",[96,129709,129710,129712],{"class":98,"line":19},[96,129711,51590],{"class":51279},[96,129713,15556],{"class":106},[96,129715,129716,129718,129720,129722,129725],{"class":98,"line":1162},[96,129717,70884],{"class":155},[96,129719,51416],{"class":106},[96,129721,51624],{"class":155},[96,129723,129724],{"class":102}," !important",[96,129726,1273],{"class":106},[96,129728,129729],{"class":98,"line":1177},[96,129730,1548],{"class":106},[96,129732,129733],{"class":98,"line":1183},[96,129734,129735],{"class":165},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[96,129737,129738,129740],{"class":98,"line":1197},[96,129739,51590],{"class":51279},[96,129741,15556],{"class":106},[96,129743,129744,129746,129748,129750],{"class":98,"line":1203},[96,129745,70884],{"class":155},[96,129747,51416],{"class":106},[96,129749,57400],{"class":155},[96,129751,1273],{"class":106},[96,129753,129754],{"class":98,"line":1294},[96,129755,1548],{"class":106},[14,129757,129758],{},"优先级注意点：",[14,129760,129761],{},"①权重是有4组数字组成,但是不会有进位",[14,129763,129764],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[14,129766,129767],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[14,129769,129770],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[14,129772,129773],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[14,129775,129776],{},"⑥复合选择器",[244,129778,129779,129789],{},[247,129780,129781],{},[250,129782,129783,129786],{},[253,129784,129785],{"align":23721},"div ul li",[253,129787,129788],{"align":23721},"0,0,0,3",[291,129790,129791,129799,129807],{},[250,129792,129793,129796],{},[296,129794,129795],{"align":23721},".nav ul li",[296,129797,129798],{"align":23721},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[250,129800,129801,129804],{},[296,129802,129803],{"align":23721},"a:hover",[296,129805,129806],{"align":23721},"0,0,1,1",[250,129808,129809,129812],{},[296,129810,129811],{"align":23721},".nav a",[296,129813,129806],{"align":23721},[5110,129815,129816],{},"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":18,"searchDepth":19,"depth":19,"links":129818},[129819,129827,129838],{"id":127927,"depth":19,"text":127928,"children":129820},[129821,129822,129823,129824,129825,129826],{"id":127940,"depth":1162,"text":127941},{"id":128012,"depth":1162,"text":128013},{"id":128084,"depth":1162,"text":128085},{"id":128115,"depth":1162,"text":128116},{"id":128122,"depth":1162,"text":128123},{"id":128275,"depth":1162,"text":128276},{"id":128583,"depth":19,"text":128584,"children":129828},[129829,129830,129831,129832,129833,129834,129835,129836,129837],{"id":128590,"depth":1162,"text":128591},{"id":128600,"depth":1162,"text":128601},{"id":128696,"depth":1162,"text":128697},{"id":128769,"depth":1162,"text":128770},{"id":128924,"depth":1162,"text":128925},{"id":129012,"depth":1162,"text":129013},{"id":129064,"depth":1162,"text":129065},{"id":129123,"depth":1162,"text":129124},{"id":129228,"depth":1162,"text":129229},{"id":129556,"depth":19,"text":129557,"children":129839},[129840,129841,129842],{"id":129560,"depth":1162,"text":129561},{"id":129573,"depth":1162,"text":129574},{"id":129623,"depth":1162,"text":129624},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":127919,"description":23361},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129849,"title":129850,"body":129851,"description":23361,"extension":21,"meta":131441,"navigation":23,"path":131442,"seo":131443,"stem":131444,"__hash__":131445},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129852,"toc":131420},[129853,129856,129860,129863,129866,129869,129872,129875,129878,129881,129885,129893,129930,129966,129969,129983,129988,130022,130025,130118,130123,130126,130156,130159,130164,130172,130176,130183,130229,130273,130278,130281,130284,130287,130290,130293,130296,130298,130301,130305,130310,130354,130359,130362,130365,130402,130407,130410,130413,130416,130419,130451,130454,130457,130460,130492,130495,130498,130501,130505,130508,130540,130543,130547,130567,130570,130578,130581,130585,130590,130593,130625,130630,130633,130671,130675,130680,130683,130686,130717,130720,130737,130742,130794,130854,130859,130913,130951,130955,130959,130962,130966,130974,130977,130979,130990,130995,131043,131077,131080,131083,131086,131089,131133,131136,131139,131142,131145,131148,131151,131195,131198,131201,131204,131207,131210,131213,131219,131222,131266,131269,131272,131275,131278,131281,131325,131328,131330,131333,131337,131341,131379,131383,131386,131389,131393,131401,131405,131408,131411,131414,131417],[10,129854,129850],{"id":129855},"_9-css盒模型浮动与切图",[38,129857,129859],{"id":129858},"_91-盒子模型","9.1 盒子模型",[14,129861,129862],{},"利用盒子来设计网页",[14,129864,129865],{},"盒子包含：边框、外边距、内边距、实际内容",[14,129867,129868],{},"网页布局设置：",[14,129870,129871],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[14,129873,129874],{},"②利用css设置好盒子样式，然后摆放到相应位置",[14,129876,129877],{},"③往盒子里装内容",[1445,129879],{"style":126387,"src":129880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[67,129882,129884],{"id":129883},"_911-边框border","9.1.1 边框（border）",[50,129886,129887,129890],{},[53,129888,129889],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[53,129891,129892],{},"语法",[87,129894,129896],{"className":126531,"code":129895,"language":126533,"meta":18,"style":18},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[93,129897,129898,129903,129909,129926],{"__ignoreMap":18},[96,129899,129900],{"class":98,"line":99},[96,129901,129902],{"class":165},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[96,129904,129905,129907],{"class":98,"line":19},[96,129906,51590],{"class":51279},[96,129908,15556],{"class":106},[96,129910,129911,129913,129915,129917,129919,129921,129924],{"class":98,"line":1162},[96,129912,70875],{"class":155},[96,129914,51416],{"class":106},[96,129916,324],{"class":155},[96,129918,51471],{"class":102},[96,129920,51500],{"class":155},[96,129922,129923],{"class":155}," #ccc",[96,129925,1273],{"class":106},[96,129927,129928],{"class":98,"line":1177},[96,129929,1548],{"class":106},[244,129931,129932,129940],{},[247,129933,129934],{},[250,129935,129936,129938],{},[253,129937,129133],{"align":23721},[253,129939,102675],{"align":23721},[291,129941,129942,129950,129958],{},[250,129943,129944,129947],{},[296,129945,129946],{"align":23721},"border-width",[296,129948,129949],{"align":23721},"定义边框粗细，单位是px",[250,129951,129952,129955],{},[296,129953,129954],{"align":23721},"border-style",[296,129956,129957],{"align":23721},"边框的样式",[250,129959,129960,129963],{},[296,129961,129962],{"align":23721},"border-color",[296,129964,129965],{"align":23721},"边框的颜色",[14,129967,129968],{},"边框样式 border-style 可以设置如下值：",[1114,129970,129971,129974,129977,129980],{},[53,129972,129973],{},"none：没有边框即忽略所有边框的宽度（默认值）",[53,129975,129976],{},"solid：边框为单实线(最为常用的)",[53,129978,129979],{},"dashed：边框为虚线",[53,129981,129982],{},"dotted：边框为点线",[50,129984,129985],{"start":1162},[53,129986,129987],{},"边框的合写分写",[87,129989,129990],{"className":126531,"code":129895,"language":126533,"meta":18,"style":18},[93,129991,129992,129996,130002,130018],{"__ignoreMap":18},[96,129993,129994],{"class":98,"line":99},[96,129995,129902],{"class":165},[96,129997,129998,130000],{"class":98,"line":19},[96,129999,51590],{"class":51279},[96,130001,15556],{"class":106},[96,130003,130004,130006,130008,130010,130012,130014,130016],{"class":98,"line":1162},[96,130005,70875],{"class":155},[96,130007,51416],{"class":106},[96,130009,324],{"class":155},[96,130011,51471],{"class":102},[96,130013,51500],{"class":155},[96,130015,129923],{"class":155},[96,130017,1273],{"class":106},[96,130019,130020],{"class":98,"line":1177},[96,130021,1548],{"class":106},[14,130023,130024],{},"边框分开写法：",[87,130026,130028],{"className":126531,"code":130027,"language":126533,"meta":18,"style":18},"\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",[93,130029,130030,130035,130041,130059,130077,130096,130114],{"__ignoreMap":18},[96,130031,130032],{"class":98,"line":99},[96,130033,130034],{"class":165},"\u002F* 边框分开写法 *\u002F\n",[96,130036,130037,130039],{"class":98,"line":19},[96,130038,51590],{"class":51279},[96,130040,15556],{"class":106},[96,130042,130043,130046,130048,130050,130052,130054,130057],{"class":98,"line":1162},[96,130044,130045],{"class":155},"  border-top",[96,130047,51416],{"class":106},[96,130049,324],{"class":155},[96,130051,51471],{"class":102},[96,130053,51500],{"class":155},[96,130055,130056],{"class":155}," #000",[96,130058,1273],{"class":106},[96,130060,130061,130064,130066,130068,130070,130072,130075],{"class":98,"line":1177},[96,130062,130063],{"class":155},"  border-right",[96,130065,51416],{"class":106},[96,130067,184],{"class":155},[96,130069,51471],{"class":102},[96,130071,62220],{"class":155},[96,130073,130074],{"class":155}," #333",[96,130076,1273],{"class":106},[96,130078,130079,130082,130084,130086,130088,130091,130094],{"class":98,"line":1183},[96,130080,130081],{"class":155},"  border-bottom",[96,130083,51416],{"class":106},[96,130085,178],{"class":155},[96,130087,51471],{"class":102},[96,130089,130090],{"class":155}," dotted",[96,130092,130093],{"class":155}," #666",[96,130095,1273],{"class":106},[96,130097,130098,130101,130103,130105,130107,130109,130112],{"class":98,"line":1197},[96,130099,130100],{"class":155},"  border-left",[96,130102,51416],{"class":106},[96,130104,324],{"class":155},[96,130106,51471],{"class":102},[96,130108,51500],{"class":155},[96,130110,130111],{"class":155}," #999",[96,130113,1273],{"class":106},[96,130115,130116],{"class":98,"line":1203},[96,130117,1548],{"class":106},[50,130119,130120],{"start":1177},[53,130121,130122],{},"表格的细线边框",[14,130124,130125],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[87,130127,130129],{"className":126531,"code":130128,"language":126533,"meta":18,"style":18},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[93,130130,130131,130136,130142,130152],{"__ignoreMap":18},[96,130132,130133],{"class":98,"line":99},[96,130134,130135],{"class":165},"\u002F* 表格细线边框合并 *\u002F\n",[96,130137,130138,130140],{"class":98,"line":19},[96,130139,244],{"class":51279},[96,130141,15556],{"class":106},[96,130143,130144,130146,130148,130150],{"class":98,"line":1162},[96,130145,70557],{"class":155},[96,130147,51416],{"class":106},[96,130149,65014],{"class":155},[96,130151,1273],{"class":106},[96,130153,130154],{"class":98,"line":1177},[96,130155,1548],{"class":106},[14,130157,130158],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[50,130160,130161],{"start":1183},[53,130162,130163],{},"解决边框额外增加盒子的实际大小的方法：",[1114,130165,130166,130169],{},[53,130167,130168],{},"测量盒子大小的时候,不量边框",[53,130170,130171],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[67,130173,130175],{"id":130174},"_912-内边距","9.1.2 内边距",[50,130177,130178,130181],{},[53,130179,130180],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[53,130182,129892],{},[244,130184,130185,130195],{},[247,130186,130187],{},[250,130188,130189,130192],{},[253,130190,130191],{"align":23721},"值的个数",[253,130193,130194],{"align":23721},"表达意思",[291,130196,130197,130205,130213,130221],{},[250,130198,130199,130202],{},[296,130200,130201],{"align":23721},"padding: 5px;",[296,130203,130204],{"align":23721},"1个值，代表上下左右都有5个元素",[250,130206,130207,130210],{},[296,130208,130209],{"align":23721},"padding: 5px 10px;",[296,130211,130212],{"align":23721},"2个值，代表上下内边距为5像素，左右内边距为10像素",[250,130214,130215,130218],{},[296,130216,130217],{"align":23721},"padding: 5px 10px 20px;",[296,130219,130220],{"align":23721},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[250,130222,130223,130226],{},[296,130224,130225],{"align":23721},"padding: 5px 10px 20px 30px;",[296,130227,130228],{"align":23721},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[244,130230,130231,130239],{},[247,130232,130233],{},[250,130234,130235,130237],{},[253,130236,129133],{"align":23721},[253,130238,102675],{"align":23721},[291,130240,130241,130249,130257,130265],{},[250,130242,130243,130246],{},[296,130244,130245],{"align":23721},"padding-left",[296,130247,130248],{"align":23721},"左内边距",[250,130250,130251,130254],{},[296,130252,130253],{"align":23721},"padding-right",[296,130255,130256],{"align":23721},"右内边距",[250,130258,130259,130262],{},[296,130260,130261],{"align":23721},"padding-top",[296,130263,130264],{"align":23721},"上内边距",[250,130266,130267,130270],{},[296,130268,130269],{"align":23721},"padding-bottom",[296,130271,130272],{"align":23721},"下内边距",[50,130274,130275],{"start":1162},[53,130276,130277],{},"内边距会影响盒子的实际大小",[14,130279,130280],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[14,130282,130283],{},"①内容和边框有了距离，添加了内边距",[14,130285,130286],{},"②padding影响了盒子实际大小",[14,130288,130289],{},"内边距对盒子大小的影响：",[14,130291,130292],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[14,130294,130295],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[14,130297,95199],{},[14,130299,130300],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[67,130302,130304],{"id":130303},"_913-外边距","9.1.3 外边距",[50,130306,130307],{},[53,130308,130309],{},"控制盒子与盒子之间的距离",[244,130311,130312,130320],{},[247,130313,130314],{},[250,130315,130316,130318],{},[253,130317,129133],{"align":23721},[253,130319,102675],{"align":23721},[291,130321,130322,130330,130338,130346],{},[250,130323,130324,130327],{},[296,130325,130326],{"align":23721},"margin-left",[296,130328,130329],{"align":23721},"左外边距",[250,130331,130332,130335],{},[296,130333,130334],{"align":23721},"margin-right",[296,130336,130337],{"align":23721},"右外边距",[250,130339,130340,130343],{},[296,130341,130342],{"align":23721},"margin-top",[296,130344,130345],{"align":23721},"上外边距",[250,130347,130348,130351],{},[296,130349,130350],{"align":23721},"margin-bottom",[296,130352,130353],{"align":23721},"下外边距",[50,130355,130356],{"start":19},[53,130357,130358],{},"外边距可以让块级盒子水平居中的两个条件：",[14,130360,130361],{},"①盒子必须指定了宽度（width）",[14,130363,130364],{},"②盒子左右的外边距都设置为 auto",[87,130366,130368],{"className":126531,"code":130367,"language":126533,"meta":18,"style":18},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[93,130369,130370,130375,130382,130398],{"__ignoreMap":18},[96,130371,130372],{"class":98,"line":99},[96,130373,130374],{"class":165},"\u002F* margin 复合写法（同上） *\u002F\n",[96,130376,130377,130380],{"class":98,"line":19},[96,130378,130379],{"class":1946},".box",[96,130381,15556],{"class":106},[96,130383,130384,130386,130388,130390,130392,130395],{"class":98,"line":1162},[96,130385,70449],{"class":155},[96,130387,51416],{"class":106},[96,130389,298],{"class":155},[96,130391,51535],{"class":155},[96,130393,130394],{"class":106},";  ",[96,130396,130397],{"class":165},"\u002F* 块级盒子水平居中 *\u002F\n",[96,130399,130400],{"class":98,"line":1177},[96,130401,1548],{"class":106},[50,130403,130404],{"start":1162},[53,130405,130406],{},"外边距塌陷问题",[14,130408,130409],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[1445,130411],{"style":126387,"src":130412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[14,130414,130415],{},"解决方案：",[14,130417,130418],{},"①可以为父亲元素定义上边距",[87,130420,130421],{"className":126531,"code":130367,"language":126533,"meta":18,"style":18},[93,130422,130423,130427,130433,130447],{"__ignoreMap":18},[96,130424,130425],{"class":98,"line":99},[96,130426,130374],{"class":165},[96,130428,130429,130431],{"class":98,"line":19},[96,130430,130379],{"class":1946},[96,130432,15556],{"class":106},[96,130434,130435,130437,130439,130441,130443,130445],{"class":98,"line":1162},[96,130436,70449],{"class":155},[96,130438,51416],{"class":106},[96,130440,298],{"class":155},[96,130442,51535],{"class":155},[96,130444,130394],{"class":106},[96,130446,130397],{"class":165},[96,130448,130449],{"class":98,"line":1177},[96,130450,1548],{"class":106},[14,130452,130453],{},"②可以为父亲元素定义上内边距",[14,130455,130456],{},"③可以为父亲元素添加overflow:hidden",[1445,130458],{"style":126387,"src":130459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[87,130461,130462],{"className":126531,"code":130367,"language":126533,"meta":18,"style":18},[93,130463,130464,130468,130474,130488],{"__ignoreMap":18},[96,130465,130466],{"class":98,"line":99},[96,130467,130374],{"class":165},[96,130469,130470,130472],{"class":98,"line":19},[96,130471,130379],{"class":1946},[96,130473,15556],{"class":106},[96,130475,130476,130478,130480,130482,130484,130486],{"class":98,"line":1162},[96,130477,70449],{"class":155},[96,130479,51416],{"class":106},[96,130481,298],{"class":155},[96,130483,51535],{"class":155},[96,130485,130394],{"class":106},[96,130487,130397],{"class":165},[96,130489,130490],{"class":98,"line":1177},[96,130491,1548],{"class":106},[1445,130493],{"style":126387,"src":130494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[14,130496,130497],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[14,130499,130500],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[67,130502,130504],{"id":130503},"_914-清除内外边距","9.1.4 清除内外边距",[14,130506,130507],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[87,130509,130510],{"className":126531,"code":130367,"language":126533,"meta":18,"style":18},[93,130511,130512,130516,130522,130536],{"__ignoreMap":18},[96,130513,130514],{"class":98,"line":99},[96,130515,130374],{"class":165},[96,130517,130518,130520],{"class":98,"line":19},[96,130519,130379],{"class":1946},[96,130521,15556],{"class":106},[96,130523,130524,130526,130528,130530,130532,130534],{"class":98,"line":1162},[96,130525,70449],{"class":155},[96,130527,51416],{"class":106},[96,130529,298],{"class":155},[96,130531,51535],{"class":155},[96,130533,130394],{"class":106},[96,130535,130397],{"class":165},[96,130537,130538],{"class":98,"line":1177},[96,130539,1548],{"class":106},[14,130541,130542],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[67,130544,130546],{"id":130545},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1114,130548,130549,130552,130555,130558,130561,130564],{},[53,130550,130551],{},"文件→打开 ：可以打开我们要测量的图片",[53,130553,130554],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[53,130556,130557],{},"右击标尺，把里面的单位改为像素",[53,130559,130560],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[53,130562,130563],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[53,130565,130566],{},"用选区拖动 可以测量大小",[1445,130568],{"style":126387,"src":130569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1114,130571,130572,130575],{},[53,130573,130574],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[53,130576,130577],{},"吸管取色工具",[1445,130579],{"style":126387,"src":130580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[67,130582,130584],{"id":130583},"_916-案例","9.1.6 案例",[50,130586,130587],{},[53,130588,130589],{},"小米商品",[1445,130591],{"style":126387,"src":130592},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[87,130594,130595],{"className":126531,"code":130367,"language":126533,"meta":18,"style":18},[93,130596,130597,130601,130607,130621],{"__ignoreMap":18},[96,130598,130599],{"class":98,"line":99},[96,130600,130374],{"class":165},[96,130602,130603,130605],{"class":98,"line":19},[96,130604,130379],{"class":1946},[96,130606,15556],{"class":106},[96,130608,130609,130611,130613,130615,130617,130619],{"class":98,"line":1162},[96,130610,70449],{"class":155},[96,130612,51416],{"class":106},[96,130614,298],{"class":155},[96,130616,51535],{"class":155},[96,130618,130394],{"class":106},[96,130620,130397],{"class":165},[96,130622,130623],{"class":98,"line":1177},[96,130624,1548],{"class":106},[50,130626,130627],{"start":19},[53,130628,130629],{},"快报模块",[1445,130631],{"style":126387,"src":130632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[87,130634,130636],{"className":127278,"code":130635,"language":127280,"meta":18,"style":18},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[93,130637,130638,130643,130658,130663],{"__ignoreMap":18},[96,130639,130640],{"class":98,"line":99},[96,130641,130642],{"class":165},"\u003C!-- HTML 代码示例 -->\n",[96,130644,130645,130647,130649,130651,130653,130656],{"class":98,"line":19},[96,130646,1017],{"class":106},[96,130648,51590],{"class":51279},[96,130650,53465],{"class":1946},[96,130652,152],{"class":106},[96,130654,130655],{"class":211},"\"example\"",[96,130657,51286],{"class":106},[96,130659,130660],{"class":98,"line":1162},[96,130661,130662],{"class":106},"  示例内容\n",[96,130664,130665,130667,130669],{"class":98,"line":1177},[96,130666,51764],{"class":106},[96,130668,51590],{"class":51279},[96,130670,51286],{"class":106},[67,130672,130674],{"id":130673},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[50,130676,130677],{},[53,130678,130679],{},"圆角边框",[14,130681,130682],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[1445,130684],{"style":126387,"src":130685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[87,130687,130689],{"className":126531,"code":130688,"language":126533,"meta":18,"style":18},"div {\n  border: 1px solid #ccc;\n}\n",[93,130690,130691,130697,130713],{"__ignoreMap":18},[96,130692,130693,130695],{"class":98,"line":99},[96,130694,51590],{"class":51279},[96,130696,15556],{"class":106},[96,130698,130699,130701,130703,130705,130707,130709,130711],{"class":98,"line":19},[96,130700,70875],{"class":155},[96,130702,51416],{"class":106},[96,130704,324],{"class":155},[96,130706,51471],{"class":102},[96,130708,51500],{"class":155},[96,130710,129923],{"class":155},[96,130712,1273],{"class":106},[96,130714,130715],{"class":98,"line":1162},[96,130716,1548],{"class":106},[14,130718,130719],{},"解释:",[1114,130721,130722,130725,130728,130731,130734],{},[53,130723,130724],{},"参数值可以为数值或百分比的形式",[53,130726,130727],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[53,130729,130730],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[53,130732,130733],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[53,130735,130736],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[50,130738,130739],{"start":19},[53,130740,130741],{},"盒子阴影",[87,130743,130745],{"className":126531,"code":130744,"language":126533,"meta":18,"style":18},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[93,130746,130747,130753,130790],{"__ignoreMap":18},[96,130748,130749,130751],{"class":98,"line":99},[96,130750,51590],{"class":51279},[96,130752,15556],{"class":106},[96,130754,130755,130758,130760,130762,130764,130766,130768,130770,130772,130774,130776,130778,130780,130782,130784,130786,130788],{"class":98,"line":19},[96,130756,130757],{"class":155},"  box-shadow",[96,130759,51416],{"class":106},[96,130761,298],{"class":155},[96,130763,14739],{"class":155},[96,130765,51471],{"class":102},[96,130767,2021],{"class":155},[96,130769,51471],{"class":102},[96,130771,78746],{"class":155},[96,130773,107],{"class":106},[96,130775,298],{"class":155},[96,130777,12419],{"class":106},[96,130779,298],{"class":155},[96,130781,12419],{"class":106},[96,130783,298],{"class":155},[96,130785,12419],{"class":106},[96,130787,86189],{"class":155},[96,130789,2702],{"class":106},[96,130791,130792],{"class":98,"line":1162},[96,130793,1548],{"class":106},[244,130795,130796,130804],{},[247,130797,130798],{},[250,130799,130800,130802],{},[253,130801,259],{"align":23721},[253,130803,27468],{"align":23721},[291,130805,130806,130814,130822,130830,130838,130846],{},[250,130807,130808,130811],{},[296,130809,130810],{"align":23721},"h-shadow",[296,130812,130813],{"align":23721},"必需,水平阴影的位置,允许负值",[250,130815,130816,130819],{},[296,130817,130818],{"align":23721},"v-shadow",[296,130820,130821],{"align":23721},"必需,垂直阴影的位置,允许负值",[250,130823,130824,130827],{},[296,130825,130826],{"align":23721},"blur",[296,130828,130829],{"align":23721},"可选,模糊距离,就是影子的虚实",[250,130831,130832,130835],{},[296,130833,130834],{"align":23721},"spread",[296,130836,130837],{"align":23721},"可选,阴影尺寸",[250,130839,130840,130843],{},[296,130841,130842],{"align":23721},"color",[296,130844,130845],{"align":23721},"可选,阴影的颜色",[250,130847,130848,130851],{},[296,130849,130850],{"align":23721},"inset",[296,130852,130853],{"align":23721},"可选,将外部阴影(outset)改为内部阴影",[50,130855,130856],{"start":1162},[53,130857,130858],{},"文字阴影",[87,130860,130862],{"className":126531,"code":130861,"language":126533,"meta":18,"style":18},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[93,130863,130864,130870,130909],{"__ignoreMap":18},[96,130865,130866,130868],{"class":98,"line":99},[96,130867,14],{"class":51279},[96,130869,15556],{"class":106},[96,130871,130872,130875,130877,130879,130881,130883,130885,130887,130889,130891,130893,130895,130897,130899,130901,130903,130905,130907],{"class":98,"line":19},[96,130873,130874],{"class":155},"  text-shadow",[96,130876,51416],{"class":106},[96,130878,324],{"class":155},[96,130880,51471],{"class":102},[96,130882,25097],{"class":155},[96,130884,51471],{"class":102},[96,130886,14739],{"class":155},[96,130888,51471],{"class":102},[96,130890,78746],{"class":155},[96,130892,107],{"class":106},[96,130894,298],{"class":155},[96,130896,12419],{"class":106},[96,130898,298],{"class":155},[96,130900,12419],{"class":106},[96,130902,298],{"class":155},[96,130904,12419],{"class":106},[96,130906,100500],{"class":155},[96,130908,2702],{"class":106},[96,130910,130911],{"class":98,"line":1162},[96,130912,1548],{"class":106},[244,130914,130915,130923],{},[247,130916,130917],{},[250,130918,130919,130921],{},[253,130920,259],{"align":23721},[253,130922,27468],{"align":23721},[291,130924,130925,130931,130938,130945],{},[250,130926,130927,130929],{},[296,130928,130810],{"align":23721},[296,130930,130813],{"align":23721},[250,130932,130933,130935],{},[296,130934,130818],{"align":23721},[296,130936,130937],{"align":23721},"必需,垂直阴影位置,允许负值",[250,130939,130940,130942],{},[296,130941,130826],{"align":23721},[296,130943,130944],{"align":23721},"可选,模糊的距离",[250,130946,130947,130949],{},[296,130948,130842],{"align":23721},[296,130950,130845],{"align":23721},[38,130952,130954],{"id":130953},"_92-浮动","9.2 浮动",[67,130956,130958],{"id":130957},"_921-浮动介绍","9.2.1 浮动介绍",[14,130960,130961],{},"在16.2中详细介绍",[67,130963,130965],{"id":130964},"_922-清除浮动","9.2.2 清除浮动",[50,130967,130968,130971],{},[53,130969,130970],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[53,130972,130973],{},"清除浮动的本质",[14,130975,130976],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[14,130978,9009],{},[1114,130980,130981,130984,130987],{},[53,130982,130983],{},"如果父盒子本身有高度，则不需要清除浮动",[53,130985,130986],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[53,130988,130989],{},"父级有了高度，就不会影响下面的标准流了",[50,130991,130992],{"start":1162},[53,130993,130994],{},"清除浮动样式",[87,130996,130998],{"className":126531,"code":130997,"language":126533,"meta":18,"style":18},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[93,130999,131000,131007,131018,131022,131029,131039],{"__ignoreMap":18},[96,131001,131002,131005],{"class":98,"line":99},[96,131003,131004],{"class":1946},".left",[96,131006,15556],{"class":106},[96,131008,131009,131012,131014,131016],{"class":98,"line":19},[96,131010,131011],{"class":155},"  float",[96,131013,51416],{"class":106},[96,131015,23721],{"class":155},[96,131017,1273],{"class":106},[96,131019,131020],{"class":98,"line":1162},[96,131021,1548],{"class":106},[96,131023,131024,131027],{"class":98,"line":1177},[96,131025,131026],{"class":1946},".right",[96,131028,15556],{"class":106},[96,131030,131031,131033,131035,131037],{"class":98,"line":1183},[96,131032,131011],{"class":155},[96,131034,51416],{"class":106},[96,131036,72501],{"class":155},[96,131038,1273],{"class":106},[96,131040,131041],{"class":98,"line":1197},[96,131042,1548],{"class":106},[244,131044,131045,131053],{},[247,131046,131047],{},[250,131048,131049,131051],{},[253,131050,126995],{"align":23721},[253,131052,27468],{"align":23721},[291,131054,131055,131062,131069],{},[250,131056,131057,131059],{},[296,131058,23721],{"align":23721},[296,131060,131061],{"align":23721},"不允许左侧有浮动元素（清除左侧浮动的影响）",[250,131063,131064,131066],{},[296,131065,72501],{"align":23721},[296,131067,131068],{"align":23721},"不允许右侧有浮动元素（清除右侧浮动的影响）",[250,131070,131071,131074],{},[296,131072,131073],{"align":23721},"both",[296,131075,131076],{"align":23721},"同时清除左右侧浮动的影响",[14,131078,131079],{},"法一",[14,131081,131082],{},"额外标签法也称为隔墙法",[14,131084,131085],{},"使用方式：",[14,131087,131088],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[87,131090,131091],{"className":126531,"code":130997,"language":126533,"meta":18,"style":18},[93,131092,131093,131099,131109,131113,131119,131129],{"__ignoreMap":18},[96,131094,131095,131097],{"class":98,"line":99},[96,131096,131004],{"class":1946},[96,131098,15556],{"class":106},[96,131100,131101,131103,131105,131107],{"class":98,"line":19},[96,131102,131011],{"class":155},[96,131104,51416],{"class":106},[96,131106,23721],{"class":155},[96,131108,1273],{"class":106},[96,131110,131111],{"class":98,"line":1162},[96,131112,1548],{"class":106},[96,131114,131115,131117],{"class":98,"line":1177},[96,131116,131026],{"class":1946},[96,131118,15556],{"class":106},[96,131120,131121,131123,131125,131127],{"class":98,"line":1183},[96,131122,131011],{"class":155},[96,131124,51416],{"class":106},[96,131126,72501],{"class":155},[96,131128,1273],{"class":106},[96,131130,131131],{"class":98,"line":1197},[96,131132,1548],{"class":106},[14,131134,131135],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[14,131137,131138],{},"优点： 通俗易懂，书写方便",[14,131140,131141],{},"缺点： 添加许多无意义的标签，结构化较差",[14,131143,131144],{},"注意： 要求这个新的空标签必须是块级元素。",[14,131146,131147],{},"法二",[14,131149,131150],{},"父级添加overflow属性",[87,131152,131153],{"className":126531,"code":130997,"language":126533,"meta":18,"style":18},[93,131154,131155,131161,131171,131175,131181,131191],{"__ignoreMap":18},[96,131156,131157,131159],{"class":98,"line":99},[96,131158,131004],{"class":1946},[96,131160,15556],{"class":106},[96,131162,131163,131165,131167,131169],{"class":98,"line":19},[96,131164,131011],{"class":155},[96,131166,51416],{"class":106},[96,131168,23721],{"class":155},[96,131170,1273],{"class":106},[96,131172,131173],{"class":98,"line":1162},[96,131174,1548],{"class":106},[96,131176,131177,131179],{"class":98,"line":1177},[96,131178,131026],{"class":1946},[96,131180,15556],{"class":106},[96,131182,131183,131185,131187,131189],{"class":98,"line":1183},[96,131184,131011],{"class":155},[96,131186,51416],{"class":106},[96,131188,72501],{"class":155},[96,131190,1273],{"class":106},[96,131192,131193],{"class":98,"line":1197},[96,131194,1548],{"class":106},[14,131196,131197],{},"overflow: hidden;",[14,131199,131200],{},"优点：代码简洁",[14,131202,131203],{},"缺点：无法显示溢出的部分",[14,131205,131206],{},"注意：是给父元素添加代码",[14,131208,131209],{},"法三",[14,131211,131212],{},"父级添加after伪元素",[14,131214,131215,131218],{},[131216,131217],"after",{}," 方式是额外标签法的升级版",[14,131220,131221],{},"使用的时候复制就可以",[87,131223,131224],{"className":126531,"code":130997,"language":126533,"meta":18,"style":18},[93,131225,131226,131232,131242,131246,131252,131262],{"__ignoreMap":18},[96,131227,131228,131230],{"class":98,"line":99},[96,131229,131004],{"class":1946},[96,131231,15556],{"class":106},[96,131233,131234,131236,131238,131240],{"class":98,"line":19},[96,131235,131011],{"class":155},[96,131237,51416],{"class":106},[96,131239,23721],{"class":155},[96,131241,1273],{"class":106},[96,131243,131244],{"class":98,"line":1162},[96,131245,1548],{"class":106},[96,131247,131248,131250],{"class":98,"line":1177},[96,131249,131026],{"class":1946},[96,131251,15556],{"class":106},[96,131253,131254,131256,131258,131260],{"class":98,"line":1183},[96,131255,131011],{"class":155},[96,131257,51416],{"class":106},[96,131259,72501],{"class":155},[96,131261,1273],{"class":106},[96,131263,131264],{"class":98,"line":1197},[96,131265,1548],{"class":106},[14,131267,131268],{},"优点：没有增加标签，结构更简单",[14,131270,131271],{},"缺点：照顾低版本浏览器",[14,131273,131274],{},"代表网站： 百度、淘宝网、网易等",[14,131276,131277],{},"法四",[14,131279,131280],{},"父级添加双伪元素",[87,131282,131283],{"className":126531,"code":130997,"language":126533,"meta":18,"style":18},[93,131284,131285,131291,131301,131305,131311,131321],{"__ignoreMap":18},[96,131286,131287,131289],{"class":98,"line":99},[96,131288,131004],{"class":1946},[96,131290,15556],{"class":106},[96,131292,131293,131295,131297,131299],{"class":98,"line":19},[96,131294,131011],{"class":155},[96,131296,51416],{"class":106},[96,131298,23721],{"class":155},[96,131300,1273],{"class":106},[96,131302,131303],{"class":98,"line":1162},[96,131304,1548],{"class":106},[96,131306,131307,131309],{"class":98,"line":1177},[96,131308,131026],{"class":1946},[96,131310,15556],{"class":106},[96,131312,131313,131315,131317,131319],{"class":98,"line":1183},[96,131314,131011],{"class":155},[96,131316,51416],{"class":106},[96,131318,72501],{"class":155},[96,131320,1273],{"class":106},[96,131322,131323],{"class":98,"line":1197},[96,131324,1548],{"class":106},[14,131326,131327],{},"优点：代码更简洁",[14,131329,131271],{},[14,131331,131332],{},"代表网站：小米、腾讯等",[38,131334,131336],{"id":131335},"_93-ps切图","9.3 PS切图",[67,131338,131340],{"id":131339},"_931-常见图片格式","9.3.1 常见图片格式",[244,131342,131343,131353],{},[247,131344,131345],{},[250,131346,131347,131350],{},[253,131348,131349],{"align":23721},"jpg图像格式",[253,131351,131352],{"align":23721},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[291,131354,131355,131363,131371],{},[250,131356,131357,131360],{},[296,131358,131359],{"align":23721},"gif图像格式",[296,131361,131362],{"align":23721},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[250,131364,131365,131368],{},[296,131366,131367],{"align":23721},"png图像格式",[296,131369,131370],{"align":23721},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[250,131372,131373,131376],{},[296,131374,131375],{"align":23721},"PSD图像格式",[296,131377,131378],{"align":23721},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[67,131380,131382],{"id":131381},"_932-图层切图","9.3.2 图层切图",[14,131384,131385],{},"最简单的切图方式：右击图层 → 导出 → 切片",[14,131387,131388],{},"按住shift选中两个图层->图层菜单->合并图层",[67,131390,131392],{"id":131391},"_933-切片切图","9.3.3 切片切图",[1114,131394,131395,131398],{},[53,131396,131397],{},"利用切片工具手动划出",[53,131399,131400],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[67,131402,131404],{"id":131403},"_934-切图步骤","9.3.4 切图步骤",[14,131406,131407],{},"用切片工具选中：",[1445,131409],{"style":126387,"src":131410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[14,131412,131413],{},"文件 -> 导出",[1445,131415],{"style":126387,"src":131416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[5110,131418,131419],{},"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":18,"searchDepth":19,"depth":19,"links":131421},[131422,131431,131435],{"id":129858,"depth":19,"text":129859,"children":131423},[131424,131425,131426,131427,131428,131429,131430],{"id":129883,"depth":1162,"text":129884},{"id":130174,"depth":1162,"text":130175},{"id":130303,"depth":1162,"text":130304},{"id":130503,"depth":1162,"text":130504},{"id":130545,"depth":1162,"text":130546},{"id":130583,"depth":1162,"text":130584},{"id":130673,"depth":1162,"text":130674},{"id":130953,"depth":19,"text":130954,"children":131432},[131433,131434],{"id":130957,"depth":1162,"text":130958},{"id":130964,"depth":1162,"text":130965},{"id":131335,"depth":19,"text":131336,"children":131436},[131437,131438,131439,131440],{"id":131339,"depth":1162,"text":131340},{"id":131381,"depth":1162,"text":131382},{"id":131391,"depth":1162,"text":131392},{"id":131403,"depth":1162,"text":131404},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129850,"description":23361},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131447,"title":131448,"body":131449,"description":23361,"extension":21,"meta":132090,"navigation":23,"path":132091,"seo":132092,"stem":132093,"__hash__":132094},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131450,"toc":132078},[131451,131454,131458,131484,131518,131522,131526,131529,131571,131578,131588,131596,131598,131601,131604,131607,131614,131628,131632,131635,131664,131668,131671,131685,131689,131692,131720,131724,131727,131753,131757,131762,131795,131800,131828,131832,131849,131895,131900,131944,131961,132068,132076],[10,131452,131448],{"id":131453},"_10-css规范与学成在线案例",[38,131455,131457],{"id":131456},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[50,131459,131460,131466,131472,131478],{},[53,131461,131462,131465],{},[256,131463,131464],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[53,131467,131468,131471],{},[256,131469,131470],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[53,131473,131474,131477],{},[256,131475,131476],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[53,131479,131480,131483],{},[256,131481,131482],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[87,131485,131486],{"className":126531,"code":129895,"language":126533,"meta":18,"style":18},[93,131487,131488,131492,131498,131514],{"__ignoreMap":18},[96,131489,131490],{"class":98,"line":99},[96,131491,129902],{"class":165},[96,131493,131494,131496],{"class":98,"line":19},[96,131495,51590],{"class":51279},[96,131497,15556],{"class":106},[96,131499,131500,131502,131504,131506,131508,131510,131512],{"class":98,"line":1162},[96,131501,70875],{"class":155},[96,131503,51416],{"class":106},[96,131505,324],{"class":155},[96,131507,51471],{"class":102},[96,131509,51500],{"class":155},[96,131511,129923],{"class":155},[96,131513,1273],{"class":106},[96,131515,131516],{"class":98,"line":1177},[96,131517,1548],{"class":106},[38,131519,131521],{"id":131520},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[67,131523,131525],{"id":131524},"_1021-header头部制作","10.2.1 header头部制作",[1445,131527],{"style":126387,"src":131528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1114,131530,131531,131538,131545,131551,131558,131565],{},[53,131532,131533,131534,131537],{},"1号是版心盒子 ",[256,131535,131536],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[53,131539,131540,131541,131544],{},"版心盒子 里面包含 2号盒子 ",[256,131542,131543],{},"logo"," 图标",[53,131546,131547,131548,131550],{},"版心盒子 里面包含 3号盒子 ",[256,131549,53692],{}," 导航栏",[53,131552,131553,131554,131557],{},"版心盒子 里面包含 4号盒子 ",[256,131555,131556],{},"search"," 搜索框",[53,131559,131560,131561,131564],{},"版心盒子 里面包含 5号盒子 ",[256,131562,131563],{},"user"," 个人信息",[53,131566,131567,131568],{},"注意，要求里面的 ",[256,131569,131570],{},"4个子盒子 必须都浮动",[50,131572,131573],{},[53,131574,131575],{},[256,131576,131577],{},"导航栏注意点:",[14,131579,131580,131581,131584,131585],{},"实际开发中， ",[256,131582,131583],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[256,131586,131587],{},"用 li 包含链接(li+a)的做法",[1114,131589,131590,131593],{},[53,131591,131592],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[53,131594,131595],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[14,131597,9009],{},[14,131599,131600],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[14,131602,131603],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[14,131605,131606],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[50,131608,131609],{"start":19},[53,131610,131611],{},[256,131612,131613],{},"4号盒子search的细节：",[1114,131615,131616,131619,131622],{},[53,131617,131618],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[53,131620,131621],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[53,131623,131624,131627],{},[93,131625,131626],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[67,131629,131631],{"id":131630},"_1022-banner制作","10.2.2 banner制作",[1445,131633],{"style":126387,"src":131634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1114,131636,131637,131644,131650,131657],{},[53,131638,131639,131640,131643],{},"1号盒子是通栏的大盒子 ",[256,131641,131642],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[53,131645,131646,131647,131649],{},"2号盒子是版心 ",[256,131648,902],{}," ， 要水平居中对齐",[53,131651,131652,131653,131656],{},"3号盒子版心内，左对齐 ",[256,131654,131655],{},"subnav"," 侧导航栏",[53,131658,131659,131660,131663],{},"4号盒子版心内，右对齐 ",[256,131661,131662],{},"course"," 课程",[67,131665,131667],{"id":131666},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[1445,131669],{"style":126387,"src":131670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1114,131672,131673,131676,131679,131682],{},[53,131674,131675],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[53,131677,131678],{},"1号盒子是标题 H3 左侧浮动",[53,131680,131681],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[53,131683,131684],{},"3号盒子 右浮动 mod 修改",[67,131686,131688],{"id":131687},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[1445,131690],{"style":126387,"src":131691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1114,131693,131694,131700,131707,131714,131717],{},[53,131695,131696,131697,131699],{},"1号盒子为最大的盒子 ",[256,131698,53693],{}," 版心水平居中对齐",[53,131701,131702,131703,131706],{},"2号盒子为上面部分 ",[256,131704,131705],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[53,131708,131709,131710,131713],{},"3号盒子为底下部分 ",[256,131711,131712],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[53,131715,131716],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[53,131718,131719],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[67,131721,131723],{"id":131722},"_1025-底部模块制作","10.2.5 底部模块制作",[1445,131725],{"style":126387,"src":131726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1114,131728,131729,131736,131739,131746],{},[53,131730,131731,131732,131735],{},"1号盒子通栏大盒子 底部 ",[256,131733,131734],{},"footer"," 给高度 底色是白色",[53,131737,131738],{},"2号盒子版心水平居中",[53,131740,131741,131742,131745],{},"3号盒子版权 ",[256,131743,131744],{},"copyright"," 左对齐",[53,131747,131748,131749,131752],{},"4号盒子 链接组 ",[256,131750,131751],{},"links"," 右对齐",[67,131754,131756],{"id":131755},"_1026-代码模块","10.2.6 代码模块",[50,131758,131759],{},[53,131760,131761],{},"html部分",[87,131763,131765],{"className":127278,"code":131764,"language":127280,"meta":18,"style":18},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[93,131766,131767],{"__ignoreMap":18},[96,131768,131769,131771,131773,131775,131777,131780,131783,131785,131788,131791,131793],{"class":98,"line":99},[96,131770,1017],{"class":106},[96,131772,345],{"class":51279},[96,131774,61036],{"class":1946},[96,131776,152],{"class":106},[96,131778,131779],{"class":211},"\"https:\u002F\u002Fexample.com\"",[96,131781,131782],{"class":1946}," target",[96,131784,152],{"class":106},[96,131786,131787],{"class":211},"\"_blank\"",[96,131789,131790],{"class":106},">链接文字\u003C\u002F",[96,131792,345],{"class":51279},[96,131794,51286],{"class":106},[50,131796,131797],{"start":19},[53,131798,131799],{},"css部分",[87,131801,131802],{"className":127278,"code":131764,"language":127280,"meta":18,"style":18},[93,131803,131804],{"__ignoreMap":18},[96,131805,131806,131808,131810,131812,131814,131816,131818,131820,131822,131824,131826],{"class":98,"line":99},[96,131807,1017],{"class":106},[96,131809,345],{"class":51279},[96,131811,61036],{"class":1946},[96,131813,152],{"class":106},[96,131815,131779],{"class":211},[96,131817,131782],{"class":1946},[96,131819,152],{"class":106},[96,131821,131787],{"class":211},[96,131823,131790],{"class":106},[96,131825,345],{"class":51279},[96,131827,51286],{"class":106},[67,131829,131831],{"id":131830},"_1027-收获","10.2.7 收获",[50,131833,131834,131837,131840,131843,131846],{},[53,131835,131836],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[53,131838,131839],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[53,131841,131842],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[53,131844,131845],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[53,131847,131848],{},"遗忘代码",[87,131850,131852],{"className":126531,"code":131851,"language":126533,"meta":18,"style":18},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[93,131853,131854,131876,131881,131891],{"__ignoreMap":18},[96,131855,131856,131858,131860,131862,131864,131866,131868,131870,131872,131874],{"class":98,"line":99},[96,131857,51590],{"class":51279},[96,131859,12419],{"class":106},[96,131861,14],{"class":51279},[96,131863,12419],{"class":106},[96,131865,10],{"class":51279},[96,131867,12419],{"class":106},[96,131869,1114],{"class":51279},[96,131871,12419],{"class":106},[96,131873,53],{"class":51279},[96,131875,15556],{"class":106},[96,131877,131878],{"class":98,"line":19},[96,131879,131880],{"class":165},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[96,131882,131883,131885,131887,131889],{"class":98,"line":1162},[96,131884,128147],{"class":155},[96,131886,51416],{"class":106},[96,131888,60848],{"class":155},[96,131890,1273],{"class":106},[96,131892,131893],{"class":98,"line":1177},[96,131894,1548],{"class":106},[50,131896,131897],{"start":1197},[53,131898,131899],{},"html引css的程序",[87,131901,131902],{"className":126531,"code":131851,"language":126533,"meta":18,"style":18},[93,131903,131904,131926,131930,131940],{"__ignoreMap":18},[96,131905,131906,131908,131910,131912,131914,131916,131918,131920,131922,131924],{"class":98,"line":99},[96,131907,51590],{"class":51279},[96,131909,12419],{"class":106},[96,131911,14],{"class":51279},[96,131913,12419],{"class":106},[96,131915,10],{"class":51279},[96,131917,12419],{"class":106},[96,131919,1114],{"class":51279},[96,131921,12419],{"class":106},[96,131923,53],{"class":51279},[96,131925,15556],{"class":106},[96,131927,131928],{"class":98,"line":19},[96,131929,131880],{"class":165},[96,131931,131932,131934,131936,131938],{"class":98,"line":1162},[96,131933,128147],{"class":155},[96,131935,51416],{"class":106},[96,131937,60848],{"class":155},[96,131939,1273],{"class":106},[96,131941,131942],{"class":98,"line":1177},[96,131943,1548],{"class":106},[50,131945,131946,131949,131952,131955,131958],{"start":1203},[53,131947,131948],{},"浮动的盒子不会有外边距合并问题",[53,131950,131951],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[53,131953,131954],{},"ctrl+g快速定位行；shift+alt多个光标",[53,131956,131957],{},"学习上方各个模块的选择器起名方法，以后就这样用",[53,131959,131960],{},"在写选择器时尽量写全一些，例如",[87,131962,131964],{"className":126531,"code":131963,"language":126533,"meta":18,"style":18},"\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",[93,131965,131966,131971,131987,131992,132007,132012,132027,132032,132047,132052],{"__ignoreMap":18},[96,131967,131968],{"class":98,"line":99},[96,131969,131970],{"class":165},"\u002F* 静态定位（默认） *\u002F\n",[96,131972,131973,131976,131978,131980,131982,131985],{"class":98,"line":19},[96,131974,131975],{"class":1946},".static",[96,131977,79786],{"class":106},[96,131979,128891],{"class":155},[96,131981,51416],{"class":106},[96,131983,131984],{"class":155},"static",[96,131986,129461],{"class":106},[96,131988,131989],{"class":98,"line":1162},[96,131990,131991],{"class":165},"\u002F* 相对定位 *\u002F\n",[96,131993,131994,131997,131999,132001,132003,132005],{"class":98,"line":1177},[96,131995,131996],{"class":1946},".relative",[96,131998,79786],{"class":106},[96,132000,128891],{"class":155},[96,132002,51416],{"class":106},[96,132004,54743],{"class":155},[96,132006,129461],{"class":106},[96,132008,132009],{"class":98,"line":1183},[96,132010,132011],{"class":165},"\u002F* 绝对定位 *\u002F\n",[96,132013,132014,132017,132019,132021,132023,132025],{"class":98,"line":1197},[96,132015,132016],{"class":1946},".absolute",[96,132018,79786],{"class":106},[96,132020,128891],{"class":155},[96,132022,51416],{"class":106},[96,132024,54810],{"class":155},[96,132026,129461],{"class":106},[96,132028,132029],{"class":98,"line":1203},[96,132030,132031],{"class":165},"\u002F* 固定定位 *\u002F\n",[96,132033,132034,132037,132039,132041,132043,132045],{"class":98,"line":1294},[96,132035,132036],{"class":1946},".fixed",[96,132038,79786],{"class":106},[96,132040,128891],{"class":155},[96,132042,51416],{"class":106},[96,132044,86212],{"class":155},[96,132046,129461],{"class":106},[96,132048,132049],{"class":98,"line":1300},[96,132050,132051],{"class":165},"\u002F* 粘性定位 *\u002F\n",[96,132053,132054,132057,132059,132061,132063,132066],{"class":98,"line":1312},[96,132055,132056],{"class":1946},".sticky",[96,132058,79786],{"class":106},[96,132060,128891],{"class":155},[96,132062,51416],{"class":106},[96,132064,132065],{"class":155},"sticky",[96,132067,129461],{"class":106},[50,132069,132070,132073],{"start":1600},[53,132071,132072],{},"一定要用好注释",[53,132074,132075],{},"浮动的盒子不会有外边距合并的问题",[5110,132077,131419],{},{"title":18,"searchDepth":19,"depth":19,"links":132079},[132080,132081],{"id":131456,"depth":19,"text":131457},{"id":131520,"depth":19,"text":131521,"children":132082},[132083,132084,132085,132086,132087,132088,132089],{"id":131524,"depth":1162,"text":131525},{"id":131630,"depth":1162,"text":131631},{"id":131666,"depth":1162,"text":131667},{"id":131687,"depth":1162,"text":131688},{"id":131722,"depth":1162,"text":131723},{"id":131755,"depth":1162,"text":131756},{"id":131830,"depth":1162,"text":131831},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131448,"description":23361},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132096,"title":132097,"body":132098,"description":23361,"extension":21,"meta":133584,"navigation":23,"path":133585,"seo":133586,"stem":133587,"__hash__":133588},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132099,"toc":133576},[132100,132103,132107,132111,132122,132126,132143,132187,132220,132223,132240,132243,132246,132290,132294,132298,132301,132304,132308,132311,132322,132385,132426,132429,132444,132498,132506,132509,132520,132574,132600,132603,132616,132670,132702,132756,132779,132833,132836,132839,132846,132900,132921,132975,132978,132981,133066,133074,133131,133154,133158,133161,133179,133183,133202,133256,133294,133298,133301,133304,133326,133330,133338,133341,133346,133357,133360,133364,133378,133422,133425,133429,133432,133437,133463,133468,133545,133548,133552,133555,133558,133561,133564,133567,133570,133573],[10,132101,132097],{"id":132102},"_11-传统布局与定位体系",[38,132104,132106],{"id":132105},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[67,132108,132110],{"id":132109},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1114,132112,132113,132116,132119],{},[53,132114,132115],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[53,132117,132118],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[53,132120,132121],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[67,132123,132125],{"id":132124},"_1112-浮动","11.1.2 浮动",[1114,132127,132128,132131,132134,132137,132140],{},[53,132129,132130],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[53,132132,132133],{},"浮动可以改变元素标签默认的排列方式",[53,132135,132136],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[53,132138,132139],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[53,132141,132142],{},"在使用行内块转换时盒子之间是有空隙的",[87,132144,132145],{"className":126531,"code":130997,"language":126533,"meta":18,"style":18},[93,132146,132147,132153,132163,132167,132173,132183],{"__ignoreMap":18},[96,132148,132149,132151],{"class":98,"line":99},[96,132150,131004],{"class":1946},[96,132152,15556],{"class":106},[96,132154,132155,132157,132159,132161],{"class":98,"line":19},[96,132156,131011],{"class":155},[96,132158,51416],{"class":106},[96,132160,23721],{"class":155},[96,132162,1273],{"class":106},[96,132164,132165],{"class":98,"line":1162},[96,132166,1548],{"class":106},[96,132168,132169,132171],{"class":98,"line":1177},[96,132170,131026],{"class":1946},[96,132172,15556],{"class":106},[96,132174,132175,132177,132179,132181],{"class":98,"line":1183},[96,132176,131011],{"class":155},[96,132178,51416],{"class":106},[96,132180,72501],{"class":155},[96,132182,1273],{"class":106},[96,132184,132185],{"class":98,"line":1197},[96,132186,1548],{"class":106},[244,132188,132189,132197],{},[247,132190,132191],{},[250,132192,132193,132195],{},[253,132194,126995],{"align":23721},[253,132196,27468],{"align":23721},[291,132198,132199,132206,132213],{},[250,132200,132201,132203],{},[296,132202,54716],{"align":23721},[296,132204,132205],{"align":23721},"元素不浮动（默认值）",[250,132207,132208,132210],{},[296,132209,23721],{"align":23721},[296,132211,132212],{"align":23721},"元素向左浮动",[250,132214,132215,132217],{},[296,132216,72501],{"align":23721},[296,132218,132219],{"align":23721},"元素向右浮动",[14,132221,132222],{},"浮动重点：",[1114,132224,132225,132228,132231,132234,132237],{},[53,132226,132227],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[53,132229,132230],{},"浮动的元素会一行内显示并且元素顶部对齐",[53,132232,132233],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[53,132235,132236],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[53,132238,132239],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[14,132241,132242],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[14,132244,132245],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[87,132247,132248],{"className":126531,"code":130997,"language":126533,"meta":18,"style":18},[93,132249,132250,132256,132266,132270,132276,132286],{"__ignoreMap":18},[96,132251,132252,132254],{"class":98,"line":99},[96,132253,131004],{"class":1946},[96,132255,15556],{"class":106},[96,132257,132258,132260,132262,132264],{"class":98,"line":19},[96,132259,131011],{"class":155},[96,132261,51416],{"class":106},[96,132263,23721],{"class":155},[96,132265,1273],{"class":106},[96,132267,132268],{"class":98,"line":1162},[96,132269,1548],{"class":106},[96,132271,132272,132274],{"class":98,"line":1177},[96,132273,131026],{"class":1946},[96,132275,15556],{"class":106},[96,132277,132278,132280,132282,132284],{"class":98,"line":1183},[96,132279,131011],{"class":155},[96,132281,51416],{"class":106},[96,132283,72501],{"class":155},[96,132285,1273],{"class":106},[96,132287,132288],{"class":98,"line":1197},[96,132289,1548],{"class":106},[67,132291,132293],{"id":132292},"_1113-定位","11.1.3 定位",[21982,132295,132297],{"id":132296},"_11131-使用场景","11.1.3.1 使用场景",[14,132299,132300],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[14,132302,132303],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[21982,132305,132307],{"id":132306},"_11132-定位组成","11.1.3.2 定位组成",[14,132309,132310],{},"定位 = 定位模式 + 边偏移",[50,132312,132313],{},[53,132314,132315,132318,132319],{},[256,132316,132317],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[256,132320,132321],{},"定位模式",[87,132323,132325],{"className":126531,"code":132324,"language":126533,"meta":18,"style":18},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[93,132326,132327,132333,132347,132364,132381],{"__ignoreMap":18},[96,132328,132329,132331],{"class":98,"line":99},[96,132330,130379],{"class":1946},[96,132332,15556],{"class":106},[96,132334,132335,132338,132340,132342,132344],{"class":98,"line":19},[96,132336,132337],{"class":155},"  position",[96,132339,51416],{"class":106},[96,132341,54743],{"class":155},[96,132343,130394],{"class":106},[96,132345,132346],{"class":165},"\u002F* 定位模式 *\u002F\n",[96,132348,132349,132352,132354,132356,132358,132361],{"class":98,"line":1162},[96,132350,132351],{"class":155},"  top",[96,132353,51416],{"class":106},[96,132355,553],{"class":155},[96,132357,51471],{"class":102},[96,132359,132360],{"class":106},";           ",[96,132362,132363],{"class":165},"\u002F* 边偏移：上 *\u002F\n",[96,132365,132366,132369,132371,132373,132375,132378],{"class":98,"line":1177},[96,132367,132368],{"class":155},"  left",[96,132370,51416],{"class":106},[96,132372,807],{"class":155},[96,132374,51471],{"class":102},[96,132376,132377],{"class":106},";          ",[96,132379,132380],{"class":165},"\u002F* 边偏移：左 *\u002F\n",[96,132382,132383],{"class":98,"line":1183},[96,132384,1548],{"class":106},[244,132386,132387,132396],{},[247,132388,132389],{},[250,132390,132391,132393],{},[253,132392,259],{"align":23721},[253,132394,132395],{"align":23721},"语义",[291,132397,132398,132405,132412,132419],{},[250,132399,132400,132402],{},[296,132401,131984],{"align":23721},[296,132403,132404],{"align":23721},"静态定位",[250,132406,132407,132409],{},[296,132408,54743],{"align":23721},[296,132410,132411],{"align":23721},"相对定位",[250,132413,132414,132416],{},[296,132415,54810],{"align":23721},[296,132417,132418],{"align":23721},"绝对定位",[250,132420,132421,132423],{},[296,132422,86212],{"align":23721},[296,132424,132425],{"align":23721},"固定定位",[14,132427,132428],{},"（1）静态定位：",[1114,132430,132431,132442],{},[53,132432,132433,132434,132437,132438,132441],{},"静态定位是元素的 ",[256,132435,132436],{},"默认定位方式"," ， ",[256,132439,132440],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[53,132443,5165],{},[87,132445,132446],{"className":126531,"code":132324,"language":126533,"meta":18,"style":18},[93,132447,132448,132454,132466,132480,132494],{"__ignoreMap":18},[96,132449,132450,132452],{"class":98,"line":99},[96,132451,130379],{"class":1946},[96,132453,15556],{"class":106},[96,132455,132456,132458,132460,132462,132464],{"class":98,"line":19},[96,132457,132337],{"class":155},[96,132459,51416],{"class":106},[96,132461,54743],{"class":155},[96,132463,130394],{"class":106},[96,132465,132346],{"class":165},[96,132467,132468,132470,132472,132474,132476,132478],{"class":98,"line":1162},[96,132469,132351],{"class":155},[96,132471,51416],{"class":106},[96,132473,553],{"class":155},[96,132475,51471],{"class":102},[96,132477,132360],{"class":106},[96,132479,132363],{"class":165},[96,132481,132482,132484,132486,132488,132490,132492],{"class":98,"line":1177},[96,132483,132368],{"class":155},[96,132485,51416],{"class":106},[96,132487,807],{"class":155},[96,132489,51471],{"class":102},[96,132491,132377],{"class":106},[96,132493,132380],{"class":165},[96,132495,132496],{"class":98,"line":1183},[96,132497,1548],{"class":106},[1114,132499,132500,132503],{},[53,132501,132502],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[53,132504,132505],{},"静态定位在布局时我们几乎不用的",[14,132507,132508],{},"（2）相对定位",[1114,132510,132511,132518],{},[53,132512,132513,132514,132517],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[256,132515,132516],{},"原来的位置"," 来说的（自恋型）",[53,132519,5165],{},[87,132521,132522],{"className":126531,"code":132324,"language":126533,"meta":18,"style":18},[93,132523,132524,132530,132542,132556,132570],{"__ignoreMap":18},[96,132525,132526,132528],{"class":98,"line":99},[96,132527,130379],{"class":1946},[96,132529,15556],{"class":106},[96,132531,132532,132534,132536,132538,132540],{"class":98,"line":19},[96,132533,132337],{"class":155},[96,132535,51416],{"class":106},[96,132537,54743],{"class":155},[96,132539,130394],{"class":106},[96,132541,132346],{"class":165},[96,132543,132544,132546,132548,132550,132552,132554],{"class":98,"line":1162},[96,132545,132351],{"class":155},[96,132547,51416],{"class":106},[96,132549,553],{"class":155},[96,132551,51471],{"class":102},[96,132553,132360],{"class":106},[96,132555,132363],{"class":165},[96,132557,132558,132560,132562,132564,132566,132568],{"class":98,"line":1177},[96,132559,132368],{"class":155},[96,132561,51416],{"class":106},[96,132563,807],{"class":155},[96,132565,51471],{"class":102},[96,132567,132377],{"class":106},[96,132569,132380],{"class":165},[96,132571,132572],{"class":98,"line":1183},[96,132573,1548],{"class":106},[1114,132575,132576],{},[53,132577,132578,132579,132581,132582,132584,132585,132588,132589,132592,132593,132595,132596,132599],{},"相对定位的特点：",[53695,132580],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53695,132583],{},"  ② ",[256,132586,132587],{},"原来"," 在标准流的 ",[256,132590,132591],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53695,132594],{},"  ③因此， ",[256,132597,132598],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[14,132601,132602],{},"（3）绝对定位",[1114,132604,132605,132614],{},[53,132606,132607,132609,132610,132613],{},[256,132608,132418],{}," 是元素在移动位置的时候，是相对于它 ",[256,132611,132612],{},"祖先元素"," 来说的（拼爹型）",[53,132615,5165],{},[87,132617,132618],{"className":126531,"code":132324,"language":126533,"meta":18,"style":18},[93,132619,132620,132626,132638,132652,132666],{"__ignoreMap":18},[96,132621,132622,132624],{"class":98,"line":99},[96,132623,130379],{"class":1946},[96,132625,15556],{"class":106},[96,132627,132628,132630,132632,132634,132636],{"class":98,"line":19},[96,132629,132337],{"class":155},[96,132631,51416],{"class":106},[96,132633,54743],{"class":155},[96,132635,130394],{"class":106},[96,132637,132346],{"class":165},[96,132639,132640,132642,132644,132646,132648,132650],{"class":98,"line":1162},[96,132641,132351],{"class":155},[96,132643,51416],{"class":106},[96,132645,553],{"class":155},[96,132647,51471],{"class":102},[96,132649,132360],{"class":106},[96,132651,132363],{"class":165},[96,132653,132654,132656,132658,132660,132662,132664],{"class":98,"line":1177},[96,132655,132368],{"class":155},[96,132657,51416],{"class":106},[96,132659,807],{"class":155},[96,132661,51471],{"class":102},[96,132663,132377],{"class":106},[96,132665,132380],{"class":165},[96,132667,132668],{"class":98,"line":1183},[96,132669,1548],{"class":106},[1114,132671,132672,132687,132696,132699],{},[53,132673,132674,132675,132677,132678,132680,132681,132683,132684,132686],{},"绝对定位的特点：",[53695,132676],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53695,132679],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53695,132682],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53695,132685],{},"  (4)固定定位",[53,132688,132689,132691,132692,132695],{},[256,132690,132425],{}," 是元素 ",[256,132693,132694],{},"固定于浏览器可视区的位置"," 。（认死理型）",[53,132697,132698],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[53,132700,132701],{},"语法:",[87,132703,132704],{"className":126531,"code":132324,"language":126533,"meta":18,"style":18},[93,132705,132706,132712,132724,132738,132752],{"__ignoreMap":18},[96,132707,132708,132710],{"class":98,"line":99},[96,132709,130379],{"class":1946},[96,132711,15556],{"class":106},[96,132713,132714,132716,132718,132720,132722],{"class":98,"line":19},[96,132715,132337],{"class":155},[96,132717,51416],{"class":106},[96,132719,54743],{"class":155},[96,132721,130394],{"class":106},[96,132723,132346],{"class":165},[96,132725,132726,132728,132730,132732,132734,132736],{"class":98,"line":1162},[96,132727,132351],{"class":155},[96,132729,51416],{"class":106},[96,132731,553],{"class":155},[96,132733,51471],{"class":102},[96,132735,132360],{"class":106},[96,132737,132363],{"class":165},[96,132739,132740,132742,132744,132746,132748,132750],{"class":98,"line":1177},[96,132741,132368],{"class":155},[96,132743,51416],{"class":106},[96,132745,807],{"class":155},[96,132747,51471],{"class":102},[96,132749,132377],{"class":106},[96,132751,132380],{"class":165},[96,132753,132754],{"class":98,"line":1183},[96,132755,1548],{"class":106},[1114,132757,132758,132767],{},[53,132759,132760,132761,132763,132764,132766],{},"特点:",[53695,132762],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53695,132765],{},"  ②固定定位不再占有原先的位置,完全脱标",[53,132768,132769,132770,132772,132773,132775,132776,132778],{},"固定在版心位置的方法:",[53695,132771],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53695,132774],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53695,132777],{},"  实例：",[87,132780,132781],{"className":126531,"code":132324,"language":126533,"meta":18,"style":18},[93,132782,132783,132789,132801,132815,132829],{"__ignoreMap":18},[96,132784,132785,132787],{"class":98,"line":99},[96,132786,130379],{"class":1946},[96,132788,15556],{"class":106},[96,132790,132791,132793,132795,132797,132799],{"class":98,"line":19},[96,132792,132337],{"class":155},[96,132794,51416],{"class":106},[96,132796,54743],{"class":155},[96,132798,130394],{"class":106},[96,132800,132346],{"class":165},[96,132802,132803,132805,132807,132809,132811,132813],{"class":98,"line":1162},[96,132804,132351],{"class":155},[96,132806,51416],{"class":106},[96,132808,553],{"class":155},[96,132810,51471],{"class":102},[96,132812,132360],{"class":106},[96,132814,132363],{"class":165},[96,132816,132817,132819,132821,132823,132825,132827],{"class":98,"line":1177},[96,132818,132368],{"class":155},[96,132820,51416],{"class":106},[96,132822,807],{"class":155},[96,132824,51471],{"class":102},[96,132826,132377],{"class":106},[96,132828,132380],{"class":165},[96,132830,132831],{"class":98,"line":1183},[96,132832,1548],{"class":106},[1445,132834],{"style":126387,"src":132835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[14,132837,132838],{},"(5)粘性定位",[1114,132840,132841,132844],{},[53,132842,132843],{},"粘性定位可以被认为是相对定位和固定定位的混合",[53,132845,5165],{},[87,132847,132848],{"className":126531,"code":132324,"language":126533,"meta":18,"style":18},[93,132849,132850,132856,132868,132882,132896],{"__ignoreMap":18},[96,132851,132852,132854],{"class":98,"line":99},[96,132853,130379],{"class":1946},[96,132855,15556],{"class":106},[96,132857,132858,132860,132862,132864,132866],{"class":98,"line":19},[96,132859,132337],{"class":155},[96,132861,51416],{"class":106},[96,132863,54743],{"class":155},[96,132865,130394],{"class":106},[96,132867,132346],{"class":165},[96,132869,132870,132872,132874,132876,132878,132880],{"class":98,"line":1162},[96,132871,132351],{"class":155},[96,132873,51416],{"class":106},[96,132875,553],{"class":155},[96,132877,51471],{"class":102},[96,132879,132360],{"class":106},[96,132881,132363],{"class":165},[96,132883,132884,132886,132888,132890,132892,132894],{"class":98,"line":1177},[96,132885,132368],{"class":155},[96,132887,51416],{"class":106},[96,132889,807],{"class":155},[96,132891,51471],{"class":102},[96,132893,132377],{"class":106},[96,132895,132380],{"class":165},[96,132897,132898],{"class":98,"line":1183},[96,132899,1548],{"class":106},[1114,132901,132902],{},[53,132903,132904,132905,132907,132908,132910,132911,132913,132914,132917,132918,132920],{},"粘性定位的特点：",[53695,132906],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53695,132909],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53695,132912],{},"  ③必须添加 top 、left、right、bottom ",[256,132915,132916],{},"其中一个"," 才有效",[53695,132919],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[87,132922,132923],{"className":126531,"code":132324,"language":126533,"meta":18,"style":18},[93,132924,132925,132931,132943,132957,132971],{"__ignoreMap":18},[96,132926,132927,132929],{"class":98,"line":99},[96,132928,130379],{"class":1946},[96,132930,15556],{"class":106},[96,132932,132933,132935,132937,132939,132941],{"class":98,"line":19},[96,132934,132337],{"class":155},[96,132936,51416],{"class":106},[96,132938,54743],{"class":155},[96,132940,130394],{"class":106},[96,132942,132346],{"class":165},[96,132944,132945,132947,132949,132951,132953,132955],{"class":98,"line":1162},[96,132946,132351],{"class":155},[96,132948,51416],{"class":106},[96,132950,553],{"class":155},[96,132952,51471],{"class":102},[96,132954,132360],{"class":106},[96,132956,132363],{"class":165},[96,132958,132959,132961,132963,132965,132967,132969],{"class":98,"line":1177},[96,132960,132368],{"class":155},[96,132962,51416],{"class":106},[96,132964,807],{"class":155},[96,132966,51471],{"class":102},[96,132968,132377],{"class":106},[96,132970,132380],{"class":165},[96,132972,132973],{"class":98,"line":1183},[96,132974,1548],{"class":106},[1445,132976],{"style":126387,"src":132977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[14,132979,132980],{},"(6)总结",[244,132982,132983,132998],{},[247,132984,132985],{},[250,132986,132987,132989,132992,132995],{},[253,132988,132321],{"align":23721},[253,132990,132991],{"align":23721},"是否脱标",[253,132993,132994],{"align":23721},"移动位置",[253,132996,132997],{"align":23721},"是否常用",[291,132999,133000,133013,133027,133041,133054],{},[250,133001,133002,133005,133007,133010],{},[296,133003,133004],{"align":23721},"Static 静态定位",[296,133006,104657],{"align":23721},[296,133008,133009],{"align":23721},"不能使用边偏移",[296,133011,133012],{"align":23721},"很少",[250,133014,133015,133018,133021,133024],{},[296,133016,133017],{"align":23721},"Relative 相对定位",[296,133019,133020],{"align":23721},"否(占有位置)",[296,133022,133023],{"align":23721},"相对于自身位置移动",[296,133025,133026],{"align":23721},"基本单独使用",[250,133028,133029,133032,133035,133038],{},[296,133030,133031],{"align":23721},"Absolute 绝对定位",[296,133033,133034],{"align":23721},"是(不占有位置)",[296,133036,133037],{"align":23721},"带有定位的父级",[296,133039,133040],{"align":23721},"要和定位父级元素搭配使用",[250,133042,133043,133046,133048,133051],{},[296,133044,133045],{"align":23721},"Fixed 固定定位",[296,133047,133034],{"align":23721},[296,133049,133050],{"align":23721},"浏览器可视区",[296,133052,133053],{"align":23721},"单独使用,不需要父级",[250,133055,133056,133059,133061,133063],{},[296,133057,133058],{"align":23721},"Sticky 粘性定位",[296,133060,133020],{"align":23721},[296,133062,133050],{"align":23721},[296,133064,133065],{"align":23721},"当前阶段少",[50,133067,133068],{"start":19},[53,133069,133070,133073],{},[256,133071,133072],{},"边偏移"," 则决定了该元素的最终位置",[244,133075,133076,133087],{},[247,133077,133078],{},[250,133079,133080,133083,133085],{},[253,133081,133082],{"align":23721},"边偏移属性",[253,133084,27471],{"align":23721},[253,133086,27468],{"align":23721},[291,133088,133089,133100,133111,133121],{},[250,133090,133091,133094,133097],{},[296,133092,133093],{"align":23721},"top",[296,133095,133096],{"align":23721},"top: 80px;",[296,133098,133099],{"align":23721},"顶端偏移量，定义元素相对于父元素上边线的距离",[250,133101,133102,133105,133108],{},[296,133103,133104],{"align":23721},"bottom",[296,133106,133107],{"align":23721},"bottom: 80px ;",[296,133109,133110],{"align":23721},"底部偏移量，定义元素相对于其父元素下边线的距离",[250,133112,133113,133115,133118],{},[296,133114,23721],{"align":23721},[296,133116,133117],{"align":23721},"left: 80px ;",[296,133119,133120],{"align":23721},"左侧偏移量，定义元素相对于其父元素左边线的距离",[250,133122,133123,133125,133128],{},[296,133124,72501],{"align":23721},[296,133126,133127],{"align":23721},"right: 80px ;",[296,133129,133130],{"align":23721},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1114,133132,133133],{},[53,133134,9009,133135,133137,133138,133140,133141,133143,133144,133147,133148,133150,133151,133153],{},[53695,133136],{},"  ① ",[256,133139,133072],{}," 需要和 ",[256,133142,132321],{}," 联合使用， ",[256,133145,133146],{},"单独使用无效"," ；",[53695,133149],{},"  ②top和bottom不要同时使用",[53695,133152],{},"  ③left和right不要同时使用",[21982,133155,133157],{"id":133156},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[14,133159,133160],{},"子级是绝对定位的话，父级要用相对定位",[1114,133162,133163,133166,133169,133172],{},[53,133164,133165],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[53,133167,133168],{},"父盒子需要加定位限制子盒子在父盒子内显示",[53,133170,133171],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[53,133173,133174,133175,133178],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[256,133176,133177],{},"子绝父绝"," 也会遇到",[21982,133180,133182],{"id":133181},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1114,133184,133185,133200],{},[53,133186,133187,133188,133191,133192,133195,133196,133199],{},"在使用 ",[256,133189,133190],{},"定位"," 布局时，可能会 ",[256,133193,133194],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[256,133197,133198],{},"z-index"," 来控制盒子的前后次序 (z轴)",[53,133201,5165],{},[87,133203,133204],{"className":126531,"code":132324,"language":126533,"meta":18,"style":18},[93,133205,133206,133212,133224,133238,133252],{"__ignoreMap":18},[96,133207,133208,133210],{"class":98,"line":99},[96,133209,130379],{"class":1946},[96,133211,15556],{"class":106},[96,133213,133214,133216,133218,133220,133222],{"class":98,"line":19},[96,133215,132337],{"class":155},[96,133217,51416],{"class":106},[96,133219,54743],{"class":155},[96,133221,130394],{"class":106},[96,133223,132346],{"class":165},[96,133225,133226,133228,133230,133232,133234,133236],{"class":98,"line":1162},[96,133227,132351],{"class":155},[96,133229,51416],{"class":106},[96,133231,553],{"class":155},[96,133233,51471],{"class":102},[96,133235,132360],{"class":106},[96,133237,132363],{"class":165},[96,133239,133240,133242,133244,133246,133248,133250],{"class":98,"line":1177},[96,133241,132368],{"class":155},[96,133243,51416],{"class":106},[96,133245,807],{"class":155},[96,133247,51471],{"class":102},[96,133249,132377],{"class":106},[96,133251,132380],{"class":165},[96,133253,133254],{"class":98,"line":1183},[96,133255,1548],{"class":106},[1114,133257,133258],{},[53,133259,133260,133261,133137,133263,133265,133266,127694,133269,82518,133272,133274,133275,133277,133278,133281,133282,133147,133285,133287,133288,133291,133293],{},"z-index的特性",[53695,133262],{},[256,133264,126995],{}," ： ",[256,133267,133268],{},"正整数",[256,133270,133271],{},"负整数",[256,133273,298],{}," ，默认值是 0，数值越大，盒子越靠上；",[53695,133276],{},"  ②如果 ",[256,133279,133280],{},"属性值相同"," ，则按照书写顺序， ",[256,133283,133284],{},"后来居上",[53695,133286],{},"  ③数字后面 ",[256,133289,133290],{},"不能加单位",[53695,133292],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[21982,133295,133297],{"id":133296},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[14,133299,133300],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[14,133302,133303],{},"方法:",[1114,133305,133306,133316],{},[53,133307,133308,133309,133312,133313],{},"left: 50%; 让 ",[256,133310,133311],{},"盒子的左侧"," 移动到 ",[256,133314,133315],{},"父级元素的水平中心位置",[53,133317,133318,133319,133322,133323],{},"margin-left: -100px; 让盒子 ",[256,133320,133321],{},"向左"," 移动 ",[256,133324,133325],{},"自身宽度的一半",[21982,133327,133329],{"id":133328},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[50,133331,133332,133335],{},[53,133333,133334],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[53,133336,133337],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[14,133339,133340],{},"也就是说绝对定位和固定定位和浮动类似",[50,133342,133343],{"start":1162},[53,133344,133345],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1114,133347,133348,133351,133354],{},[53,133349,133350],{},"可以用inline-block 转换为行内块",[53,133352,133353],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[53,133355,133356],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[14,133358,133359],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[21982,133361,133363],{"id":133362},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[50,133365,133366,133369,133372,133375],{},[53,133367,133368],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[53,133370,133371],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[53,133373,133374],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[53,133376,133377],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[87,133379,133380],{"className":126531,"code":130997,"language":126533,"meta":18,"style":18},[93,133381,133382,133388,133398,133402,133408,133418],{"__ignoreMap":18},[96,133383,133384,133386],{"class":98,"line":99},[96,133385,131004],{"class":1946},[96,133387,15556],{"class":106},[96,133389,133390,133392,133394,133396],{"class":98,"line":19},[96,133391,131011],{"class":155},[96,133393,51416],{"class":106},[96,133395,23721],{"class":155},[96,133397,1273],{"class":106},[96,133399,133400],{"class":98,"line":1162},[96,133401,1548],{"class":106},[96,133403,133404,133406],{"class":98,"line":1177},[96,133405,131026],{"class":1946},[96,133407,15556],{"class":106},[96,133409,133410,133412,133414,133416],{"class":98,"line":1183},[96,133411,131011],{"class":155},[96,133413,51416],{"class":106},[96,133415,72501],{"class":155},[96,133417,1273],{"class":106},[96,133419,133420],{"class":98,"line":1197},[96,133421,1548],{"class":106},[1445,133423],{"style":126387,"src":133424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[21982,133426,133428],{"id":133427},"_11138-轮播图","11.1.3.8 轮播图",[1445,133430],{"style":126387,"src":133431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[50,133433,133434],{},[53,133435,133436],{},"制作顺序:",[1114,133438,133439,133442,133445,133454],{},[53,133440,133441],{},"大盒子我们类名为： tb-promo 淘宝广告",[53,133443,133444],{},"里面先放一张图片",[53,133446,133447,133448,133450,133451,133453],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53695,133449],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53695,133452],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[53,133455,133456,133457,133459,133460,133462],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53695,133458],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53695,133461],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[50,133464,133465],{"start":19},[53,133466,133467],{},"代码模块",[87,133469,133471],{"className":126531,"code":133470,"language":126533,"meta":18,"style":18},"\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",[93,133472,133473,133478,133485,133495,133505,133515,133519,133524,133531,133541],{"__ignoreMap":18},[96,133474,133475],{"class":98,"line":99},[96,133476,133477],{"class":165},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[96,133479,133480,133483],{"class":98,"line":19},[96,133481,133482],{"class":1946},".son",[96,133484,15556],{"class":106},[96,133486,133487,133489,133491,133493],{"class":98,"line":1162},[96,133488,132337],{"class":155},[96,133490,51416],{"class":106},[96,133492,54810],{"class":155},[96,133494,1273],{"class":106},[96,133496,133497,133499,133501,133503],{"class":98,"line":1177},[96,133498,132351],{"class":155},[96,133500,51416],{"class":106},[96,133502,298],{"class":155},[96,133504,1273],{"class":106},[96,133506,133507,133509,133511,133513],{"class":98,"line":1183},[96,133508,132368],{"class":155},[96,133510,51416],{"class":106},[96,133512,298],{"class":155},[96,133514,1273],{"class":106},[96,133516,133517],{"class":98,"line":1197},[96,133518,1548],{"class":106},[96,133520,133521],{"class":98,"line":1203},[96,133522,133523],{"class":165},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[96,133525,133526,133529],{"class":98,"line":1294},[96,133527,133528],{"class":1946},".father",[96,133530,15556],{"class":106},[96,133532,133533,133535,133537,133539],{"class":98,"line":1300},[96,133534,132337],{"class":155},[96,133536,51416],{"class":106},[96,133538,54743],{"class":155},[96,133540,1273],{"class":106},[96,133542,133543],{"class":98,"line":1312},[96,133544,1548],{"class":106},[14,133546,133547],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[67,133549,133551],{"id":133550},"_1114-定位数值的移动","11.1.4 定位数值的移动",[1445,133553],{"style":126387,"src":133554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[14,133556,133557],{},"✨ 黄金口诀：",[14,133559,133560],{},"\"TOP正下负上，LEFT正右负左\"",[14,133562,133563],{},"\"RIGHT正左负右，BOTTOM正上负下",[14,133565,133566],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[14,133568,133569],{},"✨ 简单记：",[14,133571,133572],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[5110,133574,133575],{},"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":18,"searchDepth":19,"depth":19,"links":133577},[133578],{"id":132105,"depth":19,"text":132106,"children":133579},[133580,133581,133582,133583],{"id":132109,"depth":1162,"text":132110},{"id":132124,"depth":1162,"text":132125},{"id":132292,"depth":1162,"text":132293},{"id":133550,"depth":1162,"text":133551},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132097,"description":23361},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133590,"title":133591,"body":133592,"description":23361,"extension":21,"meta":135015,"navigation":23,"path":135016,"seo":135017,"stem":135018,"__hash__":135019},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133593,"toc":134994},[133594,133597,133601,133609,133613,133618,133626,133638,133642,133647,133655,133666,133670,133675,133716,133724,133728,133731,133734,133737,133831,133834,133928,133931,134025,134028,134031,134066,134069,134072,134102,134105,134108,134111,134114,134117,134120,134123,134193,134196,134200,134204,134245,134249,134255,134258,134261,134265,134268,134271,134274,134355,134358,134361,134365,134369,134372,134375,134378,134381,134384,134390,134399,134403,134422,134426,134436,134439,134442,134445,134448,134451,134454,134457,134460,134469,134473,134482,134485,134490,134543,134548,134714,134717,134720,134725,134728,134731,134734,134737,134742,134890,134893,134896,134901,134904,134909,134943,134946,134949,134953,134956,134963,134966,134969,134972,134975,134978,134981,134984,134988,134991],[10,133595,133591],{"id":133596},"_12-显示隐藏与图形资源",[38,133598,133600],{"id":133599},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1114,133602,133603,133606],{},[53,133604,133605],{},"目的:让一个元素在页面中消失或者显示出来",[53,133607,133608],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[67,133610,133612],{"id":133611},"_1211-display-显示","12.1.1 display 显示",[50,133614,133615],{},[53,133616,133617],{},"display 设置或检索对象是否及如何显示",[1114,133619,133620,133623],{},[53,133621,133622],{},"display: none;隐藏对象",[53,133624,133625],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[50,133627,133628,133635],{"start":19},[53,133629,133630,133631,133634],{},"特点： display 隐藏元素后， ",[256,133632,133633],{},"不再占"," 有原来的位置",[53,133636,133637],{},"在js中使用非常的广泛",[67,133639,133641],{"id":133640},"_1212-visibility可见性","12.1.2 visibility可见性",[50,133643,133644],{},[53,133645,133646],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1114,133648,133649,133652],{},[53,133650,133651],{},"visibility： visible；元素可见",[53,133653,133654],{},"visibility：hidden；元素隐藏",[50,133656,133657,133660,133663],{"start":19},[53,133658,133659],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[53,133661,133662],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[53,133664,133665],{},"隐藏后继续占有原有位置",[67,133667,133669],{"id":133668},"_1213-overflow溢出","12.1.3 overflow溢出",[1114,133671,133672],{},[53,133673,133674],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[244,133676,133677,133685],{},[247,133678,133679],{},[250,133680,133681,133683],{},[253,133682,126995],{"align":23721},[253,133684,27468],{"align":23721},[291,133686,133687,133695,133702,133709],{},[250,133688,133689,133692],{},[296,133690,133691],{"align":23721},"visible",[296,133693,133694],{"align":23721},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[250,133696,133697,133699],{},[296,133698,61693],{"align":23721},[296,133700,133701],{"align":23721},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[250,133703,133704,133706],{},[296,133705,128951],{"align":23721},[296,133707,133708],{"align":23721},"不管超出内容否，总是显示滚动条",[250,133710,133711,133713],{},[296,133712,72642],{"align":23721},[296,133714,133715],{"align":23721},"超出自动显示滚动条，不超出不显示滚动条",[1114,133717,133718,133721],{},[53,133719,133720],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[53,133722,133723],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[67,133725,133727],{"id":133726},"_1214-案例收获","12.1.4 案例收获",[1445,133729],{"style":126387,"src":133730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[14,133732,133733],{},"问题：没做出来动态效果，使用hover没实现",[14,133735,133736],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[87,133738,133739],{"className":126531,"code":131963,"language":126533,"meta":18,"style":18},[93,133740,133741,133745,133759,133763,133777,133781,133795,133799,133813,133817],{"__ignoreMap":18},[96,133742,133743],{"class":98,"line":99},[96,133744,131970],{"class":165},[96,133746,133747,133749,133751,133753,133755,133757],{"class":98,"line":19},[96,133748,131975],{"class":1946},[96,133750,79786],{"class":106},[96,133752,128891],{"class":155},[96,133754,51416],{"class":106},[96,133756,131984],{"class":155},[96,133758,129461],{"class":106},[96,133760,133761],{"class":98,"line":1162},[96,133762,131991],{"class":165},[96,133764,133765,133767,133769,133771,133773,133775],{"class":98,"line":1177},[96,133766,131996],{"class":1946},[96,133768,79786],{"class":106},[96,133770,128891],{"class":155},[96,133772,51416],{"class":106},[96,133774,54743],{"class":155},[96,133776,129461],{"class":106},[96,133778,133779],{"class":98,"line":1183},[96,133780,132011],{"class":165},[96,133782,133783,133785,133787,133789,133791,133793],{"class":98,"line":1197},[96,133784,132016],{"class":1946},[96,133786,79786],{"class":106},[96,133788,128891],{"class":155},[96,133790,51416],{"class":106},[96,133792,54810],{"class":155},[96,133794,129461],{"class":106},[96,133796,133797],{"class":98,"line":1203},[96,133798,132031],{"class":165},[96,133800,133801,133803,133805,133807,133809,133811],{"class":98,"line":1294},[96,133802,132036],{"class":1946},[96,133804,79786],{"class":106},[96,133806,128891],{"class":155},[96,133808,51416],{"class":106},[96,133810,86212],{"class":155},[96,133812,129461],{"class":106},[96,133814,133815],{"class":98,"line":1300},[96,133816,132051],{"class":165},[96,133818,133819,133821,133823,133825,133827,133829],{"class":98,"line":1312},[96,133820,132056],{"class":1946},[96,133822,79786],{"class":106},[96,133824,128891],{"class":155},[96,133826,51416],{"class":106},[96,133828,132065],{"class":155},[96,133830,129461],{"class":106},[14,133832,133833],{},"完整代码：",[87,133835,133836],{"className":126531,"code":131963,"language":126533,"meta":18,"style":18},[93,133837,133838,133842,133856,133860,133874,133878,133892,133896,133910,133914],{"__ignoreMap":18},[96,133839,133840],{"class":98,"line":99},[96,133841,131970],{"class":165},[96,133843,133844,133846,133848,133850,133852,133854],{"class":98,"line":19},[96,133845,131975],{"class":1946},[96,133847,79786],{"class":106},[96,133849,128891],{"class":155},[96,133851,51416],{"class":106},[96,133853,131984],{"class":155},[96,133855,129461],{"class":106},[96,133857,133858],{"class":98,"line":1162},[96,133859,131991],{"class":165},[96,133861,133862,133864,133866,133868,133870,133872],{"class":98,"line":1177},[96,133863,131996],{"class":1946},[96,133865,79786],{"class":106},[96,133867,128891],{"class":155},[96,133869,51416],{"class":106},[96,133871,54743],{"class":155},[96,133873,129461],{"class":106},[96,133875,133876],{"class":98,"line":1183},[96,133877,132011],{"class":165},[96,133879,133880,133882,133884,133886,133888,133890],{"class":98,"line":1197},[96,133881,132016],{"class":1946},[96,133883,79786],{"class":106},[96,133885,128891],{"class":155},[96,133887,51416],{"class":106},[96,133889,54810],{"class":155},[96,133891,129461],{"class":106},[96,133893,133894],{"class":98,"line":1203},[96,133895,132031],{"class":165},[96,133897,133898,133900,133902,133904,133906,133908],{"class":98,"line":1294},[96,133899,132036],{"class":1946},[96,133901,79786],{"class":106},[96,133903,128891],{"class":155},[96,133905,51416],{"class":106},[96,133907,86212],{"class":155},[96,133909,129461],{"class":106},[96,133911,133912],{"class":98,"line":1300},[96,133913,132051],{"class":165},[96,133915,133916,133918,133920,133922,133924,133926],{"class":98,"line":1312},[96,133917,132056],{"class":1946},[96,133919,79786],{"class":106},[96,133921,128891],{"class":155},[96,133923,51416],{"class":106},[96,133925,132065],{"class":155},[96,133927,129461],{"class":106},[14,133929,133930],{},"分布思路重点详解：",[87,133932,133933],{"className":126531,"code":131963,"language":126533,"meta":18,"style":18},[93,133934,133935,133939,133953,133957,133971,133975,133989,133993,134007,134011],{"__ignoreMap":18},[96,133936,133937],{"class":98,"line":99},[96,133938,131970],{"class":165},[96,133940,133941,133943,133945,133947,133949,133951],{"class":98,"line":19},[96,133942,131975],{"class":1946},[96,133944,79786],{"class":106},[96,133946,128891],{"class":155},[96,133948,51416],{"class":106},[96,133950,131984],{"class":155},[96,133952,129461],{"class":106},[96,133954,133955],{"class":98,"line":1162},[96,133956,131991],{"class":165},[96,133958,133959,133961,133963,133965,133967,133969],{"class":98,"line":1177},[96,133960,131996],{"class":1946},[96,133962,79786],{"class":106},[96,133964,128891],{"class":155},[96,133966,51416],{"class":106},[96,133968,54743],{"class":155},[96,133970,129461],{"class":106},[96,133972,133973],{"class":98,"line":1183},[96,133974,132011],{"class":165},[96,133976,133977,133979,133981,133983,133985,133987],{"class":98,"line":1197},[96,133978,132016],{"class":1946},[96,133980,79786],{"class":106},[96,133982,128891],{"class":155},[96,133984,51416],{"class":106},[96,133986,54810],{"class":155},[96,133988,129461],{"class":106},[96,133990,133991],{"class":98,"line":1203},[96,133992,132031],{"class":165},[96,133994,133995,133997,133999,134001,134003,134005],{"class":98,"line":1294},[96,133996,132036],{"class":1946},[96,133998,79786],{"class":106},[96,134000,128891],{"class":155},[96,134002,51416],{"class":106},[96,134004,86212],{"class":155},[96,134006,129461],{"class":106},[96,134008,134009],{"class":98,"line":1300},[96,134010,132051],{"class":165},[96,134012,134013,134015,134017,134019,134021,134023],{"class":98,"line":1312},[96,134014,132056],{"class":1946},[96,134016,79786],{"class":106},[96,134018,128891],{"class":155},[96,134020,51416],{"class":106},[96,134022,132065],{"class":155},[96,134024,129461],{"class":106},[1445,134026],{"style":126387,"src":134027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[14,134029,134030],{},"图片太大，盒子太小，此时需要修改图片的大小",[87,134032,134034],{"className":127278,"code":134033,"language":127280,"meta":18,"style":18},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[93,134035,134036],{"__ignoreMap":18},[96,134037,134038,134040,134042,134044,134046,134049,134051,134053,134056,134059,134061,134064],{"class":98,"line":99},[96,134039,1017],{"class":106},[96,134041,1445],{"class":51279},[96,134043,55218],{"class":1946},[96,134045,152],{"class":106},[96,134047,134048],{"class":211},"\"images\u002Fpic.jpg\"",[96,134050,55226],{"class":1946},[96,134052,152],{"class":106},[96,134054,134055],{"class":211},"\"描述文字\"",[96,134057,134058],{"class":1946}," title",[96,134060,152],{"class":106},[96,134062,134063],{"class":211},"\"悬停提示\"",[96,134065,51286],{"class":106},[1445,134067],{"style":126387,"src":134068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[14,134070,134071],{},"制造遮罩层",[87,134073,134074],{"className":127278,"code":134033,"language":127280,"meta":18,"style":18},[93,134075,134076],{"__ignoreMap":18},[96,134077,134078,134080,134082,134084,134086,134088,134090,134092,134094,134096,134098,134100],{"class":98,"line":99},[96,134079,1017],{"class":106},[96,134081,1445],{"class":51279},[96,134083,55218],{"class":1946},[96,134085,152],{"class":106},[96,134087,134048],{"class":211},[96,134089,55226],{"class":1946},[96,134091,152],{"class":106},[96,134093,134055],{"class":211},[96,134095,134058],{"class":1946},[96,134097,152],{"class":106},[96,134099,134063],{"class":211},[96,134101,51286],{"class":106},[14,134103,134104],{},"此时是这样的为标准流",[1445,134106],{"style":126387,"src":134107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[14,134109,134110],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[14,134112,134113],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[14,134115,134116],{},"让他在中间，用center(background-position)",[14,134118,134119],{},"将需要变的尽可能放到一个盒子中",[14,134121,134122],{},"放大盒子上内部盒子发生变化",[87,134124,134126],{"className":126531,"code":134125,"language":126533,"meta":18,"style":18},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[93,134127,134128,134134,134144,134148,134155,134165,134177,134189],{"__ignoreMap":18},[96,134129,134130,134132],{"class":98,"line":99},[96,134131,127598],{"class":1946},[96,134133,15556],{"class":106},[96,134135,134136,134138,134140,134142],{"class":98,"line":19},[96,134137,132337],{"class":155},[96,134139,51416],{"class":106},[96,134141,54743],{"class":155},[96,134143,1273],{"class":106},[96,134145,134146],{"class":98,"line":1162},[96,134147,1548],{"class":106},[96,134149,134150,134153],{"class":98,"line":1177},[96,134151,134152],{"class":1946},".child",[96,134154,15556],{"class":106},[96,134156,134157,134159,134161,134163],{"class":98,"line":1183},[96,134158,132337],{"class":155},[96,134160,51416],{"class":106},[96,134162,54810],{"class":155},[96,134164,1273],{"class":106},[96,134166,134167,134169,134171,134173,134175],{"class":98,"line":1197},[96,134168,132351],{"class":155},[96,134170,51416],{"class":106},[96,134172,763],{"class":155},[96,134174,435],{"class":102},[96,134176,1273],{"class":106},[96,134178,134179,134181,134183,134185,134187],{"class":98,"line":1203},[96,134180,132368],{"class":155},[96,134182,51416],{"class":106},[96,134184,763],{"class":155},[96,134186,435],{"class":102},[96,134188,1273],{"class":106},[96,134190,134191],{"class":98,"line":1294},[96,134192,1548],{"class":106},[14,134194,134195],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[38,134197,134199],{"id":134198},"_122-精灵图","12.2 精灵图",[67,134201,134203],{"id":134202},"_1221-理解","12.2.1 理解",[50,134205,134206,134224],{},[53,134207,134208,134209,132437,134212,134215,134216,134219,134220,134223],{},"目的： ",[256,134210,134211],{},"为了有效地减少服务器接收和发送请求的次数",[256,134213,134214],{},"提高"," 页面的 ",[256,134217,134218],{},"加载速度"," ，出现了 ",[256,134221,134222],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[53,134225,134226,134227,134229,134230,134232,134233,134235,134236,134238,134239,134241,134242,134244],{},"使用精灵图核心：",[53695,134228],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53695,134231],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53695,134234],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53695,134237],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53695,134240],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53695,134243],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[67,134246,134248],{"id":134247},"_1222-扒图","12.2.2 扒图",[87,134250,134253],{"className":134251,"code":134252,"language":5171},[5169],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[93,134254,134252],{"__ignoreMap":18},[1445,134256],{"style":126387,"src":134257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[1445,134259],{"style":126387,"src":134260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[67,134262,134264],{"id":134263},"_1223-精灵图的实现","12.2.3 精灵图的实现",[1445,134266],{"style":126387,"src":134267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[14,134269,134270],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[1445,134272],{"style":126387,"src":134273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[87,134275,134277],{"className":126531,"code":134276,"language":126533,"meta":18,"style":18},"\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",[93,134278,134279,134284,134291,134303,134315,134334,134351],{"__ignoreMap":18},[96,134280,134281],{"class":98,"line":99},[96,134282,134283],{"class":165},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[96,134285,134286,134289],{"class":98,"line":19},[96,134287,134288],{"class":1946},".icon",[96,134290,15556],{"class":106},[96,134292,134293,134295,134297,134299,134301],{"class":98,"line":1162},[96,134294,70547],{"class":155},[96,134296,51416],{"class":106},[96,134298,807],{"class":155},[96,134300,51471],{"class":102},[96,134302,1273],{"class":106},[96,134304,134305,134307,134309,134311,134313],{"class":98,"line":1177},[96,134306,70767],{"class":155},[96,134308,51416],{"class":106},[96,134310,807],{"class":155},[96,134312,51471],{"class":102},[96,134314,1273],{"class":106},[96,134316,134317,134319,134321,134323,134325,134328,134330,134332],{"class":98,"line":1183},[96,134318,70590],{"class":155},[96,134320,51416],{"class":106},[96,134322,61705],{"class":155},[96,134324,107],{"class":106},[96,134326,134327],{"class":5200},"sprites.png",[96,134329,13698],{"class":106},[96,134331,61715],{"class":155},[96,134333,1273],{"class":106},[96,134335,134336,134338,134340,134342,134344,134347,134349],{"class":98,"line":1197},[96,134337,128791],{"class":155},[96,134339,51416],{"class":106},[96,134341,51742],{"class":155},[96,134343,51471],{"class":102},[96,134345,134346],{"class":155}," -20",[96,134348,51471],{"class":102},[96,134350,1273],{"class":106},[96,134352,134353],{"class":98,"line":1203},[96,134354,1548],{"class":106},[1445,134356],{"style":126387,"src":134357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[14,134359,134360],{},"在前端中坐标轴的正方向是右和下",[38,134362,134364],{"id":134363},"_123-字体图标","12.3 字体图标",[67,134366,134368],{"id":134367},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[14,134370,134371],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[14,134373,134374],{},"精灵图是有诸多优点的，但是缺点很明显。",[14,134376,134377],{},"1.图片文件还是比较大的。",[14,134379,134380],{},"2.图片本身放大和缩小会失真。",[14,134382,134383],{},"3.一旦图片制作完毕想要更换非常复杂。",[14,134385,134386,134387,25719],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[256,134388,134389],{},"字体图标 iconfont",[14,134391,134392,134395,134396,28364],{},[256,134393,134394],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[256,134397,134398],{},"展示的是图标，本质属于字体",[67,134400,134402],{"id":134401},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1114,134404,134405,134410,134413,134416,134419],{},[53,134406,134407,134409],{},[256,134408,25855],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[53,134411,134412],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[53,134414,134415],{},"兼容性：几乎支持所有的浏览器，请放心使用",[53,134417,134418],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[53,134420,134421],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[67,134423,134425],{"id":134424},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1114,134427,134428],{},[53,134429,134430,134431],{},"icomoon字体库：",[345,134432,134435],{"href":134433,"rel":134434},"http:\u002F\u002Ficomoon.io\u002F",[23850],"http:\u002F\u002Ficomoon.io",[14,134437,134438],{},"进去之后点icomoon app",[1445,134440],{"style":126387,"src":134441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[14,134443,134444],{},"可以对其编辑：",[1445,134446],{"style":126387,"src":134447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[14,134449,134450],{},"生成字体：",[1445,134452],{"style":126387,"src":134453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[14,134455,134456],{},"下载：",[1445,134458],{"style":126387,"src":134459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1114,134461,134462],{},[53,134463,134464,134465],{},"阿里iconfont字体库： ",[345,134466,134467],{"href":134467,"rel":134468},"http:\u002F\u002Fwww.iconfont.cn\u002F",[23850],[67,134470,134472],{"id":134471},"_1234-字体图标的引入","12.3.4 字体图标的引入",[50,134474,134475],{},[53,134476,134477,134478,134481],{},"把下载包里面的 ",[256,134479,134480],{},"fonts"," 文件夹放入页面根目录下",[1445,134483],{"style":126387,"src":134484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[50,134486,134487],{"start":19},[53,134488,134489],{},"字体文件格式",[244,134491,134492,134501],{},[247,134493,134494],{},[250,134495,134496,134499],{},[253,134497,134498],{"align":23721},"格式",[253,134500,23725],{"align":23721},[291,134502,134503,134513,134523,134533],{},[250,134504,134505,134510],{},[296,134506,134507],{"align":23721},[256,134508,134509],{},".ttf",[296,134511,134512],{"align":23721},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[250,134514,134515,134520],{},[296,134516,134517],{"align":23721},[256,134518,134519],{},".woff",[296,134521,134522],{"align":23721},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[250,134524,134525,134530],{},[296,134526,134527],{"align":23721},[256,134528,134529],{},".eot",[296,134531,134532],{"align":23721},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[250,134534,134535,134540],{},[296,134536,134537],{"align":23721},[256,134538,134539],{},"svg",[296,134541,134542],{"align":23721},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[50,134544,134545],{"start":1162},[53,134546,134547],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[87,134549,134551],{"className":126531,"code":134550,"language":126533,"meta":18,"style":18},"\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",[93,134552,134553,134558,134565,134577,134593,134618,134639,134659,134679,134683,134689,134699,134710],{"__ignoreMap":18},[96,134554,134555],{"class":98,"line":99},[96,134556,134557],{"class":165},"\u002F* 引入字体图标 *\u002F\n",[96,134559,134560,134563],{"class":98,"line":19},[96,134561,134562],{"class":102},"@font-face",[96,134564,15556],{"class":106},[96,134566,134567,134570,134572,134575],{"class":98,"line":1162},[96,134568,134569],{"class":155},"  font-family",[96,134571,51416],{"class":106},[96,134573,134574],{"class":211},"'icomoon'",[96,134576,1273],{"class":106},[96,134578,134579,134582,134584,134586,134588,134591],{"class":98,"line":1177},[96,134580,134581],{"class":155},"  src",[96,134583,51416],{"class":106},[96,134585,61705],{"class":155},[96,134587,107],{"class":106},[96,134589,134590],{"class":211},"'fonts\u002Ficomoon.eot'",[96,134592,2702],{"class":106},[96,134594,134595,134597,134599,134601,134603,134606,134608,134611,134613,134616],{"class":98,"line":1183},[96,134596,134581],{"class":155},[96,134598,51416],{"class":106},[96,134600,61705],{"class":155},[96,134602,107],{"class":106},[96,134604,134605],{"class":211},"'fonts\u002Ficomoon.eot?#iefix'",[96,134607,13698],{"class":106},[96,134609,134610],{"class":155},"format",[96,134612,107],{"class":106},[96,134614,134615],{"class":211},"'embedded-opentype'",[96,134617,38026],{"class":106},[96,134619,134620,134623,134625,134628,134630,134632,134634,134637],{"class":98,"line":1197},[96,134621,134622],{"class":155},"       url",[96,134624,107],{"class":106},[96,134626,134627],{"class":211},"'fonts\u002Ficomoon.woff'",[96,134629,13698],{"class":106},[96,134631,134610],{"class":155},[96,134633,107],{"class":106},[96,134635,134636],{"class":211},"'woff'",[96,134638,38026],{"class":106},[96,134640,134641,134643,134645,134648,134650,134652,134654,134657],{"class":98,"line":1203},[96,134642,134622],{"class":155},[96,134644,107],{"class":106},[96,134646,134647],{"class":211},"'fonts\u002Ficomoon.ttf'",[96,134649,13698],{"class":106},[96,134651,134610],{"class":155},[96,134653,107],{"class":106},[96,134655,134656],{"class":211},"'truetype'",[96,134658,38026],{"class":106},[96,134660,134661,134663,134665,134668,134670,134672,134674,134677],{"class":98,"line":1294},[96,134662,134622],{"class":155},[96,134664,107],{"class":106},[96,134666,134667],{"class":211},"'fonts\u002Ficomoon.svg#icomoon'",[96,134669,13698],{"class":106},[96,134671,134610],{"class":155},[96,134673,107],{"class":106},[96,134675,134676],{"class":211},"'svg'",[96,134678,2702],{"class":106},[96,134680,134681],{"class":98,"line":1300},[96,134682,1548],{"class":106},[96,134684,134685,134687],{"class":98,"line":1312},[96,134686,134288],{"class":1946},[96,134688,15556],{"class":106},[96,134690,134691,134693,134695,134697],{"class":98,"line":1595},[96,134692,134569],{"class":155},[96,134694,51416],{"class":106},[96,134696,134574],{"class":211},[96,134698,1273],{"class":106},[96,134700,134701,134704,134706,134708],{"class":98,"line":1600},[96,134702,134703],{"class":155},"  font-style",[96,134705,51416],{"class":106},[96,134707,63820],{"class":155},[96,134709,1273],{"class":106},[96,134711,134712],{"class":98,"line":1606},[96,134713,1548],{"class":106},[14,134715,134716],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[1445,134718],{"style":126387,"src":134719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[50,134721,134722],{"start":1177},[53,134723,134724],{},"添加字体",[1445,134726],{"style":126387,"src":134727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[14,134729,134730],{},"复制：",[1445,134732],{"style":126387,"src":134733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[14,134735,134736],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[50,134738,134739],{"start":1183},[53,134740,134741],{},"代码展示：",[87,134743,134744],{"className":126531,"code":134550,"language":126533,"meta":18,"style":18},[93,134745,134746,134750,134756,134766,134780,134802,134820,134838,134856,134860,134866,134876,134886],{"__ignoreMap":18},[96,134747,134748],{"class":98,"line":99},[96,134749,134557],{"class":165},[96,134751,134752,134754],{"class":98,"line":19},[96,134753,134562],{"class":102},[96,134755,15556],{"class":106},[96,134757,134758,134760,134762,134764],{"class":98,"line":1162},[96,134759,134569],{"class":155},[96,134761,51416],{"class":106},[96,134763,134574],{"class":211},[96,134765,1273],{"class":106},[96,134767,134768,134770,134772,134774,134776,134778],{"class":98,"line":1177},[96,134769,134581],{"class":155},[96,134771,51416],{"class":106},[96,134773,61705],{"class":155},[96,134775,107],{"class":106},[96,134777,134590],{"class":211},[96,134779,2702],{"class":106},[96,134781,134782,134784,134786,134788,134790,134792,134794,134796,134798,134800],{"class":98,"line":1183},[96,134783,134581],{"class":155},[96,134785,51416],{"class":106},[96,134787,61705],{"class":155},[96,134789,107],{"class":106},[96,134791,134605],{"class":211},[96,134793,13698],{"class":106},[96,134795,134610],{"class":155},[96,134797,107],{"class":106},[96,134799,134615],{"class":211},[96,134801,38026],{"class":106},[96,134803,134804,134806,134808,134810,134812,134814,134816,134818],{"class":98,"line":1197},[96,134805,134622],{"class":155},[96,134807,107],{"class":106},[96,134809,134627],{"class":211},[96,134811,13698],{"class":106},[96,134813,134610],{"class":155},[96,134815,107],{"class":106},[96,134817,134636],{"class":211},[96,134819,38026],{"class":106},[96,134821,134822,134824,134826,134828,134830,134832,134834,134836],{"class":98,"line":1203},[96,134823,134622],{"class":155},[96,134825,107],{"class":106},[96,134827,134647],{"class":211},[96,134829,13698],{"class":106},[96,134831,134610],{"class":155},[96,134833,107],{"class":106},[96,134835,134656],{"class":211},[96,134837,38026],{"class":106},[96,134839,134840,134842,134844,134846,134848,134850,134852,134854],{"class":98,"line":1294},[96,134841,134622],{"class":155},[96,134843,107],{"class":106},[96,134845,134667],{"class":211},[96,134847,13698],{"class":106},[96,134849,134610],{"class":155},[96,134851,107],{"class":106},[96,134853,134676],{"class":211},[96,134855,2702],{"class":106},[96,134857,134858],{"class":98,"line":1300},[96,134859,1548],{"class":106},[96,134861,134862,134864],{"class":98,"line":1312},[96,134863,134288],{"class":1946},[96,134865,15556],{"class":106},[96,134867,134868,134870,134872,134874],{"class":98,"line":1595},[96,134869,134569],{"class":155},[96,134871,51416],{"class":106},[96,134873,134574],{"class":211},[96,134875,1273],{"class":106},[96,134877,134878,134880,134882,134884],{"class":98,"line":1600},[96,134879,134703],{"class":155},[96,134881,51416],{"class":106},[96,134883,63820],{"class":155},[96,134885,1273],{"class":106},[96,134887,134888],{"class":98,"line":1606},[96,134889,1548],{"class":106},[1445,134891],{"style":126387,"src":134892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[14,134894,134895],{},"更加细节展示：",[50,134897,134898],{},[53,134899,134900],{},"html 标签内添加小图标",[1445,134902],{"style":126387,"src":134903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[50,134905,134906],{"start":19},[53,134907,134908],{},"给标签定义字体",[87,134910,134911],{"className":127278,"code":130635,"language":127280,"meta":18,"style":18},[93,134912,134913,134917,134931,134935],{"__ignoreMap":18},[96,134914,134915],{"class":98,"line":99},[96,134916,130642],{"class":165},[96,134918,134919,134921,134923,134925,134927,134929],{"class":98,"line":19},[96,134920,1017],{"class":106},[96,134922,51590],{"class":51279},[96,134924,53465],{"class":1946},[96,134926,152],{"class":106},[96,134928,130655],{"class":211},[96,134930,51286],{"class":106},[96,134932,134933],{"class":98,"line":1162},[96,134934,130662],{"class":106},[96,134936,134937,134939,134941],{"class":98,"line":1177},[96,134938,51764],{"class":106},[96,134940,51590],{"class":51279},[96,134942,51286],{"class":106},[14,134944,134945],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[1445,134947],{"style":126387,"src":134948},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[67,134950,134952],{"id":134951},"_1235-字体图标的追加","12.3.5 字体图标的追加",[14,134954,134955],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[14,134957,134958,134959,134962],{},"把压缩包里面的 ",[256,134960,134961],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[14,134964,134965],{},"打开网站，点下方：",[1445,134967],{"style":126387,"src":134968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[1445,134970],{"style":126387,"src":134971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[1445,134973],{"style":126387,"src":134974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[14,134976,134977],{},"点yes重新加载",[14,134979,134980],{},"然后重复之前的操作就可以实现了",[14,134982,134983],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[67,134985,134987],{"id":134986},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[1445,134989],{"style":126387,"src":134990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[5110,134992,134993],{},"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":18,"searchDepth":19,"depth":19,"links":134995},[134996,135002,135007],{"id":133599,"depth":19,"text":133600,"children":134997},[134998,134999,135000,135001],{"id":133611,"depth":1162,"text":133612},{"id":133640,"depth":1162,"text":133641},{"id":133668,"depth":1162,"text":133669},{"id":133726,"depth":1162,"text":133727},{"id":134198,"depth":19,"text":134199,"children":135003},[135004,135005,135006],{"id":134202,"depth":1162,"text":134203},{"id":134247,"depth":1162,"text":134248},{"id":134263,"depth":1162,"text":134264},{"id":134363,"depth":19,"text":134364,"children":135008},[135009,135010,135011,135012,135013,135014],{"id":134367,"depth":1162,"text":134368},{"id":134401,"depth":1162,"text":134402},{"id":134424,"depth":1162,"text":134425},{"id":134471,"depth":1162,"text":134472},{"id":134951,"depth":1162,"text":134952},{"id":134986,"depth":1162,"text":134987},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133591,"description":23361},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135021,"title":135022,"body":135023,"description":23361,"extension":21,"meta":136250,"navigation":23,"path":136251,"seo":136252,"stem":136253,"__hash__":136254},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135024,"toc":136231},[135025,135028,135032,135035,135049,135117,135147,135150,135154,135158,135260,135307,135311,135314,135317,135351,135354,135357,135360,135363,135366,135369,135372,135374,135377,135380,135383,135386,135389,135392,135395,135423,135426,135430,135433,135440,135443,135446,135472,135475,135479,135482,135485,135492,135496,135499,135501,135533,135536,135539,135551,135557,135560,135563,135566,135568,135572,135575,135578,135581,135626,135630,135632,135635,135642,135684,135687,135691,135696,135710,135714,135717,135720,135723,135726,135729,135763,135766,135769,135823,135826,135829,135832,135835,135887,135890,135893,135942,135946,135948,135951,135954,135957,135960,135963,136021,136024,136030,136033,136036,136068,136071,136075,136079,136082,136114,136118,136121,136165,136169,136172,136175,136178,136181,136184,136187,136190,136192,136195,136197,136200,136203,136206,136209,136214,136217,136219,136222,136225,136228],[10,135026,135022],{"id":135027},"_13-界面样式与布局技巧",[38,135029,135031],{"id":135030},"_131-css三角","13.1 css三角",[14,135033,135034],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1114,135036,135037,135040,135043,135046],{},[53,135038,135039],{},"用css 边框可以模拟三角效果",[53,135041,135042],{},"宽度高度为0",[53,135044,135045],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[53,135047,135048],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[87,135050,135052],{"className":126531,"code":135051,"language":126533,"meta":18,"style":18},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[93,135053,135054,135059,135066,135076,135086,135102,135113],{"__ignoreMap":18},[96,135055,135056],{"class":98,"line":99},[96,135057,135058],{"class":165},"\u002F* CSS 实现三角形 *\u002F\n",[96,135060,135061,135064],{"class":98,"line":19},[96,135062,135063],{"class":1946},".triangle",[96,135065,15556],{"class":106},[96,135067,135068,135070,135072,135074],{"class":98,"line":1162},[96,135069,70547],{"class":155},[96,135071,51416],{"class":106},[96,135073,298],{"class":155},[96,135075,1273],{"class":106},[96,135077,135078,135080,135082,135084],{"class":98,"line":1177},[96,135079,70767],{"class":155},[96,135081,51416],{"class":106},[96,135083,298],{"class":155},[96,135085,1273],{"class":106},[96,135087,135088,135090,135092,135094,135096,135098,135100],{"class":98,"line":1183},[96,135089,70875],{"class":155},[96,135091,51416],{"class":106},[96,135093,553],{"class":155},[96,135095,51471],{"class":102},[96,135097,51500],{"class":155},[96,135099,63970],{"class":155},[96,135101,1273],{"class":106},[96,135103,135104,135107,135109,135111],{"class":98,"line":1197},[96,135105,135106],{"class":155},"  border-bottom-color",[96,135108,51416],{"class":106},[96,135110,62348],{"class":155},[96,135112,1273],{"class":106},[96,135114,135115],{"class":98,"line":1203},[96,135116,1548],{"class":106},[87,135118,135119],{"className":126531,"code":130688,"language":126533,"meta":18,"style":18},[93,135120,135121,135127,135143],{"__ignoreMap":18},[96,135122,135123,135125],{"class":98,"line":99},[96,135124,51590],{"class":51279},[96,135126,15556],{"class":106},[96,135128,135129,135131,135133,135135,135137,135139,135141],{"class":98,"line":19},[96,135130,70875],{"class":155},[96,135132,51416],{"class":106},[96,135134,324],{"class":155},[96,135136,51471],{"class":102},[96,135138,51500],{"class":155},[96,135140,129923],{"class":155},[96,135142,1273],{"class":106},[96,135144,135145],{"class":98,"line":1162},[96,135146,1548],{"class":106},[1445,135148],{"style":126387,"src":135149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[38,135151,135153],{"id":135152},"_132-css用户界面样式","13.2 css用户界面样式",[67,135155,135157],{"id":135156},"_1321-鼠标样式","13.2.1 鼠标样式",[87,135159,135161],{"className":126531,"code":135160,"language":126533,"meta":18,"style":18},"\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",[93,135162,135163,135168,135187,135205,135224,135241],{"__ignoreMap":18},[96,135164,135165],{"class":98,"line":99},[96,135166,135167],{"class":165},"\u002F* 鼠标样式 *\u002F\n",[96,135169,135170,135172,135174,135177,135179,135181,135184],{"class":98,"line":19},[96,135171,51590],{"class":51279},[96,135173,79786],{"class":106},[96,135175,135176],{"class":155},"cursor",[96,135178,51416],{"class":106},[96,135180,62009],{"class":155},[96,135182,135183],{"class":106},"; }   ",[96,135185,135186],{"class":165},"\u002F* 手型 *\u002F\n",[96,135188,135189,135191,135193,135195,135197,135200,135202],{"class":98,"line":1162},[96,135190,51590],{"class":51279},[96,135192,79786],{"class":106},[96,135194,135176],{"class":155},[96,135196,51416],{"class":106},[96,135198,135199],{"class":155},"default",[96,135201,135183],{"class":106},[96,135203,135204],{"class":165},"\u002F* 默认 *\u002F\n",[96,135206,135207,135209,135211,135213,135215,135218,135221],{"class":98,"line":1177},[96,135208,51590],{"class":51279},[96,135210,79786],{"class":106},[96,135212,135176],{"class":155},[96,135214,51416],{"class":106},[96,135216,135217],{"class":155},"move",[96,135219,135220],{"class":106},"; }      ",[96,135222,135223],{"class":165},"\u002F* 移动 *\u002F\n",[96,135225,135226,135228,135230,135232,135234,135236,135238],{"class":98,"line":1183},[96,135227,51590],{"class":51279},[96,135229,79786],{"class":106},[96,135231,135176],{"class":155},[96,135233,51416],{"class":106},[96,135235,5171],{"class":155},[96,135237,135220],{"class":106},[96,135239,135240],{"class":165},"\u002F* 文本 *\u002F\n",[96,135242,135243,135245,135247,135249,135251,135254,135257],{"class":98,"line":1197},[96,135244,51590],{"class":51279},[96,135246,79786],{"class":106},[96,135248,135176],{"class":155},[96,135250,51416],{"class":106},[96,135252,135253],{"class":155},"not-allowed",[96,135255,135256],{"class":106},"; } ",[96,135258,135259],{"class":165},"\u002F* 禁止 *\u002F\n",[244,135261,135262,135270],{},[247,135263,135264],{},[250,135265,135266,135268],{},[253,135267,126995],{"align":23721},[253,135269,27468],{"align":23721},[291,135271,135272,135279,135286,135293,135300],{},[250,135273,135274,135276],{},[296,135275,135199],{"align":23721},[296,135277,135278],{"align":23721},"小白 默认",[250,135280,135281,135283],{},[296,135282,62009],{"align":23721},[296,135284,135285],{"align":23721},"小手",[250,135287,135288,135290],{},[296,135289,135217],{"align":23721},[296,135291,135292],{"align":23721},"移动",[250,135294,135295,135297],{},[296,135296,5171],{"align":23721},[296,135298,135299],{"align":23721},"文本",[250,135301,135302,135304],{},[296,135303,135253],{"align":23721},[296,135305,135306],{"align":23721},"禁止",[67,135308,135310],{"id":135309},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[14,135312,135313],{},"去除表单轮廓线",[14,135315,135316],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[87,135318,135319],{"className":126531,"code":129895,"language":126533,"meta":18,"style":18},[93,135320,135321,135325,135331,135347],{"__ignoreMap":18},[96,135322,135323],{"class":98,"line":99},[96,135324,129902],{"class":165},[96,135326,135327,135329],{"class":98,"line":19},[96,135328,51590],{"class":51279},[96,135330,15556],{"class":106},[96,135332,135333,135335,135337,135339,135341,135343,135345],{"class":98,"line":1162},[96,135334,70875],{"class":155},[96,135336,51416],{"class":106},[96,135338,324],{"class":155},[96,135340,51471],{"class":102},[96,135342,51500],{"class":155},[96,135344,129923],{"class":155},[96,135346,1273],{"class":106},[96,135348,135349],{"class":98,"line":1177},[96,135350,1548],{"class":106},[14,135352,135353],{},"文本域：",[1445,135355],{"style":126387,"src":135356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[14,135358,135359],{},"此时会有一个空白区域",[1445,135361],{"style":126387,"src":135362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[14,135364,135365],{},"写在同一行就不会出现这个问题",[1445,135367],{"style":126387,"src":135368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[14,135370,135371],{},"文本域是行内块元素，一定记住！！！",[14,135373,98212],{},[1445,135375],{"style":126387,"src":135376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[14,135378,135379],{},"文本域尽量放在一行",[14,135381,135382],{},"知识回顾：cols是列，rols是行",[1445,135384],{"style":126387,"src":135385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[14,135387,135388],{},"它可以进行拖动，显然这是我们不愿意看到的",[1445,135390],{"style":126387,"src":135391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[14,135393,135394],{},"使用resize进行解决",[87,135396,135398],{"className":126531,"code":135397,"language":126533,"meta":18,"style":18},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[93,135399,135400,135406,135419],{"__ignoreMap":18},[96,135401,135402,135404],{"class":98,"line":99},[96,135403,53800],{"class":51279},[96,135405,15556],{"class":106},[96,135407,135408,135410,135412,135414,135416],{"class":98,"line":19},[96,135409,70777],{"class":155},[96,135411,51416],{"class":106},[96,135413,54716],{"class":155},[96,135415,130394],{"class":106},[96,135417,135418],{"class":165},"\u002F* 取消表单轮廓线 *\u002F\n",[96,135420,135421],{"class":98,"line":1162},[96,135422,1548],{"class":106},[14,135424,135425],{},"此时就无法通过右下方实现拖动了",[67,135427,135429],{"id":135428},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[14,135431,135432],{},"实现一个盒子中的文字和图片对齐",[14,135434,135435,135436,135439],{},"用于设置一个元素的 ",[256,135437,135438],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[14,135441,135442],{},"图片和文字默认是基线对齐",[1445,135444],{"style":126387,"src":135445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[87,135447,135448],{"className":126531,"code":135397,"language":126533,"meta":18,"style":18},[93,135449,135450,135456,135468],{"__ignoreMap":18},[96,135451,135452,135454],{"class":98,"line":99},[96,135453,53800],{"class":51279},[96,135455,15556],{"class":106},[96,135457,135458,135460,135462,135464,135466],{"class":98,"line":19},[96,135459,70777],{"class":155},[96,135461,51416],{"class":106},[96,135463,54716],{"class":155},[96,135465,130394],{"class":106},[96,135467,135418],{"class":165},[96,135469,135470],{"class":98,"line":1162},[96,135471,1548],{"class":106},[1445,135473],{"style":126387,"src":135474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[21982,135476,135478],{"id":135477},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[14,135480,135481],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[1445,135483],{"style":126387,"src":135484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[14,135486,135487,135488,135491],{},"此时可以给图片、表单这些行内块元素的 ",[256,135489,135490],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[21982,135493,135495],{"id":135494},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[14,135497,135498],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[14,135500,14617],{},[87,135502,135504],{"className":126531,"code":135503,"language":126533,"meta":18,"style":18},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[93,135505,135506,135511,135517,135529],{"__ignoreMap":18},[96,135507,135508],{"class":98,"line":99},[96,135509,135510],{"class":165},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[96,135512,135513,135515],{"class":98,"line":19},[96,135514,1445],{"class":51279},[96,135516,15556],{"class":106},[96,135518,135519,135522,135524,135527],{"class":98,"line":1162},[96,135520,135521],{"class":155},"  vertical-align",[96,135523,51416],{"class":106},[96,135525,135526],{"class":155},"middle",[96,135528,1273],{"class":106},[96,135530,135531],{"class":98,"line":1177},[96,135532,1548],{"class":106},[1445,135534],{"style":126387,"src":135535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[14,135537,135538],{},"主要解决方法有两种：",[50,135540,135541],{},[53,135542,135543,135546,135547,135550],{},[256,135544,135545],{},"给图片"," 添加 ",[256,135548,135549],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[14,135552,135553,135554],{},"2.把图片转换为块级元素 ",[256,135555,135556],{},"display: block",[14,135558,135559],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[14,135561,135562],{},"img {",[14,135564,135565],{},"vertical-align:middle;",[14,135567,1053],{},[67,135569,135571],{"id":135570},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[14,135573,135574],{},"效果：",[1445,135576],{"style":126387,"src":135577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[14,135579,135580],{},"单行文本溢出显示省略号--必须满足三个条件：",[87,135582,135584],{"className":126531,"code":135583,"language":126533,"meta":18,"style":18},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[93,135585,135586,135591,135597,135607,135612,135622],{"__ignoreMap":18},[96,135587,135588],{"class":98,"line":99},[96,135589,135590],{"class":165},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[96,135592,135593,135595],{"class":98,"line":19},[96,135594,1445],{"class":51279},[96,135596,15556],{"class":106},[96,135598,135599,135601,135603,135605],{"class":98,"line":1162},[96,135600,135521],{"class":155},[96,135602,51416],{"class":106},[96,135604,135526],{"class":155},[96,135606,1273],{"class":106},[96,135608,135609],{"class":98,"line":1177},[96,135610,135611],{"class":165},"  \u002F* 或 *\u002F\n",[96,135613,135614,135616,135618,135620],{"class":98,"line":1183},[96,135615,128147],{"class":155},[96,135617,51416],{"class":106},[96,135619,60848],{"class":155},[96,135621,1273],{"class":106},[96,135623,135624],{"class":98,"line":1197},[96,135625,1548],{"class":106},[67,135627,135629],{"id":135628},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[14,135631,135574],{},[1445,135633],{"style":126387,"src":135634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[14,135636,135637,135638,135641],{},"多行文本溢出显示省略号， ",[256,135639,135640],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[87,135643,135644],{"className":126531,"code":135583,"language":126533,"meta":18,"style":18},[93,135645,135646,135650,135656,135666,135670,135680],{"__ignoreMap":18},[96,135647,135648],{"class":98,"line":99},[96,135649,135590],{"class":165},[96,135651,135652,135654],{"class":98,"line":19},[96,135653,1445],{"class":51279},[96,135655,15556],{"class":106},[96,135657,135658,135660,135662,135664],{"class":98,"line":1162},[96,135659,135521],{"class":155},[96,135661,51416],{"class":106},[96,135663,135526],{"class":155},[96,135665,1273],{"class":106},[96,135667,135668],{"class":98,"line":1177},[96,135669,135611],{"class":165},[96,135671,135672,135674,135676,135678],{"class":98,"line":1183},[96,135673,128147],{"class":155},[96,135675,51416],{"class":106},[96,135677,60848],{"class":155},[96,135679,1273],{"class":106},[96,135681,135682],{"class":98,"line":1197},[96,135683,1548],{"class":106},[14,135685,135686],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[38,135688,135690],{"id":135689},"_133-常见布局技巧","13.3 常见布局技巧",[14,135692,135693],{},[256,135694,135695],{},"巧妙利用一个技术更快更好的布局：",[50,135697,135698,135701,135704,135707],{},[53,135699,135700],{},"margin负值的运用",[53,135702,135703],{},"文字围绕浮动元素",[53,135705,135706],{},"行内块的巧妙运用",[53,135708,135709],{},"CSS三角强化",[67,135711,135713],{"id":135712},"_1331-margin负值的运用","13.3.1 margin负值的运用",[14,135715,135716],{},"应用场景：",[1445,135718],{"style":126387,"src":135719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[1445,135721],{"style":126387,"src":135722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[14,135724,135725],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[14,135727,135728],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[87,135730,135731],{"className":126531,"code":129895,"language":126533,"meta":18,"style":18},[93,135732,135733,135737,135743,135759],{"__ignoreMap":18},[96,135734,135735],{"class":98,"line":99},[96,135736,129902],{"class":165},[96,135738,135739,135741],{"class":98,"line":19},[96,135740,51590],{"class":51279},[96,135742,15556],{"class":106},[96,135744,135745,135747,135749,135751,135753,135755,135757],{"class":98,"line":1162},[96,135746,70875],{"class":155},[96,135748,51416],{"class":106},[96,135750,324],{"class":155},[96,135752,51471],{"class":102},[96,135754,51500],{"class":155},[96,135756,129923],{"class":155},[96,135758,1273],{"class":106},[96,135760,135761],{"class":98,"line":1177},[96,135762,1548],{"class":106},[1445,135764],{"style":126387,"src":135765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[14,135767,135768],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[87,135770,135772],{"className":126531,"code":135771,"language":126533,"meta":18,"style":18},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[93,135773,135774,135779,135785,135795,135807,135819],{"__ignoreMap":18},[96,135775,135776],{"class":98,"line":99},[96,135777,135778],{"class":165},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[96,135780,135781,135783],{"class":98,"line":19},[96,135782,130379],{"class":1946},[96,135784,15556],{"class":106},[96,135786,135787,135789,135791,135793],{"class":98,"line":1162},[96,135788,132337],{"class":155},[96,135790,51416],{"class":106},[96,135792,54743],{"class":155},[96,135794,1273],{"class":106},[96,135796,135797,135799,135801,135803,135805],{"class":98,"line":1177},[96,135798,132351],{"class":155},[96,135800,51416],{"class":106},[96,135802,553],{"class":155},[96,135804,51471],{"class":102},[96,135806,1273],{"class":106},[96,135808,135809,135811,135813,135815,135817],{"class":98,"line":1183},[96,135810,132368],{"class":155},[96,135812,51416],{"class":106},[96,135814,807],{"class":155},[96,135816,51471],{"class":102},[96,135818,1273],{"class":106},[96,135820,135821],{"class":98,"line":1197},[96,135822,1548],{"class":106},[14,135824,135825],{},"加上上述代码会发现：",[1445,135827],{"style":126387,"src":135828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[14,135830,135831],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[14,135833,135834],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[87,135836,135837],{"className":126531,"code":135771,"language":126533,"meta":18,"style":18},[93,135838,135839,135843,135849,135859,135871,135883],{"__ignoreMap":18},[96,135840,135841],{"class":98,"line":99},[96,135842,135778],{"class":165},[96,135844,135845,135847],{"class":98,"line":19},[96,135846,130379],{"class":1946},[96,135848,15556],{"class":106},[96,135850,135851,135853,135855,135857],{"class":98,"line":1162},[96,135852,132337],{"class":155},[96,135854,51416],{"class":106},[96,135856,54743],{"class":155},[96,135858,1273],{"class":106},[96,135860,135861,135863,135865,135867,135869],{"class":98,"line":1177},[96,135862,132351],{"class":155},[96,135864,51416],{"class":106},[96,135866,553],{"class":155},[96,135868,51471],{"class":102},[96,135870,1273],{"class":106},[96,135872,135873,135875,135877,135879,135881],{"class":98,"line":1183},[96,135874,132368],{"class":155},[96,135876,51416],{"class":106},[96,135878,807],{"class":155},[96,135880,51471],{"class":102},[96,135882,1273],{"class":106},[96,135884,135885],{"class":98,"line":1197},[96,135886,1548],{"class":106},[14,135888,135889],{},"解决方式2：",[14,135891,135892],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[87,135894,135896],{"className":126531,"code":135895,"language":126533,"meta":18,"style":18},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[93,135897,135898,135904,135914,135926,135938],{"__ignoreMap":18},[96,135899,135900,135902],{"class":98,"line":99},[96,135901,51590],{"class":51279},[96,135903,15556],{"class":106},[96,135905,135906,135908,135910,135912],{"class":98,"line":19},[96,135907,132337],{"class":155},[96,135909,51416],{"class":106},[96,135911,54743],{"class":155},[96,135913,1273],{"class":106},[96,135915,135916,135918,135920,135922,135924],{"class":98,"line":1162},[96,135917,132351],{"class":155},[96,135919,51416],{"class":106},[96,135921,553],{"class":155},[96,135923,51471],{"class":102},[96,135925,1273],{"class":106},[96,135927,135928,135930,135932,135934,135936],{"class":98,"line":1177},[96,135929,132368],{"class":155},[96,135931,51416],{"class":106},[96,135933,807],{"class":155},[96,135935,51471],{"class":102},[96,135937,1273],{"class":106},[96,135939,135940],{"class":98,"line":1183},[96,135941,1548],{"class":106},[67,135943,135945],{"id":135944},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[14,135947,135716],{},[1445,135949],{"style":126387,"src":135950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[14,135952,135953],{},"实现结构图：",[1445,135955],{"style":126387,"src":135956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[14,135958,135959],{},"巧妙运用浮动元素不会压住文字的特性",[14,135961,135962],{},"代码显示：",[87,135964,135966],{"className":126531,"code":135965,"language":126533,"meta":18,"style":18},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[93,135967,135968,135974,135984,135988,135993,135997,136003,136017],{"__ignoreMap":18},[96,135969,135970,135972],{"class":98,"line":99},[96,135971,130379],{"class":1946},[96,135973,15556],{"class":106},[96,135975,135976,135978,135980,135982],{"class":98,"line":19},[96,135977,131011],{"class":155},[96,135979,51416],{"class":106},[96,135981,23721],{"class":155},[96,135983,1273],{"class":106},[96,135985,135986],{"class":98,"line":1162},[96,135987,1548],{"class":106},[96,135989,135990],{"class":98,"line":1177},[96,135991,135992],{"class":106},"```Css\n",[96,135994,135995],{"class":98,"line":1183},[96,135996,130374],{"class":165},[96,135998,135999,136001],{"class":98,"line":1197},[96,136000,130379],{"class":1946},[96,136002,15556],{"class":106},[96,136004,136005,136007,136009,136011,136013,136015],{"class":98,"line":1203},[96,136006,70449],{"class":155},[96,136008,51416],{"class":106},[96,136010,298],{"class":155},[96,136012,51535],{"class":155},[96,136014,130394],{"class":106},[96,136016,130397],{"class":165},[96,136018,136019],{"class":98,"line":1294},[96,136020,1548],{"class":106},[14,136022,136023],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[87,136025,136028],{"className":136026,"code":136027,"language":5171},[5169],"\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",[93,136029,136027],{"__ignoreMap":18},[1445,136031],{"style":126387,"src":136032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[14,136034,136035],{},"最终展示结果：",[87,136037,136038],{"className":126531,"code":130367,"language":126533,"meta":18,"style":18},[93,136039,136040,136044,136050,136064],{"__ignoreMap":18},[96,136041,136042],{"class":98,"line":99},[96,136043,130374],{"class":165},[96,136045,136046,136048],{"class":98,"line":19},[96,136047,130379],{"class":1946},[96,136049,15556],{"class":106},[96,136051,136052,136054,136056,136058,136060,136062],{"class":98,"line":1162},[96,136053,70449],{"class":155},[96,136055,51416],{"class":106},[96,136057,298],{"class":155},[96,136059,51535],{"class":155},[96,136061,130394],{"class":106},[96,136063,130397],{"class":165},[96,136065,136066],{"class":98,"line":1177},[96,136067,1548],{"class":106},[1445,136069],{"style":126387,"src":136070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[38,136072,136074],{"id":136073},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[67,136076,136078],{"id":136077},"_1341-原理","13.4.1 原理",[1445,136080],{"style":126387,"src":136081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[87,136083,136084],{"className":126531,"code":130367,"language":126533,"meta":18,"style":18},[93,136085,136086,136090,136096,136110],{"__ignoreMap":18},[96,136087,136088],{"class":98,"line":99},[96,136089,130374],{"class":165},[96,136091,136092,136094],{"class":98,"line":19},[96,136093,130379],{"class":1946},[96,136095,15556],{"class":106},[96,136097,136098,136100,136102,136104,136106,136108],{"class":98,"line":1162},[96,136099,70449],{"class":155},[96,136101,51416],{"class":106},[96,136103,298],{"class":155},[96,136105,51535],{"class":155},[96,136107,130394],{"class":106},[96,136109,130397],{"class":165},[96,136111,136112],{"class":98,"line":1177},[96,136113,1548],{"class":106},[67,136115,136117],{"id":136116},"_1342-实例","13.4.2 实例",[1445,136119],{"style":126387,"src":136120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[87,136122,136123],{"className":126531,"code":130997,"language":126533,"meta":18,"style":18},[93,136124,136125,136131,136141,136145,136151,136161],{"__ignoreMap":18},[96,136126,136127,136129],{"class":98,"line":99},[96,136128,131004],{"class":1946},[96,136130,15556],{"class":106},[96,136132,136133,136135,136137,136139],{"class":98,"line":19},[96,136134,131011],{"class":155},[96,136136,51416],{"class":106},[96,136138,23721],{"class":155},[96,136140,1273],{"class":106},[96,136142,136143],{"class":98,"line":1162},[96,136144,1548],{"class":106},[96,136146,136147,136149],{"class":98,"line":1177},[96,136148,131026],{"class":1946},[96,136150,15556],{"class":106},[96,136152,136153,136155,136157,136159],{"class":98,"line":1183},[96,136154,131011],{"class":155},[96,136156,51416],{"class":106},[96,136158,72501],{"class":155},[96,136160,1273],{"class":106},[96,136162,136163],{"class":98,"line":1197},[96,136164,1548],{"class":106},[38,136166,136168],{"id":136167},"_135-css的初始化","13.5 css的初始化",[14,136170,136171],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[14,136173,136174],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[14,136176,136177],{},"每个网页都必须首先进行 CSS初始化。",[14,136179,136180],{},"这里我们以 京东CSS初始化代码为例。",[14,136182,136183],{},"在网页右键查看网页源代码",[14,136185,136186],{},"找到css的link引入语句",[14,136188,136189],{},"然后ctrl+f 输入body",[14,136191,77205],{},[1445,136193],{"style":126387,"src":136194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[14,136196,77228],{},[1445,136198],{"style":126387,"src":136199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[14,136201,136202],{},"③打开了网页上传压缩的代码",[1445,136204],{"style":126387,"src":136205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[14,136207,136208],{},"④从body前可以查看这个网页的初始化代码",[14,136210,136211],{},[256,136212,136213],{},"Unicode编码字体：",[14,136215,136216],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[14,136218,83186],{},[14,136220,136221],{},"黑体 \\9ED1\\4F53",[14,136223,136224],{},"宋体 \\5B8B\\4F53",[14,136226,136227],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[5110,136229,136230],{},"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":18,"searchDepth":19,"depth":19,"links":136232},[136233,136234,136241,136245,136249],{"id":135030,"depth":19,"text":135031},{"id":135152,"depth":19,"text":135153,"children":136235},[136236,136237,136238,136239,136240],{"id":135156,"depth":1162,"text":135157},{"id":135309,"depth":1162,"text":135310},{"id":135428,"depth":1162,"text":135429},{"id":135570,"depth":1162,"text":135571},{"id":135628,"depth":1162,"text":135629},{"id":135689,"depth":19,"text":135690,"children":136242},[136243,136244],{"id":135712,"depth":1162,"text":135713},{"id":135944,"depth":1162,"text":135945},{"id":136073,"depth":19,"text":136074,"children":136246},[136247,136248],{"id":136077,"depth":1162,"text":136078},{"id":136116,"depth":1162,"text":136117},{"id":136167,"depth":19,"text":136168},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135022,"description":23361},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136256,"title":136257,"body":136258,"description":23361,"extension":21,"meta":137944,"navigation":23,"path":137945,"seo":137946,"stem":137947,"__hash__":137948},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136259,"toc":137933},[136260,136263,136267,136271,136274,136281,136284,136287,136325,136328,136330,136344,136348,136357,136361,136366,136369,136372,136375,136410,136415,136418,136448,136451,136456,136459,136462,136492,136495,136549,136552,136556,136561,136573,136576,136580,136610,136613,136618,136621,136651,136654,136658,136675,136679,136683,136686,136719,136722,136726,136729,136732,136735,136738,136741,136852,136855,136858,136861,136963,136966,136970,136974,136978,136981,137021,137024,137026,137042,137046,137049,137054,137135,137138,137141,137267,137272,137275,137283,137286,137291,137376,137379,137383,137386,137389,137393,137413,137418,137502,137505,137510,137513,137516,137594,137597,137600,137603,137606,137609,137614,137617,137620,137692,137695,137700,137703,137800,137803,137809,137812,137815,137818,137821,137824,137827,137830,137833,137837,137842,137845,137878,137883,137886,137927,137930],[10,136261,136257],{"id":136262},"_14-html5与css3新特性",[38,136264,136266],{"id":136265},"_141-html5的新特性","14.1 HTML5的新特性",[67,136268,136270],{"id":136269},"_1411-基本标签","14.1.1 基本标签",[14,136272,136273],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[14,136275,136276,136277,136280],{},"这些新特性都有兼容性问题，基本是 ",[256,136278,136279],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[14,136282,136283],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[14,136285,136286],{},"现在使用的是新特性：",[1114,136288,136289,136295,136301,136307,136313,136319],{},[53,136290,136291,136294],{},[93,136292,136293],{},"\u003Cheader>"," 头部标签",[53,136296,136297,136300],{},[93,136298,136299],{},"\u003Cnav>"," 导航标签",[53,136302,136303,136306],{},[93,136304,136305],{},"\u003Carticle>"," 内容标签",[53,136308,136309,136312],{},[93,136310,136311],{},"\u003Csection>"," 定义文档某个区域",[53,136314,136315,136318],{},[93,136316,136317],{},"\u003Caside>"," 侧边栏标签",[53,136320,136321,136324],{},[93,136322,136323],{},"\u003Cfooter>"," 尾部标签",[1445,136326],{"style":126387,"src":136327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[14,136329,136],{},[1114,136331,136332,136335,136338,136341],{},[53,136333,136334],{},"这种语义化标准主要是针对搜索引擎的",[53,136336,136337],{},"这些标签页面中可以经常使用",[53,136339,136340],{},"在IE9中，需要把这些元素转换为块级元素",[53,136342,136343],{},"移动端更喜欢使用这些标签",[67,136345,136347],{"id":136346},"_1412-多媒体标签","14.1.2 多媒体标签",[14,136349,136350,136351,136353,136354,136356],{},"音频 ",[256,136352,28153],{}," 和视频 ",[256,136355,28162],{}," 两个标签",[21982,136358,136360],{"id":136359},"_14121-视频标签-video","14.1.2.1 视频标签- video",[50,136362,136363],{},[53,136364,136365],{},"支持格式：",[1445,136367],{"style":126387,"src":136368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[14,136370,136371],{},"尽量使用MP4，兼容性好",[14,136373,136374],{},"用MP4就可以",[87,136376,136378],{"className":127278,"code":136377,"language":127280,"meta":18,"style":18},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[93,136379,136380],{"__ignoreMap":18},[96,136381,136382,136384,136386,136388,136390,136393,136395,136398,136401,136404,136406,136408],{"class":98,"line":99},[96,136383,1017],{"class":106},[96,136385,28162],{"class":51279},[96,136387,55218],{"class":1946},[96,136389,152],{"class":106},[96,136391,136392],{"class":211},"\"movie.mp4\"",[96,136394,92402],{"class":1946},[96,136396,136397],{"class":1946}," autoplay",[96,136399,136400],{"class":1946}," muted",[96,136402,136403],{"class":1946}," loop",[96,136405,55293],{"class":106},[96,136407,28162],{"class":51279},[96,136409,51286],{"class":106},[50,136411,136412],{"start":19},[53,136413,136414],{},"兼容写法",[14,136416,136417],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[87,136419,136420],{"className":127278,"code":136377,"language":127280,"meta":18,"style":18},[93,136421,136422],{"__ignoreMap":18},[96,136423,136424,136426,136428,136430,136432,136434,136436,136438,136440,136442,136444,136446],{"class":98,"line":99},[96,136425,1017],{"class":106},[96,136427,28162],{"class":51279},[96,136429,55218],{"class":1946},[96,136431,152],{"class":106},[96,136433,136392],{"class":211},[96,136435,92402],{"class":1946},[96,136437,136397],{"class":1946},[96,136439,136400],{"class":1946},[96,136441,136403],{"class":1946},[96,136443,55293],{"class":106},[96,136445,28162],{"class":51279},[96,136447,51286],{"class":106},[14,136449,136450],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[50,136452,136453],{"start":1162},[53,136454,136455],{},"video常用属性",[1445,136457],{"style":126387,"src":136458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[14,136460,136461],{},"poster属性后面是跟的等待加载图片的地址",[87,136463,136464],{"className":127278,"code":134033,"language":127280,"meta":18,"style":18},[93,136465,136466],{"__ignoreMap":18},[96,136467,136468,136470,136472,136474,136476,136478,136480,136482,136484,136486,136488,136490],{"class":98,"line":99},[96,136469,1017],{"class":106},[96,136471,1445],{"class":51279},[96,136473,55218],{"class":1946},[96,136475,152],{"class":106},[96,136477,134048],{"class":211},[96,136479,55226],{"class":1946},[96,136481,152],{"class":106},[96,136483,134055],{"class":211},[96,136485,134058],{"class":1946},[96,136487,152],{"class":106},[96,136489,134063],{"class":211},[96,136491,51286],{"class":106},[14,136493,136494],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[87,136496,136498],{"className":126531,"code":136497,"language":126533,"meta":18,"style":18},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[93,136499,136500,136505,136511,136535,136540,136545],{"__ignoreMap":18},[96,136501,136502],{"class":98,"line":99},[96,136503,136504],{"class":165},"\u002F* 2D 位移 *\u002F\n",[96,136506,136507,136509],{"class":98,"line":19},[96,136508,51590],{"class":51279},[96,136510,15556],{"class":106},[96,136512,136513,136516,136518,136521,136523,136525,136527,136529,136531,136533],{"class":98,"line":1162},[96,136514,136515],{"class":155},"  transform",[96,136517,51416],{"class":106},[96,136519,136520],{"class":155},"translate",[96,136522,107],{"class":106},[96,136524,418],{"class":155},[96,136526,51471],{"class":102},[96,136528,12419],{"class":106},[96,136530,763],{"class":155},[96,136532,51471],{"class":102},[96,136534,2702],{"class":106},[96,136536,136537],{"class":98,"line":1177},[96,136538,136539],{"class":165},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[96,136541,136542],{"class":98,"line":1183},[96,136543,136544],{"class":165},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[96,136546,136547],{"class":98,"line":1197},[96,136548,1548],{"class":106},[14,136550,136551],{},"muted:自动静音属性",[21982,136553,136555],{"id":136554},"_14122-音频标签audio","14.1.2.2 音频标签audio",[50,136557,136558],{},[53,136559,136560],{},"基本使用",[14,136562,136563,136564,136569,136570],{},"当前 ",[256,136565,136566],{},[93,136567,136568],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[256,136571,136572],{},"mp3格式",[1445,136574],{"style":126387,"src":136575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[50,136577,136578],{"start":19},[53,136579,136414],{},[87,136581,136582],{"className":127278,"code":136377,"language":127280,"meta":18,"style":18},[93,136583,136584],{"__ignoreMap":18},[96,136585,136586,136588,136590,136592,136594,136596,136598,136600,136602,136604,136606,136608],{"class":98,"line":99},[96,136587,1017],{"class":106},[96,136589,28162],{"class":51279},[96,136591,55218],{"class":1946},[96,136593,152],{"class":106},[96,136595,136392],{"class":211},[96,136597,92402],{"class":1946},[96,136599,136397],{"class":1946},[96,136601,136400],{"class":1946},[96,136603,136403],{"class":1946},[96,136605,55293],{"class":106},[96,136607,28162],{"class":51279},[96,136609,51286],{"class":106},[14,136611,136612],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[50,136614,136615],{"start":1162},[53,136616,136617],{},"常用属性",[1445,136619],{"style":126387,"src":136620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[87,136622,136623],{"className":127278,"code":136377,"language":127280,"meta":18,"style":18},[93,136624,136625],{"__ignoreMap":18},[96,136626,136627,136629,136631,136633,136635,136637,136639,136641,136643,136645,136647,136649],{"class":98,"line":99},[96,136628,1017],{"class":106},[96,136630,28162],{"class":51279},[96,136632,55218],{"class":1946},[96,136634,152],{"class":106},[96,136636,136392],{"class":211},[96,136638,92402],{"class":1946},[96,136640,136397],{"class":1946},[96,136642,136400],{"class":1946},[96,136644,136403],{"class":1946},[96,136646,55293],{"class":106},[96,136648,28162],{"class":51279},[96,136650,51286],{"class":106},[14,136652,136653],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[21982,136655,136657],{"id":136656},"_14123-总结","14.1.2.3 总结",[1114,136659,136660,136663,136666,136669,136672],{},[53,136661,136662],{},"音频标签和视频标签使用方式基本一致",[53,136664,136665],{},"浏览器支持情况不同",[53,136667,136668],{},"谷歌浏览器把音频和视频自动播放禁止了",[53,136670,136671],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[53,136673,136674],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[67,136676,136678],{"id":136677},"_1413-表单元素","14.1.3 表单元素",[21982,136680,136682],{"id":136681},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[1445,136684],{"style":126387,"src":136685},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[87,136687,136689],{"className":127278,"code":136688,"language":127280,"meta":18,"style":18},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[93,136690,136691],{"__ignoreMap":18},[96,136692,136693,136695,136697,136699,136701,136703,136705,136707,136710,136712,136714,136717],{"class":98,"line":99},[96,136694,1017],{"class":106},[96,136696,53800],{"class":51279},[96,136698,53803],{"class":1946},[96,136700,152],{"class":106},[96,136702,62678],{"class":211},[96,136704,14904],{"class":1946},[96,136706,152],{"class":106},[96,136708,136709],{"class":211},"\"username\"",[96,136711,60999],{"class":1946},[96,136713,152],{"class":106},[96,136715,136716],{"class":211},"\"请输入用户名\"",[96,136718,51286],{"class":106},[1445,136720],{"style":126387,"src":136721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[21982,136723,136725],{"id":136724},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[1445,136727],{"style":126387,"src":136728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[14,136730,136731],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[14,136733,136734],{},"快捷操作：",[1445,136736],{"style":126387,"src":136737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[14,136739,136740],{},"例子1：",[87,136742,136744],{"className":127278,"code":136743,"language":127280,"meta":18,"style":18},"\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",[93,136745,136746,136769,136796,136825,136844],{"__ignoreMap":18},[96,136747,136748,136750,136752,136754,136756,136759,136762,136764,136767],{"class":98,"line":99},[96,136749,1017],{"class":106},[96,136751,66604],{"class":51279},[96,136753,66607],{"class":1946},[96,136755,152],{"class":106},[96,136757,136758],{"class":211},"\"\u002Fsubmit\"",[96,136760,136761],{"class":1946}," method",[96,136763,152],{"class":106},[96,136765,136766],{"class":211},"\"post\"",[96,136768,51286],{"class":106},[96,136770,136771,136773,136775,136777,136779,136781,136783,136785,136787,136789,136791,136794],{"class":98,"line":19},[96,136772,52123],{"class":106},[96,136774,53800],{"class":51279},[96,136776,53803],{"class":1946},[96,136778,152],{"class":106},[96,136780,62678],{"class":211},[96,136782,14904],{"class":1946},[96,136784,152],{"class":106},[96,136786,136709],{"class":211},[96,136788,60999],{"class":1946},[96,136790,152],{"class":106},[96,136792,136793],{"class":211},"\"用户名\"",[96,136795,51286],{"class":106},[96,136797,136798,136800,136802,136804,136806,136809,136811,136813,136816,136818,136820,136823],{"class":98,"line":1162},[96,136799,52123],{"class":106},[96,136801,53800],{"class":51279},[96,136803,53803],{"class":1946},[96,136805,152],{"class":106},[96,136807,136808],{"class":211},"\"password\"",[96,136810,14904],{"class":1946},[96,136812,152],{"class":106},[96,136814,136815],{"class":211},"\"pwd\"",[96,136817,60999],{"class":1946},[96,136819,152],{"class":106},[96,136821,136822],{"class":211},"\"密码\"",[96,136824,51286],{"class":106},[96,136826,136827,136829,136831,136833,136835,136837,136840,136842],{"class":98,"line":1177},[96,136828,52123],{"class":106},[96,136830,53866],{"class":51279},[96,136832,53803],{"class":1946},[96,136834,152],{"class":106},[96,136836,66627],{"class":211},[96,136838,136839],{"class":106},">提交\u003C\u002F",[96,136841,53866],{"class":51279},[96,136843,51286],{"class":106},[96,136845,136846,136848,136850],{"class":98,"line":1183},[96,136847,51764],{"class":106},[96,136849,66604],{"class":51279},[96,136851,51286],{"class":106},[1445,136853],{"style":126387,"src":136854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[14,136856,136857],{},"value是表单域的内容",[14,136859,136860],{},"例子2：",[87,136862,136863],{"className":127278,"code":136743,"language":127280,"meta":18,"style":18},[93,136864,136865,136885,136911,136937,136955],{"__ignoreMap":18},[96,136866,136867,136869,136871,136873,136875,136877,136879,136881,136883],{"class":98,"line":99},[96,136868,1017],{"class":106},[96,136870,66604],{"class":51279},[96,136872,66607],{"class":1946},[96,136874,152],{"class":106},[96,136876,136758],{"class":211},[96,136878,136761],{"class":1946},[96,136880,152],{"class":106},[96,136882,136766],{"class":211},[96,136884,51286],{"class":106},[96,136886,136887,136889,136891,136893,136895,136897,136899,136901,136903,136905,136907,136909],{"class":98,"line":19},[96,136888,52123],{"class":106},[96,136890,53800],{"class":51279},[96,136892,53803],{"class":1946},[96,136894,152],{"class":106},[96,136896,62678],{"class":211},[96,136898,14904],{"class":1946},[96,136900,152],{"class":106},[96,136902,136709],{"class":211},[96,136904,60999],{"class":1946},[96,136906,152],{"class":106},[96,136908,136793],{"class":211},[96,136910,51286],{"class":106},[96,136912,136913,136915,136917,136919,136921,136923,136925,136927,136929,136931,136933,136935],{"class":98,"line":1162},[96,136914,52123],{"class":106},[96,136916,53800],{"class":51279},[96,136918,53803],{"class":1946},[96,136920,152],{"class":106},[96,136922,136808],{"class":211},[96,136924,14904],{"class":1946},[96,136926,152],{"class":106},[96,136928,136815],{"class":211},[96,136930,60999],{"class":1946},[96,136932,152],{"class":106},[96,136934,136822],{"class":211},[96,136936,51286],{"class":106},[96,136938,136939,136941,136943,136945,136947,136949,136951,136953],{"class":98,"line":1177},[96,136940,52123],{"class":106},[96,136942,53866],{"class":51279},[96,136944,53803],{"class":1946},[96,136946,152],{"class":106},[96,136948,66627],{"class":211},[96,136950,136839],{"class":106},[96,136952,53866],{"class":51279},[96,136954,51286],{"class":106},[96,136956,136957,136959,136961],{"class":98,"line":1183},[96,136958,51764],{"class":106},[96,136960,66604],{"class":51279},[96,136962,51286],{"class":106},[1445,136964],{"style":126387,"src":136965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[38,136967,136969],{"id":136968},"_142-css新特性","14.2 CSS新特性",[67,136971,136973],{"id":136972},"_1421-新增选择器","14.2.1 新增选择器",[21982,136975,136977],{"id":136976},"_14211-属性选择器","14.2.1.1 属性选择器",[1445,136979],{"style":126387,"src":136980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[87,136982,136984],{"className":126531,"code":136983,"language":126533,"meta":18,"style":18},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[93,136985,136986,137001,137017],{"__ignoreMap":18},[96,136987,136988,136990,136992,136994,136996,136998],{"class":98,"line":99},[96,136989,53800],{"class":51279},[96,136991,997],{"class":106},[96,136993,103086],{"class":1946},[96,136995,152],{"class":102},[96,136997,62678],{"class":211},[96,136999,137000],{"class":106},"] {\n",[96,137002,137003,137005,137007,137009,137011,137013,137015],{"class":98,"line":19},[96,137004,70875],{"class":155},[96,137006,51416],{"class":106},[96,137008,324],{"class":155},[96,137010,51471],{"class":102},[96,137012,51500],{"class":155},[96,137014,130111],{"class":155},[96,137016,1273],{"class":106},[96,137018,137019],{"class":98,"line":1162},[96,137020,1548],{"class":106},[1445,137022],{"style":126387,"src":137023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[14,137025,136],{},[1114,137027,137028,137031,137034,137037],{},[53,137029,137030],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[53,137032,137033],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[53,137035,137036],{},"属性选择器也可以选择出来自定义的属性",[53,137038,137039,137041],{},[256,137040,9009],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[21982,137043,137045],{"id":137044},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[1445,137047],{"style":126387,"src":137048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[50,137050,137051],{},[53,137052,137053],{},"fist-child",[87,137055,137057],{"className":126531,"code":137056,"language":126533,"meta":18,"style":18},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[93,137058,137059,137064,137079,137099,137117],{"__ignoreMap":18},[96,137060,137061],{"class":98,"line":99},[96,137062,137063],{"class":165},"\u002F* 属性选择器 *\u002F\n",[96,137065,137066,137068,137070,137072,137074,137076],{"class":98,"line":19},[96,137067,53800],{"class":51279},[96,137069,997],{"class":106},[96,137071,103086],{"class":1946},[96,137073,152],{"class":102},[96,137075,62678],{"class":211},[96,137077,137078],{"class":106},"] { }\n",[96,137080,137081,137083,137085,137087,137090,137093,137096],{"class":98,"line":1162},[96,137082,53800],{"class":51279},[96,137084,997],{"class":106},[96,137086,14678],{"class":1946},[96,137088,137089],{"class":102},"^=",[96,137091,137092],{"class":211},"\"icon\"",[96,137094,137095],{"class":106},"] { }  ",[96,137097,137098],{"class":165},"\u002F* 以 icon 开头 *\u002F\n",[96,137100,137101,137103,137105,137107,137110,137112,137114],{"class":98,"line":1177},[96,137102,53800],{"class":51279},[96,137104,997],{"class":106},[96,137106,14678],{"class":1946},[96,137108,137109],{"class":102},"$=",[96,137111,137092],{"class":211},[96,137113,137095],{"class":106},[96,137115,137116],{"class":165},"\u002F* 以 icon 结尾 *\u002F\n",[96,137118,137119,137121,137123,137125,137128,137130,137132],{"class":98,"line":1183},[96,137120,53800],{"class":51279},[96,137122,997],{"class":106},[96,137124,14678],{"class":1946},[96,137126,137127],{"class":102},"*=",[96,137129,137092],{"class":211},[96,137131,137095],{"class":106},[96,137133,137134],{"class":165},"\u002F* 包含 icon *\u002F\n",[14,137136,137137],{},"ul的第一个儿子文本为红色",[14,137139,137140],{},"一定要在冒号前加空格，不然就是选中所有的了",[87,137142,137144],{"className":126531,"code":137143,"language":126533,"meta":18,"style":18},".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",[93,137145,137146,137152,137162,137166,137170,137175,137188,137201,137217,137234,137251],{"__ignoreMap":18},[96,137147,137148,137150],{"class":98,"line":99},[96,137149,126822],{"class":1946},[96,137151,15556],{"class":106},[96,137153,137154,137156,137158,137160],{"class":98,"line":19},[96,137155,70884],{"class":155},[96,137157,51416],{"class":106},[96,137159,57400],{"class":155},[96,137161,1273],{"class":106},[96,137163,137164],{"class":98,"line":1162},[96,137165,1548],{"class":106},[96,137167,137168],{"class":98,"line":1177},[96,137169,135992],{"class":106},[96,137171,137172],{"class":98,"line":1183},[96,137173,137174],{"class":165},"\u002F* 结构伪类选择器 *\u002F\n",[96,137176,137177,137179,137182,137185],{"class":98,"line":1197},[96,137178,53],{"class":51279},[96,137180,137181],{"class":1946},":first-child",[96,137183,137184],{"class":106}," { }           ",[96,137186,137187],{"class":165},"\u002F* 第一个 *\u002F\n",[96,137189,137190,137192,137195,137198],{"class":98,"line":1203},[96,137191,53],{"class":51279},[96,137193,137194],{"class":1946},":last-child",[96,137196,137197],{"class":106}," { }            ",[96,137199,137200],{"class":165},"\u002F* 最后一个 *\u002F\n",[96,137202,137203,137205,137207,137209,137211,137214],{"class":98,"line":1294},[96,137204,53],{"class":51279},[96,137206,129445],{"class":1946},[96,137208,107],{"class":106},[96,137210,184],{"class":155},[96,137212,137213],{"class":106},") { }          ",[96,137215,137216],{"class":165},"\u002F* 第2个 *\u002F\n",[96,137218,137219,137221,137223,137225,137228,137231],{"class":98,"line":1300},[96,137220,53],{"class":51279},[96,137222,129445],{"class":1946},[96,137224,107],{"class":106},[96,137226,137227],{"class":155},"2n",[96,137229,137230],{"class":106},") { }         ",[96,137232,137233],{"class":165},"\u002F* 偶数 *\u002F\n",[96,137235,137236,137238,137240,137242,137245,137248],{"class":98,"line":1312},[96,137237,53],{"class":51279},[96,137239,129445],{"class":1946},[96,137241,107],{"class":106},[96,137243,137244],{"class":155},"2n+1",[96,137246,137247],{"class":106},") { }       ",[96,137249,137250],{"class":165},"\u002F* 奇数 *\u002F\n",[96,137252,137253,137255,137257,137259,137262,137264],{"class":98,"line":1595},[96,137254,53],{"class":51279},[96,137256,129445],{"class":1946},[96,137258,107],{"class":106},[96,137260,137261],{"class":155},"-n+3",[96,137263,137247],{"class":106},[96,137265,137266],{"class":165},"\u002F* 前3个 *\u002F\n",[51590,137268,137271],{"className":137269},[137270],"example","\n  示例内容\n",[14,137273,137274],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1114,137276,137277],{},[53,137278,137279,137282],{},[93,137280,137281],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[14,137284,137285],{},"也就是说它选择的是熊大",[50,137287,137288],{"start":1197},[53,137289,137290],{},"权重",[87,137292,137294],{"className":126531,"code":137293,"language":126533,"meta":18,"style":18},"\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",[93,137295,137296,137300,137310,137320,137334,137348,137362],{"__ignoreMap":18},[96,137297,137298],{"class":98,"line":99},[96,137299,137174],{"class":165},[96,137301,137302,137304,137306,137308],{"class":98,"line":19},[96,137303,53],{"class":51279},[96,137305,137181],{"class":1946},[96,137307,137184],{"class":106},[96,137309,137187],{"class":165},[96,137311,137312,137314,137316,137318],{"class":98,"line":1162},[96,137313,53],{"class":51279},[96,137315,137194],{"class":1946},[96,137317,137197],{"class":106},[96,137319,137200],{"class":165},[96,137321,137322,137324,137326,137328,137330,137332],{"class":98,"line":1177},[96,137323,53],{"class":51279},[96,137325,129445],{"class":1946},[96,137327,107],{"class":106},[96,137329,184],{"class":155},[96,137331,137213],{"class":106},[96,137333,137216],{"class":165},[96,137335,137336,137338,137340,137342,137344,137346],{"class":98,"line":1183},[96,137337,53],{"class":51279},[96,137339,129445],{"class":1946},[96,137341,107],{"class":106},[96,137343,137227],{"class":155},[96,137345,137230],{"class":106},[96,137347,137233],{"class":165},[96,137349,137350,137352,137354,137356,137358,137360],{"class":98,"line":1197},[96,137351,53],{"class":51279},[96,137353,129445],{"class":1946},[96,137355,107],{"class":106},[96,137357,137244],{"class":155},[96,137359,137247],{"class":106},[96,137361,137250],{"class":165},[96,137363,137364,137366,137368,137370,137372,137374],{"class":98,"line":1203},[96,137365,53],{"class":51279},[96,137367,129445],{"class":1946},[96,137369,107],{"class":106},[96,137371,137261],{"class":155},[96,137373,137247],{"class":106},[96,137375,137266],{"class":165},[14,137377,137378],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[21982,137380,137382],{"id":137381},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[14,137384,137385],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[1445,137387],{"style":126387,"src":137388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[50,137390,137391],{},[53,137392,136],{},[1114,137394,137395,137398,137401,137404,137407,137410],{},[53,137396,137397],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[53,137399,137400],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[53,137402,137403],{},"语法： element::before {}",[53,137405,137406],{},"before 和 after 必须有 content 属性",[53,137408,137409],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[53,137411,137412],{},"伪元素选择器和标签选择器一样，权重为 1",[50,137414,137415],{"start":19},[53,137416,137417],{},"实例",[87,137419,137420],{"className":126531,"code":137293,"language":126533,"meta":18,"style":18},[93,137421,137422,137426,137436,137446,137460,137474,137488],{"__ignoreMap":18},[96,137423,137424],{"class":98,"line":99},[96,137425,137174],{"class":165},[96,137427,137428,137430,137432,137434],{"class":98,"line":19},[96,137429,53],{"class":51279},[96,137431,137181],{"class":1946},[96,137433,137184],{"class":106},[96,137435,137187],{"class":165},[96,137437,137438,137440,137442,137444],{"class":98,"line":1162},[96,137439,53],{"class":51279},[96,137441,137194],{"class":1946},[96,137443,137197],{"class":106},[96,137445,137200],{"class":165},[96,137447,137448,137450,137452,137454,137456,137458],{"class":98,"line":1177},[96,137449,53],{"class":51279},[96,137451,129445],{"class":1946},[96,137453,107],{"class":106},[96,137455,184],{"class":155},[96,137457,137213],{"class":106},[96,137459,137216],{"class":165},[96,137461,137462,137464,137466,137468,137470,137472],{"class":98,"line":1183},[96,137463,53],{"class":51279},[96,137465,129445],{"class":1946},[96,137467,107],{"class":106},[96,137469,137227],{"class":155},[96,137471,137230],{"class":106},[96,137473,137233],{"class":165},[96,137475,137476,137478,137480,137482,137484,137486],{"class":98,"line":1197},[96,137477,53],{"class":51279},[96,137479,129445],{"class":1946},[96,137481,107],{"class":106},[96,137483,137244],{"class":155},[96,137485,137247],{"class":106},[96,137487,137250],{"class":165},[96,137489,137490,137492,137494,137496,137498,137500],{"class":98,"line":1203},[96,137491,53],{"class":51279},[96,137493,129445],{"class":1946},[96,137495,107],{"class":106},[96,137497,137261],{"class":155},[96,137499,137247],{"class":106},[96,137501,137266],{"class":165},[1445,137503],{"style":126387,"src":137504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[50,137506,137507],{"start":1162},[53,137508,137509],{},"使用场景1",[1445,137511],{"style":126387,"src":137512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[14,137514,137515],{},"不需要再加盒子来整红色那部分了",[87,137517,137519],{"className":126531,"code":137518,"language":126533,"meta":18,"style":18},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[93,137520,137521,137526,137535,137546,137556,137560,137569,137580,137590],{"__ignoreMap":18},[96,137522,137523],{"class":98,"line":99},[96,137524,137525],{"class":165},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[96,137527,137528,137530,137533],{"class":98,"line":19},[96,137529,51590],{"class":51279},[96,137531,137532],{"class":1946},"::before",[96,137534,15556],{"class":106},[96,137536,137537,137540,137542,137544],{"class":98,"line":1162},[96,137538,137539],{"class":155},"  content",[96,137541,51416],{"class":106},[96,137543,7636],{"class":211},[96,137545,1273],{"class":106},[96,137547,137548,137550,137552,137554],{"class":98,"line":1177},[96,137549,128147],{"class":155},[96,137551,51416],{"class":106},[96,137553,60848],{"class":155},[96,137555,1273],{"class":106},[96,137557,137558],{"class":98,"line":1183},[96,137559,1548],{"class":106},[96,137561,137562,137564,137567],{"class":98,"line":1197},[96,137563,51590],{"class":51279},[96,137565,137566],{"class":1946},"::after",[96,137568,15556],{"class":106},[96,137570,137571,137573,137575,137578],{"class":98,"line":1203},[96,137572,137539],{"class":155},[96,137574,51416],{"class":106},[96,137576,137577],{"class":211},"\"→\"",[96,137579,1273],{"class":106},[96,137581,137582,137584,137586,137588],{"class":98,"line":1294},[96,137583,70884],{"class":155},[96,137585,51416],{"class":106},[96,137587,62049],{"class":155},[96,137589,1273],{"class":106},[96,137591,137592],{"class":98,"line":1300},[96,137593,1548],{"class":106},[1445,137595],{"style":126387,"src":137596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[14,137598,137599],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[1445,137601],{"style":126387,"src":137602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[14,137604,137605],{},"但是在引用时需要先转义一下",[14,137607,137608],{},"content='\\e930'",[50,137610,137611],{"start":1177},[53,137612,137613],{},"使用场景2",[14,137615,137616],{},"仿土豆效果",[14,137618,137619],{},"通过使用伪元素选择器可以减少body中盒子的数量",[87,137621,137622],{"className":126531,"code":137518,"language":126533,"meta":18,"style":18},[93,137623,137624,137628,137636,137646,137656,137660,137668,137678,137688],{"__ignoreMap":18},[96,137625,137626],{"class":98,"line":99},[96,137627,137525],{"class":165},[96,137629,137630,137632,137634],{"class":98,"line":19},[96,137631,51590],{"class":51279},[96,137633,137532],{"class":1946},[96,137635,15556],{"class":106},[96,137637,137638,137640,137642,137644],{"class":98,"line":1162},[96,137639,137539],{"class":155},[96,137641,51416],{"class":106},[96,137643,7636],{"class":211},[96,137645,1273],{"class":106},[96,137647,137648,137650,137652,137654],{"class":98,"line":1177},[96,137649,128147],{"class":155},[96,137651,51416],{"class":106},[96,137653,60848],{"class":155},[96,137655,1273],{"class":106},[96,137657,137658],{"class":98,"line":1183},[96,137659,1548],{"class":106},[96,137661,137662,137664,137666],{"class":98,"line":1197},[96,137663,51590],{"class":51279},[96,137665,137566],{"class":1946},[96,137667,15556],{"class":106},[96,137669,137670,137672,137674,137676],{"class":98,"line":1203},[96,137671,137539],{"class":155},[96,137673,51416],{"class":106},[96,137675,137577],{"class":211},[96,137677,1273],{"class":106},[96,137679,137680,137682,137684,137686],{"class":98,"line":1294},[96,137681,70884],{"class":155},[96,137683,51416],{"class":106},[96,137685,62049],{"class":155},[96,137687,1273],{"class":106},[96,137689,137690],{"class":98,"line":1300},[96,137691,1548],{"class":106},[1445,137693],{"style":126387,"src":137694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[50,137696,137697],{"start":1183},[53,137698,137699],{},"使用场景3",[14,137701,137702],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[87,137704,137706],{"className":126531,"code":137705,"language":126533,"meta":18,"style":18},".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",[93,137707,137708,137714,137724,137728,137732,137736,137744,137754,137764,137768,137776,137786,137796],{"__ignoreMap":18},[96,137709,137710,137712],{"class":98,"line":99},[96,137711,130379],{"class":1946},[96,137713,15556],{"class":106},[96,137715,137716,137718,137720,137722],{"class":98,"line":19},[96,137717,131011],{"class":155},[96,137719,51416],{"class":106},[96,137721,23721],{"class":155},[96,137723,1273],{"class":106},[96,137725,137726],{"class":98,"line":1162},[96,137727,1548],{"class":106},[96,137729,137730],{"class":98,"line":1177},[96,137731,135992],{"class":106},[96,137733,137734],{"class":98,"line":1183},[96,137735,137525],{"class":165},[96,137737,137738,137740,137742],{"class":98,"line":1197},[96,137739,51590],{"class":51279},[96,137741,137532],{"class":1946},[96,137743,15556],{"class":106},[96,137745,137746,137748,137750,137752],{"class":98,"line":1203},[96,137747,137539],{"class":155},[96,137749,51416],{"class":106},[96,137751,7636],{"class":211},[96,137753,1273],{"class":106},[96,137755,137756,137758,137760,137762],{"class":98,"line":1294},[96,137757,128147],{"class":155},[96,137759,51416],{"class":106},[96,137761,60848],{"class":155},[96,137763,1273],{"class":106},[96,137765,137766],{"class":98,"line":1300},[96,137767,1548],{"class":106},[96,137769,137770,137772,137774],{"class":98,"line":1312},[96,137771,51590],{"class":51279},[96,137773,137566],{"class":1946},[96,137775,15556],{"class":106},[96,137777,137778,137780,137782,137784],{"class":98,"line":1595},[96,137779,137539],{"class":155},[96,137781,51416],{"class":106},[96,137783,137577],{"class":211},[96,137785,1273],{"class":106},[96,137787,137788,137790,137792,137794],{"class":98,"line":1600},[96,137789,70884],{"class":155},[96,137791,51416],{"class":106},[96,137793,62049],{"class":155},[96,137795,1273],{"class":106},[96,137797,137798],{"class":98,"line":1606},[96,137799,1548],{"class":106},[14,137801,137802],{},"div {\nmargin: 0 auto;\n}",[87,137804,137807],{"className":137805,"code":137806,"language":5171},[5169],"\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",[93,137808,137806],{"__ignoreMap":18},[14,137810,137811],{},"如果想让多个元素都发生变化",[14,137813,137814],{},"不能如下操作：",[14,137816,137817],{},"transition: width 2s ease 0.5s;",[14,137819,137820],{},"transition: height 2s ease 0.5s;不对！！！",[14,137822,137823],{},"上方会样式冲突，导致不显示任何过渡效果",[14,137825,137826],{},"使用如下：加逗号隔开",[14,137828,137829],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[14,137831,137832],{},"transition all 2s ease;",[67,137834,137836],{"id":137835},"_1426-过渡练习","14.2.6 过渡练习",[50,137838,137839],{},[53,137840,137841],{},"进度条",[1445,137843],{"style":126387,"src":137844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[87,137846,137848],{"className":126531,"code":137847,"language":126533,"meta":18,"style":18},"div {\n  transition: all 0.3s ease;\n}\n",[93,137849,137850,137856,137874],{"__ignoreMap":18},[96,137851,137852,137854],{"class":98,"line":99},[96,137853,51590],{"class":51279},[96,137855,15556],{"class":106},[96,137857,137858,137861,137863,137865,137868,137870,137872],{"class":98,"line":19},[96,137859,137860],{"class":155},"  transition",[96,137862,51416],{"class":106},[96,137864,28100],{"class":155},[96,137866,137867],{"class":155}," 0.3",[96,137869,802],{"class":102},[96,137871,78659],{"class":155},[96,137873,1273],{"class":106},[96,137875,137876],{"class":98,"line":1162},[96,137877,1548],{"class":106},[50,137879,137880],{"start":19},[53,137881,137882],{},"小米logo",[14,137884,137885],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[87,137887,137889],{"className":126531,"code":137888,"language":126533,"meta":18,"style":18},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[93,137890,137891,137896,137902,137918,137923],{"__ignoreMap":18},[96,137892,137893],{"class":98,"line":99},[96,137894,137895],{"class":165},"\u002F* CSS3 过渡 *\u002F\n",[96,137897,137898,137900],{"class":98,"line":19},[96,137899,51590],{"class":51279},[96,137901,15556],{"class":106},[96,137903,137904,137906,137908,137910,137912,137914,137916],{"class":98,"line":1162},[96,137905,137860],{"class":155},[96,137907,51416],{"class":106},[96,137909,28100],{"class":155},[96,137911,137867],{"class":155},[96,137913,802],{"class":102},[96,137915,78659],{"class":155},[96,137917,1273],{"class":106},[96,137919,137920],{"class":98,"line":1177},[96,137921,137922],{"class":165},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[96,137924,137925],{"class":98,"line":1183},[96,137926,1548],{"class":106},[14,137928,137929],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[5110,137931,137932],{},"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":18,"searchDepth":19,"depth":19,"links":137934},[137935,137940],{"id":136265,"depth":19,"text":136266,"children":137936},[137937,137938,137939],{"id":136269,"depth":1162,"text":136270},{"id":136346,"depth":1162,"text":136347},{"id":136677,"depth":1162,"text":136678},{"id":136968,"depth":19,"text":136969,"children":137941},[137942,137943],{"id":136972,"depth":1162,"text":136973},{"id":137835,"depth":1162,"text":137836},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136257,"description":23361},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":137950,"title":137951,"body":137952,"description":23361,"extension":21,"meta":139696,"navigation":23,"path":139697,"seo":139698,"stem":139699,"__hash__":139700},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":137953,"toc":139677},[137954,137957,137961,137964,137970,137976,137980,137982,137985,137988,137991,137994,137997,138000,138003,138007,138011,138014,138017,138020,138024,138027,138030,138035,138038,138041,138044,138048,138051,138060,138063,138066,138070,138073,138076,138081,138088,138102,138110,138117,138122,138125,138128,138131,138138,138142,138148,138154,138157,138160,138165,138171,138173,138181,138186,138189,138195,138197,138202,138207,138210,138212,138217,138220,138225,138230,138264,138268,138272,138275,138279,138282,138368,138371,138408,138411,138447,138451,138456,138469,138523,138525,138553,138555,138583,138589,138603,138605,138649,138651,138695,138698,138705,138716,138718,138745,138747,138773,138780,138796,138798,138892,138894,138988,138995,138998,139003,139009,139083,139086,139088,139124,139126,139162,139165,139172,139191,139194,139197,139199,139224,139226,139250,139253,139256,139286,139290,139293,139356,139358,139424,139426,139490,139493,139525,139527,139553,139555,139581,139584,139615,139617,139643,139645,139671,139674],[10,137955,137951],{"id":137956},"_15-品优购项目上篇-搭建与公共模块",[38,137958,137960],{"id":137959},"_151-项目规划","15.1 项目规划",[1445,137962],{"style":126387,"src":137963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[14,137965,137966,137969],{},[256,137967,137968],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[14,137971,137972,137975],{},[256,137973,137974],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[38,137977,137979],{"id":137978},"_152-项目介绍","15.2 项目介绍",[14,137981,137968],{},[1445,137983],{"style":126387,"src":137984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[14,137986,137987],{},"主页：",[1445,137989],{"style":126387,"src":137990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[14,137992,137993],{},"列表页：",[1445,137995],{"style":126387,"src":137996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[14,137998,137999],{},"注册页：",[1445,138001],{"style":126387,"src":138002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[38,138004,138006],{"id":138005},"_153-项目搭建工作","15.3 项目搭建工作",[67,138008,138010],{"id":138009},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[1445,138012],{"style":126387,"src":138013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[14,138015,138016],{},"经常更换的图片要放到upload文件夹中",[14,138018,138019],{},"不经常换的放到images文件夹中",[67,138021,138023],{"id":138022},"_1532-创建文件如下","15.3.2 创建文件如下",[1445,138025],{"style":126387,"src":138026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[1445,138028],{"style":126387,"src":138029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[14,138031,138032],{},[256,138033,138034],{},"初始化样式：",[14,138036,138037],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[14,138039,138040],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[14,138042,138043],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[67,138045,138047],{"id":138046},"_1533-项目模块化开发","15.3.3 项目模块化开发",[14,138049,138050],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[14,138052,138053,138054,138059],{},"这里最典型的应用就是 ",[256,138055,138056],{},[93,138057,138058],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[1445,138061],{"style":126387,"src":138062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[14,138064,138065],{},"通过link方法来引入",[67,138067,138069],{"id":138068},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[1445,138071],{"style":126387,"src":138072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[14,138074,138075],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[50,138077,138078],{},[53,138079,138080],{},"制作favicon图标",[14,138082,138083,138084,138087],{},"①把品优购图标切成 ",[93,138085,138086],{},"png"," 图片",[14,138089,138090,138091,138093,138094,138097,138098],{},"②把 ",[93,138092,138086],{}," 图片转换为 ",[93,138095,138096],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[345,138099,138100],{"href":138100,"rel":138101},"http:\u002F\u002Fwww.bitbug.net\u002F",[23850],[50,138103,138104,138107],{"start":19},[53,138105,138106],{},"favicon图标放到网站根目录下",[53,138108,138109],{},"HTML页面引入favicon",[14,138111,138112,138113,138116],{},"在html 页面里面的 ",[93,138114,138115],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[14,138118,138119],{},[93,138120,138121],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[14,138123,138124],{},"复制这行代码或者在生成这个的网站进行复制",[1445,138126],{"style":126387,"src":138127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[14,138129,138130],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[14,138132,138133,138134],{},"例如:",[345,138135,138136],{"href":138136,"rel":138137},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[23850],[67,138139,138141],{"id":138140},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[14,138143,138144,138147],{},[256,138145,138146],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[14,138149,138150,138153],{},[256,138151,138152],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[14,138155,138156],{},"页面必须有三个标签用来符合 SEO 优化",[1445,138158],{"style":126387,"src":138159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[50,138161,138162],{},[53,138163,138164],{},"title网站标题",[14,138166,138167,138170],{},[256,138168,138169],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[14,138172,68769],{},[1114,138174,138175,138178],{},[53,138176,138177],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[53,138179,138180],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[50,138182,138183],{"start":19},[53,138184,138185],{},"description网站描述",[14,138187,138188],{},"简要说明我们网站主要是做什么的",[14,138190,138191,138194],{},[256,138192,138193],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[14,138196,68769],{},[14,138198,138199],{},[93,138200,138201],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[50,138203,138204],{"start":1162},[53,138205,138206],{},"keywords关键词",[14,138208,138209],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[14,138211,68769],{},[14,138213,138214],{},[93,138215,138216],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[14,138218,138219],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[14,138221,138222],{},[256,138223,138224],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[50,138226,138227],{"start":1177},[53,138228,138229],{},"代码总结",[87,138231,138232],{"className":127278,"code":130635,"language":127280,"meta":18,"style":18},[93,138233,138234,138238,138252,138256],{"__ignoreMap":18},[96,138235,138236],{"class":98,"line":99},[96,138237,130642],{"class":165},[96,138239,138240,138242,138244,138246,138248,138250],{"class":98,"line":19},[96,138241,1017],{"class":106},[96,138243,51590],{"class":51279},[96,138245,53465],{"class":1946},[96,138247,152],{"class":106},[96,138249,130655],{"class":211},[96,138251,51286],{"class":106},[96,138253,138254],{"class":98,"line":1162},[96,138255,130662],{"class":106},[96,138257,138258,138260,138262],{"class":98,"line":1177},[96,138259,51764],{"class":106},[96,138261,51590],{"class":51279},[96,138263,51286],{"class":106},[38,138265,138267],{"id":138266},"_154-项目公共部分制作","15.4 项目公共部分制作",[67,138269,138271],{"id":138270},"_1541-常用模块类命名","15.4.1 常用模块类命名",[1445,138273],{"style":126387,"src":138274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[67,138276,138278],{"id":138277},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[14,138280,138281],{},"布局思路：",[1114,138283,138284,138287,138290,138312,138345],{},[53,138285,138286],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[53,138288,138289],{},"里面包含版心的盒子",[53,138291,138292,138293],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1114,138294,138295,138303,138309],{},[53,138296,138297,138298,21484,138300,138302],{},"1 号盒子 里面包含一个",[93,138299,1114],{},[93,138301,1114],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[53,138304,138305,138306,138308],{},"里面的内容是水平排列，所以需要给",[93,138307,53],{},"设置浮动",[53,138310,138311],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[53,138313,138314,138315],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1114,138316,138317,138331,138336],{},[53,138318,138319,138320,21484,138322,138324,138325,138327,138328,138330],{},"2 号盒子 里面包含一个",[93,138321,1114],{},[93,138323,1114],{},"包裹",[93,138326,53],{},"，中间的",[93,138329,1028],{},"可以用样式去设置，也可以用字符 |",[53,138332,138333,138334,138308],{},"里面内容水平排列，给",[93,138335,53],{},[53,138337,138338,138339,138341,138342,138344],{},"找到里面所有偶数的 ",[93,138340,53],{}," 设置样式（偶数的 ",[93,138343,53],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[53,138346,138347,138348],{},"需要用到字体图标",[1114,138349,138350,138356,138359,138362,138365],{},[53,138351,138352,138353],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[93,138354,138355],{},"arrow-icon",[53,138357,138358],{},"先要引入字体图片的资源",[53,138360,138361],{},"在样式里面利用 font-face 来进行声明",[53,138363,138364],{},"在伪元素的 content属性设置 图标的编码",[53,138366,138367],{},"给伪元素设置font-family属性",[14,138369,138370],{},"结构实例代码：",[87,138372,138374],{"className":126531,"code":138373,"language":126533,"meta":18,"style":18},"div::before {\n  content: \"\";\n  display: block;\n}\n",[93,138375,138376,138384,138394,138404],{"__ignoreMap":18},[96,138377,138378,138380,138382],{"class":98,"line":99},[96,138379,51590],{"class":51279},[96,138381,137532],{"class":1946},[96,138383,15556],{"class":106},[96,138385,138386,138388,138390,138392],{"class":98,"line":19},[96,138387,137539],{"class":155},[96,138389,51416],{"class":106},[96,138391,7636],{"class":211},[96,138393,1273],{"class":106},[96,138395,138396,138398,138400,138402],{"class":98,"line":1162},[96,138397,128147],{"class":155},[96,138399,51416],{"class":106},[96,138401,60848],{"class":155},[96,138403,1273],{"class":106},[96,138405,138406],{"class":98,"line":1177},[96,138407,1548],{"class":106},[14,138409,138410],{},"样式实例代码：",[87,138412,138413],{"className":126531,"code":138373,"language":126533,"meta":18,"style":18},[93,138414,138415,138423,138433,138443],{"__ignoreMap":18},[96,138416,138417,138419,138421],{"class":98,"line":99},[96,138418,51590],{"class":51279},[96,138420,137532],{"class":1946},[96,138422,15556],{"class":106},[96,138424,138425,138427,138429,138431],{"class":98,"line":19},[96,138426,137539],{"class":155},[96,138428,51416],{"class":106},[96,138430,7636],{"class":211},[96,138432,1273],{"class":106},[96,138434,138435,138437,138439,138441],{"class":98,"line":1162},[96,138436,128147],{"class":155},[96,138438,51416],{"class":106},[96,138440,60848],{"class":155},[96,138442,1273],{"class":106},[96,138444,138445],{"class":98,"line":1177},[96,138446,1548],{"class":106},[67,138448,138450],{"id":138449},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1114,138452,138453],{},[53,138454,138455],{},"header 盒子必须要有高度",[14,138457,138458,138459,138461,138462],{},"1 号盒子是 ",[93,138460,131543],{}," 标志定位，在正常开发过程中， ",[256,138463,138464,138465,138468],{},"logo的布局其实是有讲究的，需要进行 ",[93,138466,138467],{},"logoSEO","的优化 （★★★）",[1114,138470,138471,138479,138487,138514],{},[53,138472,138473,138475,138476,138478],{},[93,138474,131543],{}," 里面首先放一个 ",[93,138477,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[53,138480,138481,138483,138484,138486],{},[93,138482,10],{}," 里面再放一个链接，可以返回首页的，把 ",[93,138485,131543],{}," 的背景图片给链接即可",[53,138488,138489,138490],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1114,138491,138492,138507],{},[53,138493,138494,138495,138498,138499,138502,138503,138506],{},"方法1：",[93,138496,138497],{},"text-indent"," 移到盒子外面（",[93,138500,138501],{},"text-indent: -9999px",") ，然后 ",[93,138504,138505],{},"overflow:hidden"," ，淘宝的做法",[53,138508,138509,138510,138513],{},"方法2：直接给 ",[93,138511,138512],{},"font-size: 0;"," 就看不到文字了，京东的做法",[53,138515,138516,138517,138519,138520,138522],{},"最后给链接一个 ",[93,138518,51386],{}," 属性，这样鼠标放到 ",[93,138521,131543],{}," 上就可以看到提示文字了",[14,138524,138370],{},[87,138526,138527],{"className":127278,"code":131764,"language":127280,"meta":18,"style":18},[93,138528,138529],{"__ignoreMap":18},[96,138530,138531,138533,138535,138537,138539,138541,138543,138545,138547,138549,138551],{"class":98,"line":99},[96,138532,1017],{"class":106},[96,138534,345],{"class":51279},[96,138536,61036],{"class":1946},[96,138538,152],{"class":106},[96,138540,131779],{"class":211},[96,138542,131782],{"class":1946},[96,138544,152],{"class":106},[96,138546,131787],{"class":211},[96,138548,131790],{"class":106},[96,138550,345],{"class":51279},[96,138552,51286],{"class":106},[14,138554,138410],{},[87,138556,138557],{"className":127278,"code":131764,"language":127280,"meta":18,"style":18},[93,138558,138559],{"__ignoreMap":18},[96,138560,138561,138563,138565,138567,138569,138571,138573,138575,138577,138579,138581],{"class":98,"line":99},[96,138562,1017],{"class":106},[96,138564,345],{"class":51279},[96,138566,61036],{"class":1946},[96,138568,152],{"class":106},[96,138570,131779],{"class":211},[96,138572,131782],{"class":1946},[96,138574,152],{"class":106},[96,138576,131787],{"class":211},[96,138578,131790],{"class":106},[96,138580,345],{"class":51279},[96,138582,51286],{"class":106},[14,138584,138585,138586,138588],{},"2 号盒子是 ",[93,138587,131556],{}," 搜索模块定位",[1114,138590,138591,138594,138597,138600],{},[53,138592,138593],{},"search盒子利用定位的方式放在对应的位置",[53,138595,138596],{},"search盒子设置绝对定位，header盒子设置相对定位",[53,138598,138599],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[53,138601,138602],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[14,138604,138370],{},[87,138606,138607],{"className":126531,"code":131851,"language":126533,"meta":18,"style":18},[93,138608,138609,138631,138635,138645],{"__ignoreMap":18},[96,138610,138611,138613,138615,138617,138619,138621,138623,138625,138627,138629],{"class":98,"line":99},[96,138612,51590],{"class":51279},[96,138614,12419],{"class":106},[96,138616,14],{"class":51279},[96,138618,12419],{"class":106},[96,138620,10],{"class":51279},[96,138622,12419],{"class":106},[96,138624,1114],{"class":51279},[96,138626,12419],{"class":106},[96,138628,53],{"class":51279},[96,138630,15556],{"class":106},[96,138632,138633],{"class":98,"line":19},[96,138634,131880],{"class":165},[96,138636,138637,138639,138641,138643],{"class":98,"line":1162},[96,138638,128147],{"class":155},[96,138640,51416],{"class":106},[96,138642,60848],{"class":155},[96,138644,1273],{"class":106},[96,138646,138647],{"class":98,"line":1177},[96,138648,1548],{"class":106},[14,138650,138410],{},[87,138652,138653],{"className":126531,"code":131851,"language":126533,"meta":18,"style":18},[93,138654,138655,138677,138681,138691],{"__ignoreMap":18},[96,138656,138657,138659,138661,138663,138665,138667,138669,138671,138673,138675],{"class":98,"line":99},[96,138658,51590],{"class":51279},[96,138660,12419],{"class":106},[96,138662,14],{"class":51279},[96,138664,12419],{"class":106},[96,138666,10],{"class":51279},[96,138668,12419],{"class":106},[96,138670,1114],{"class":51279},[96,138672,12419],{"class":106},[96,138674,53],{"class":51279},[96,138676,15556],{"class":106},[96,138678,138679],{"class":98,"line":19},[96,138680,131880],{"class":165},[96,138682,138683,138685,138687,138689],{"class":98,"line":1162},[96,138684,128147],{"class":155},[96,138686,51416],{"class":106},[96,138688,60848],{"class":155},[96,138690,1273],{"class":106},[96,138692,138693],{"class":98,"line":1177},[96,138694,1548],{"class":106},[14,138696,138697],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[14,138699,138700,138701,138704],{},"3 号盒子是 ",[93,138702,138703],{},"hotwords"," 热词模块定位",[1114,138706,138707,138710,138713],{},[53,138708,138709],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[53,138711,138712],{},"给里面所有的a标签设置 左右10px的外边距",[53,138714,138715],{},"给第一个a标签设置文字变红色（#c81623）",[14,138717,138370],{},[87,138719,138721],{"className":126531,"code":138720,"language":126533,"meta":18,"style":18},"div {\n  margin: 0 auto;\n}\n",[93,138722,138723,138729,138741],{"__ignoreMap":18},[96,138724,138725,138727],{"class":98,"line":99},[96,138726,51590],{"class":51279},[96,138728,15556],{"class":106},[96,138730,138731,138733,138735,138737,138739],{"class":98,"line":19},[96,138732,70449],{"class":155},[96,138734,51416],{"class":106},[96,138736,298],{"class":155},[96,138738,51535],{"class":155},[96,138740,1273],{"class":106},[96,138742,138743],{"class":98,"line":1162},[96,138744,1548],{"class":106},[14,138746,138410],{},[87,138748,138749],{"className":126531,"code":138720,"language":126533,"meta":18,"style":18},[93,138750,138751,138757,138769],{"__ignoreMap":18},[96,138752,138753,138755],{"class":98,"line":99},[96,138754,51590],{"class":51279},[96,138756,15556],{"class":106},[96,138758,138759,138761,138763,138765,138767],{"class":98,"line":19},[96,138760,70449],{"class":155},[96,138762,51416],{"class":106},[96,138764,298],{"class":155},[96,138766,51535],{"class":155},[96,138768,1273],{"class":106},[96,138770,138771],{"class":98,"line":1162},[96,138772,1548],{"class":106},[14,138774,138775,138776,138779],{},"4 号盒子是 ",[93,138777,138778],{},"shopcar"," 购物车模块",[1114,138781,138782,138787,138790,138793],{},[53,138783,123314,138784,138786],{},[93,138785,138778],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[53,138788,138789],{},"count 统计部分用绝对定位做",[53,138791,138792],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[53,138794,138795],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[14,138797,138370],{},[87,138799,138800],{"className":126531,"code":131963,"language":126533,"meta":18,"style":18},[93,138801,138802,138806,138820,138824,138838,138842,138856,138860,138874,138878],{"__ignoreMap":18},[96,138803,138804],{"class":98,"line":99},[96,138805,131970],{"class":165},[96,138807,138808,138810,138812,138814,138816,138818],{"class":98,"line":19},[96,138809,131975],{"class":1946},[96,138811,79786],{"class":106},[96,138813,128891],{"class":155},[96,138815,51416],{"class":106},[96,138817,131984],{"class":155},[96,138819,129461],{"class":106},[96,138821,138822],{"class":98,"line":1162},[96,138823,131991],{"class":165},[96,138825,138826,138828,138830,138832,138834,138836],{"class":98,"line":1177},[96,138827,131996],{"class":1946},[96,138829,79786],{"class":106},[96,138831,128891],{"class":155},[96,138833,51416],{"class":106},[96,138835,54743],{"class":155},[96,138837,129461],{"class":106},[96,138839,138840],{"class":98,"line":1183},[96,138841,132011],{"class":165},[96,138843,138844,138846,138848,138850,138852,138854],{"class":98,"line":1197},[96,138845,132016],{"class":1946},[96,138847,79786],{"class":106},[96,138849,128891],{"class":155},[96,138851,51416],{"class":106},[96,138853,54810],{"class":155},[96,138855,129461],{"class":106},[96,138857,138858],{"class":98,"line":1203},[96,138859,132031],{"class":165},[96,138861,138862,138864,138866,138868,138870,138872],{"class":98,"line":1294},[96,138863,132036],{"class":1946},[96,138865,79786],{"class":106},[96,138867,128891],{"class":155},[96,138869,51416],{"class":106},[96,138871,86212],{"class":155},[96,138873,129461],{"class":106},[96,138875,138876],{"class":98,"line":1300},[96,138877,132051],{"class":165},[96,138879,138880,138882,138884,138886,138888,138890],{"class":98,"line":1312},[96,138881,132056],{"class":1946},[96,138883,79786],{"class":106},[96,138885,128891],{"class":155},[96,138887,51416],{"class":106},[96,138889,132065],{"class":155},[96,138891,129461],{"class":106},[14,138893,138410],{},[87,138895,138896],{"className":126531,"code":131963,"language":126533,"meta":18,"style":18},[93,138897,138898,138902,138916,138920,138934,138938,138952,138956,138970,138974],{"__ignoreMap":18},[96,138899,138900],{"class":98,"line":99},[96,138901,131970],{"class":165},[96,138903,138904,138906,138908,138910,138912,138914],{"class":98,"line":19},[96,138905,131975],{"class":1946},[96,138907,79786],{"class":106},[96,138909,128891],{"class":155},[96,138911,51416],{"class":106},[96,138913,131984],{"class":155},[96,138915,129461],{"class":106},[96,138917,138918],{"class":98,"line":1162},[96,138919,131991],{"class":165},[96,138921,138922,138924,138926,138928,138930,138932],{"class":98,"line":1177},[96,138923,131996],{"class":1946},[96,138925,79786],{"class":106},[96,138927,128891],{"class":155},[96,138929,51416],{"class":106},[96,138931,54743],{"class":155},[96,138933,129461],{"class":106},[96,138935,138936],{"class":98,"line":1183},[96,138937,132011],{"class":165},[96,138939,138940,138942,138944,138946,138948,138950],{"class":98,"line":1197},[96,138941,132016],{"class":1946},[96,138943,79786],{"class":106},[96,138945,128891],{"class":155},[96,138947,51416],{"class":106},[96,138949,54810],{"class":155},[96,138951,129461],{"class":106},[96,138953,138954],{"class":98,"line":1203},[96,138955,132031],{"class":165},[96,138957,138958,138960,138962,138964,138966,138968],{"class":98,"line":1294},[96,138959,132036],{"class":1946},[96,138961,79786],{"class":106},[96,138963,128891],{"class":155},[96,138965,51416],{"class":106},[96,138967,86212],{"class":155},[96,138969,129461],{"class":106},[96,138971,138972],{"class":98,"line":1300},[96,138973,132051],{"class":165},[96,138975,138976,138978,138980,138982,138984,138986],{"class":98,"line":1312},[96,138977,132056],{"class":1946},[96,138979,79786],{"class":106},[96,138981,128891],{"class":155},[96,138983,51416],{"class":106},[96,138985,132065],{"class":155},[96,138987,129461],{"class":106},[67,138989,138991,138992,138994],{"id":138990},"_1544-nav导航模块制作","15.4.4 ",[93,138993,53692],{},"导航模块制作",[1445,138996],{"style":126387,"src":138997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[14,138999,139000,139002],{},[93,139001,53692],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[14,139004,139005,139006],{},"1 号盒子左侧浮动，",[93,139007,139008],{},"dropdown",[1114,139010,139011,139021,139029,139035,139043,139053,139061,139072],{},[53,139012,139013,139014,100997,139017,139020],{},"1号盒子有讲究，根据相关性 里面包含 ",[93,139015,139016],{},".dt",[93,139018,139019],{},".dd"," 两个盒子",[53,139022,139023,139025,139026,139028],{},[93,139024,139016],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[93,139027,139019],{}," 挤到下面去了",[53,139030,139031,139032,139034],{},"给 ",[93,139033,139019],{}," 盒子设置宽度 和 高度，以及背景颜色",[53,139036,139031,139037,139039,139040,120216],{},[93,139038,139019],{}," 盒子里面定义 无序列表 （",[93,139041,139042],{},"ul > li > a",[53,139044,139045,139046,139048,139049,139052],{},"每个 ",[93,139047,53],{}," 都有一个高度（",[93,139050,139051],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[53,139054,139031,139055,139057,139058,120216],{},[93,139056,53],{}," 里面的a设置文字大小（",[93,139059,139060],{},"14px",[53,139062,139031,139063,139065,139066,139068,139069,139071],{},[93,139064,53],{}," 设置 ",[93,139067,127692],{},"，当鼠标移入的时候，让",[93,139070,53],{},"的背景变成白色，让里面的文字变成红色",[53,139073,139074,139076,139077,139079,139080,139082],{},[93,139075,53],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[93,139078,53],{},"的右侧，那么给",[93,139081,53],{},"设置相对定位",[14,139084,139085],{},"一定要注意相关性",[14,139087,138370],{},[87,139089,139090],{"className":126531,"code":138373,"language":126533,"meta":18,"style":18},[93,139091,139092,139100,139110,139120],{"__ignoreMap":18},[96,139093,139094,139096,139098],{"class":98,"line":99},[96,139095,51590],{"class":51279},[96,139097,137532],{"class":1946},[96,139099,15556],{"class":106},[96,139101,139102,139104,139106,139108],{"class":98,"line":19},[96,139103,137539],{"class":155},[96,139105,51416],{"class":106},[96,139107,7636],{"class":211},[96,139109,1273],{"class":106},[96,139111,139112,139114,139116,139118],{"class":98,"line":1162},[96,139113,128147],{"class":155},[96,139115,51416],{"class":106},[96,139117,60848],{"class":155},[96,139119,1273],{"class":106},[96,139121,139122],{"class":98,"line":1177},[96,139123,1548],{"class":106},[14,139125,138410],{},[87,139127,139128],{"className":126531,"code":138373,"language":126533,"meta":18,"style":18},[93,139129,139130,139138,139148,139158],{"__ignoreMap":18},[96,139131,139132,139134,139136],{"class":98,"line":99},[96,139133,51590],{"class":51279},[96,139135,137532],{"class":1946},[96,139137,15556],{"class":106},[96,139139,139140,139142,139144,139146],{"class":98,"line":19},[96,139141,137539],{"class":155},[96,139143,51416],{"class":106},[96,139145,7636],{"class":211},[96,139147,1273],{"class":106},[96,139149,139150,139152,139154,139156],{"class":98,"line":1162},[96,139151,128147],{"class":155},[96,139153,51416],{"class":106},[96,139155,60848],{"class":155},[96,139157,1273],{"class":106},[96,139159,139160],{"class":98,"line":1177},[96,139161,1548],{"class":106},[14,139163,139164],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[14,139166,139167,139168,139171],{},"2 号盒子左侧浮动，",[93,139169,139170],{},"navitems"," 导航栏组",[1114,139173,139174,139179,139188],{},[53,139175,139176,139177],{},"里面结构是 ",[93,139178,139042],{},[53,139180,139181,139182,139184,139185,139187],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[93,139183,345],{},"左右的",[93,139186,30862],{},"把两侧撑开",[53,139189,139190],{},"让文字垂直居中（行高等于高度）",[1445,139192],{"style":126387,"src":139193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[14,139195,139196],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[14,139198,138370],{},[87,139200,139202],{"className":126531,"code":139201,"language":126533,"meta":18,"style":18},".box {\n  float: left;\n}\n",[93,139203,139204,139210,139220],{"__ignoreMap":18},[96,139205,139206,139208],{"class":98,"line":99},[96,139207,130379],{"class":1946},[96,139209,15556],{"class":106},[96,139211,139212,139214,139216,139218],{"class":98,"line":19},[96,139213,131011],{"class":155},[96,139215,51416],{"class":106},[96,139217,23721],{"class":155},[96,139219,1273],{"class":106},[96,139221,139222],{"class":98,"line":1162},[96,139223,1548],{"class":106},[14,139225,138410],{},[87,139227,139228],{"className":126531,"code":139201,"language":126533,"meta":18,"style":18},[93,139229,139230,139236,139246],{"__ignoreMap":18},[96,139231,139232,139234],{"class":98,"line":99},[96,139233,130379],{"class":1946},[96,139235,15556],{"class":106},[96,139237,139238,139240,139242,139244],{"class":98,"line":19},[96,139239,131011],{"class":155},[96,139241,51416],{"class":106},[96,139243,23721],{"class":155},[96,139245,1273],{"class":106},[96,139247,139248],{"class":98,"line":1162},[96,139249,1548],{"class":106},[14,139251,139252],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[1445,139254],{"style":126387,"src":139255},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[87,139257,139258],{"className":126531,"code":130688,"language":126533,"meta":18,"style":18},[93,139259,139260,139266,139282],{"__ignoreMap":18},[96,139261,139262,139264],{"class":98,"line":99},[96,139263,51590],{"class":51279},[96,139265,15556],{"class":106},[96,139267,139268,139270,139272,139274,139276,139278,139280],{"class":98,"line":19},[96,139269,70875],{"class":155},[96,139271,51416],{"class":106},[96,139273,324],{"class":155},[96,139275,51471],{"class":102},[96,139277,51500],{"class":155},[96,139279,129923],{"class":155},[96,139281,1273],{"class":106},[96,139283,139284],{"class":98,"line":1162},[96,139285,1548],{"class":106},[67,139287,139289],{"id":139288},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[1445,139291],{"style":126387,"src":139292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1114,139294,139295,139300,139305],{},[53,139296,139297,139299],{},[93,139298,131734],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[53,139301,139302,139304],{},[93,139303,131734],{}," 里面有一个大的版心",[53,139306,139307,139308,139311,139312],{},"版心里面包含 1 号盒子，",[93,139309,139310],{},"mod_service"," 是服务模块，mod 是模块的意思",[1114,139313,139314,139319,139332,139348,139353],{},[53,139315,139031,139316,139318],{},[93,139317,139310],{}," 设置高度（80px）和下边框",[53,139320,139321,139322,139325,139326,139328,139329,139331],{},"在里面定义 ",[93,139323,139324],{},"ul > li"," ,每个",[93,139327,53],{}," 宽度是300px 高度是 50px，给每个",[93,139330,53],{},"设置35px的左内边距",[53,139333,139334,139335,139337,139338,139340,139341,139343,139344,18394,139346,120216],{},"在每个",[93,139336,53],{},"里面，放一个 ",[93,139339,22894],{},"（里面放图标），一个",[93,139342,51590],{},"（里面放",[93,139345,51590],{},[93,139347,14],{},[53,139349,139031,139350,139352],{},[93,139351,22894],{},"设置浮动，让h5与这个div左右排列",[53,139354,139355],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[14,139357,138370],{},[87,139359,139361],{"className":126531,"code":139360,"language":126533,"meta":18,"style":18},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[93,139362,139363,139369,139381,139393,139420],{"__ignoreMap":18},[96,139364,139365,139367],{"class":98,"line":99},[96,139366,134288],{"class":1946},[96,139368,15556],{"class":106},[96,139370,139371,139373,139375,139377,139379],{"class":98,"line":19},[96,139372,70547],{"class":155},[96,139374,51416],{"class":106},[96,139376,807],{"class":155},[96,139378,51471],{"class":102},[96,139380,1273],{"class":106},[96,139382,139383,139385,139387,139389,139391],{"class":98,"line":1162},[96,139384,70767],{"class":155},[96,139386,51416],{"class":106},[96,139388,807],{"class":155},[96,139390,51471],{"class":102},[96,139392,1273],{"class":106},[96,139394,139395,139397,139399,139401,139403,139405,139407,139409,139412,139414,139416,139418],{"class":98,"line":1177},[96,139396,70590],{"class":155},[96,139398,51416],{"class":106},[96,139400,61705],{"class":155},[96,139402,107],{"class":106},[96,139404,134327],{"class":5200},[96,139406,13698],{"class":106},[96,139408,61715],{"class":155},[96,139410,139411],{"class":155}," -10",[96,139413,51471],{"class":102},[96,139415,134346],{"class":155},[96,139417,51471],{"class":102},[96,139419,1273],{"class":106},[96,139421,139422],{"class":98,"line":1183},[96,139423,1548],{"class":106},[14,139425,138410],{},[87,139427,139428],{"className":126531,"code":139360,"language":126533,"meta":18,"style":18},[93,139429,139430,139436,139448,139460,139486],{"__ignoreMap":18},[96,139431,139432,139434],{"class":98,"line":99},[96,139433,134288],{"class":1946},[96,139435,15556],{"class":106},[96,139437,139438,139440,139442,139444,139446],{"class":98,"line":19},[96,139439,70547],{"class":155},[96,139441,51416],{"class":106},[96,139443,807],{"class":155},[96,139445,51471],{"class":102},[96,139447,1273],{"class":106},[96,139449,139450,139452,139454,139456,139458],{"class":98,"line":1162},[96,139451,70767],{"class":155},[96,139453,51416],{"class":106},[96,139455,807],{"class":155},[96,139457,51471],{"class":102},[96,139459,1273],{"class":106},[96,139461,139462,139464,139466,139468,139470,139472,139474,139476,139478,139480,139482,139484],{"class":98,"line":1177},[96,139463,70590],{"class":155},[96,139465,51416],{"class":106},[96,139467,61705],{"class":155},[96,139469,107],{"class":106},[96,139471,134327],{"class":5200},[96,139473,13698],{"class":106},[96,139475,61715],{"class":155},[96,139477,139411],{"class":155},[96,139479,51471],{"class":102},[96,139481,134346],{"class":155},[96,139483,51471],{"class":102},[96,139485,1273],{"class":106},[96,139487,139488],{"class":98,"line":1183},[96,139489,1548],{"class":106},[14,139491,139492],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1114,139494,139495,139498,139504,139510,139522],{},[53,139496,139497],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[53,139499,139500,139501,120216],{},"里面的布局利用 自定义列表来实现（",[93,139502,139503],{},"dl > dt + dd",[53,139505,139031,139506,139509],{},[93,139507,139508],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[53,139511,139031,139512,139515,139516,18394,139518,139521],{},[93,139513,139514],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[93,139517,139514],{},[93,139519,139520],{},"dd","之间有些距离",[53,139523,139524],{},"最后一个 dl 结构和样式不一样，需要单独设置",[14,139526,138370],{},[87,139528,139529],{"className":126531,"code":138720,"language":126533,"meta":18,"style":18},[93,139530,139531,139537,139549],{"__ignoreMap":18},[96,139532,139533,139535],{"class":98,"line":99},[96,139534,51590],{"class":51279},[96,139536,15556],{"class":106},[96,139538,139539,139541,139543,139545,139547],{"class":98,"line":19},[96,139540,70449],{"class":155},[96,139542,51416],{"class":106},[96,139544,298],{"class":155},[96,139546,51535],{"class":155},[96,139548,1273],{"class":106},[96,139550,139551],{"class":98,"line":1162},[96,139552,1548],{"class":106},[14,139554,138410],{},[87,139556,139557],{"className":126531,"code":138720,"language":126533,"meta":18,"style":18},[93,139558,139559,139565,139577],{"__ignoreMap":18},[96,139560,139561,139563],{"class":98,"line":99},[96,139562,51590],{"class":51279},[96,139564,15556],{"class":106},[96,139566,139567,139569,139571,139573,139575],{"class":98,"line":19},[96,139568,70449],{"class":155},[96,139570,51416],{"class":106},[96,139572,298],{"class":155},[96,139574,51535],{"class":155},[96,139576,1273],{"class":106},[96,139578,139579],{"class":98,"line":1162},[96,139580,1548],{"class":106},[14,139582,139583],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1114,139585,139586,139595,139598,139609],{},[53,139587,139588,139589,139591,139592,139594],{},"分为上下两块，上面是 ",[93,139590,131751],{}," 友情链接，下面是 ",[93,139593,131744],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[53,139596,139597],{},"把内容分别复制到相应模块中",[53,139599,139031,139600,139602,139603,139605,139606,139608],{},[93,139601,131751],{}," 设置 15px 的下外边距，给",[93,139604,131751],{}," 里面 的 ",[93,139607,345],{}," 标签设置 左右 3px 的外边距",[53,139610,139611,139612,139614],{},"给",[93,139613,131744],{}," 设置 20px 的行高",[14,139616,138370],{},[87,139618,139619],{"className":126531,"code":138720,"language":126533,"meta":18,"style":18},[93,139620,139621,139627,139639],{"__ignoreMap":18},[96,139622,139623,139625],{"class":98,"line":99},[96,139624,51590],{"class":51279},[96,139626,15556],{"class":106},[96,139628,139629,139631,139633,139635,139637],{"class":98,"line":19},[96,139630,70449],{"class":155},[96,139632,51416],{"class":106},[96,139634,298],{"class":155},[96,139636,51535],{"class":155},[96,139638,1273],{"class":106},[96,139640,139641],{"class":98,"line":1162},[96,139642,1548],{"class":106},[14,139644,138410],{},[87,139646,139647],{"className":126531,"code":138720,"language":126533,"meta":18,"style":18},[93,139648,139649,139655,139667],{"__ignoreMap":18},[96,139650,139651,139653],{"class":98,"line":99},[96,139652,51590],{"class":51279},[96,139654,15556],{"class":106},[96,139656,139657,139659,139661,139663,139665],{"class":98,"line":19},[96,139658,70449],{"class":155},[96,139660,51416],{"class":106},[96,139662,298],{"class":155},[96,139664,51535],{"class":155},[96,139666,1273],{"class":106},[96,139668,139669],{"class":98,"line":1162},[96,139670,1548],{"class":106},[14,139672,139673],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[5110,139675,139676],{},"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":18,"searchDepth":19,"depth":19,"links":139678},[139679,139680,139681,139688],{"id":137959,"depth":19,"text":137960},{"id":137978,"depth":19,"text":137979},{"id":138005,"depth":19,"text":138006,"children":139682},[139683,139684,139685,139686,139687],{"id":138009,"depth":1162,"text":138010},{"id":138022,"depth":1162,"text":138023},{"id":138046,"depth":1162,"text":138047},{"id":138068,"depth":1162,"text":138069},{"id":138140,"depth":1162,"text":138141},{"id":138266,"depth":19,"text":138267,"children":139689},[139690,139691,139692,139693,139695],{"id":138270,"depth":1162,"text":138271},{"id":138277,"depth":1162,"text":138278},{"id":138449,"depth":1162,"text":138450},{"id":138990,"depth":1162,"text":139694},"15.4.4 nav导航模块制作",{"id":139288,"depth":1162,"text":139289},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":137951,"description":23361},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139702,"title":139703,"body":139704,"description":23361,"extension":21,"meta":142106,"navigation":23,"path":142107,"seo":142108,"stem":142109,"__hash__":142110},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139705,"toc":142083},[139706,139709,139713,139717,139729,139732,139735,139738,139749,139751,139775,139777,139801,139806,139809,139811,139847,139849,139885,139888,139893,139896,139899,139902,139932,139939,139942,139952,139954,139988,139991,140025,140031,140048,140050,140086,140088,140124,140129,140154,140156,140182,140184,140208,140215,140218,140282,140284,140326,140328,140368,140375,140380,140382,140412,140414,140444,140448,140451,140458,140470,140472,140498,140500,140524,140527,140529,140553,140559,140569,140571,140601,140603,140633,140640,140681,140683,140719,140721,140757,140761,140764,140767,140770,140776,140781,140784,140807,140810,140834,140837,140861,140866,140869,140872,140875,140878,140881,140955,140957,140987,140989,141019,141022,141025,141057,141061,141065,141079,141088,141091,141096,141098,141192,141194,141288,141311,141313,141337,141339,141363,141370,141373,141383,141385,141409,141414,141422,141424,141454,141459,141499,141501,141527,141529,141555,141559,141562,141567,141570,141574,141582,141589,141597,141599,141629,141631,141661,141669,141672,141675,141677,141707,141709,141739,141742,141747,141749,141773,141775,141799,141802,141887,141889,141913,141915,141939,141943,141945,141969,141971,142005,142009,142023,142026,142031,142034,142039,142042,142072,142080],[10,139707,139703],{"id":139708},"_16-品优购项目下篇-主体与页面开发",[38,139710,139712],{"id":139711},"_161-项目主体模块制作","16.1 项目主体模块制作",[67,139714,139716],{"id":139715},"_1611-首页制作","16.1.1 首页制作",[14,139718,139719,139721,139722,139724,139725,139728],{},[256,139720,102037],{}," 主体模块是 ",[256,139723,74037],{}," 里面专有的，注意需要新的样式文件 ",[256,139726,139727],{},"index.css，"," 就不要写在common.css中了",[1445,139730],{"style":126387,"src":139731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[1445,139733],{"style":126387,"src":139734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[14,139736,139737],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1114,139739,139740,139743,139746],{},[53,139741,139742],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[53,139744,139745],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[53,139747,139748],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[14,139750,138370],{},[87,139752,139753],{"className":126531,"code":139201,"language":126533,"meta":18,"style":18},[93,139754,139755,139761,139771],{"__ignoreMap":18},[96,139756,139757,139759],{"class":98,"line":99},[96,139758,130379],{"class":1946},[96,139760,15556],{"class":106},[96,139762,139763,139765,139767,139769],{"class":98,"line":19},[96,139764,131011],{"class":155},[96,139766,51416],{"class":106},[96,139768,23721],{"class":155},[96,139770,1273],{"class":106},[96,139772,139773],{"class":98,"line":1162},[96,139774,1548],{"class":106},[14,139776,138410],{},[87,139778,139779],{"className":126531,"code":139201,"language":126533,"meta":18,"style":18},[93,139780,139781,139787,139797],{"__ignoreMap":18},[96,139782,139783,139785],{"class":98,"line":99},[96,139784,130379],{"class":1946},[96,139786,15556],{"class":106},[96,139788,139789,139791,139793,139795],{"class":98,"line":19},[96,139790,131011],{"class":155},[96,139792,51416],{"class":106},[96,139794,23721],{"class":155},[96,139796,1273],{"class":106},[96,139798,139799],{"class":98,"line":1162},[96,139800,1548],{"class":106},[50,139802,139803],{},[53,139804,139805],{},"左侧focus模块制作",[1445,139807],{"style":126387,"src":139808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[14,139810,138370],{},[87,139812,139813],{"className":126531,"code":127854,"language":126533,"meta":18,"style":18},[93,139814,139815,139823,139833,139843],{"__ignoreMap":18},[96,139816,139817,139819,139821],{"class":98,"line":99},[96,139818,53800],{"class":51279},[96,139820,61879],{"class":1946},[96,139822,15556],{"class":106},[96,139824,139825,139827,139829,139831],{"class":98,"line":19},[96,139826,127869],{"class":155},[96,139828,51416],{"class":106},[96,139830,54868],{"class":155},[96,139832,1273],{"class":106},[96,139834,139835,139837,139839,139841],{"class":98,"line":1162},[96,139836,70777],{"class":155},[96,139838,51416],{"class":106},[96,139840,54716],{"class":155},[96,139842,1273],{"class":106},[96,139844,139845],{"class":98,"line":1177},[96,139846,1548],{"class":106},[14,139848,138410],{},[87,139850,139851],{"className":126531,"code":127854,"language":126533,"meta":18,"style":18},[93,139852,139853,139861,139871,139881],{"__ignoreMap":18},[96,139854,139855,139857,139859],{"class":98,"line":99},[96,139856,53800],{"class":51279},[96,139858,61879],{"class":1946},[96,139860,15556],{"class":106},[96,139862,139863,139865,139867,139869],{"class":98,"line":19},[96,139864,127869],{"class":155},[96,139866,51416],{"class":106},[96,139868,54868],{"class":155},[96,139870,1273],{"class":106},[96,139872,139873,139875,139877,139879],{"class":98,"line":1162},[96,139874,70777],{"class":155},[96,139876,51416],{"class":106},[96,139878,54716],{"class":155},[96,139880,1273],{"class":106},[96,139882,139883],{"class":98,"line":1177},[96,139884,1548],{"class":106},[14,139886,139887],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[50,139889,139890],{"start":19},[53,139891,139892],{},"右侧newsflash模块制作",[1445,139894],{"style":126387,"src":139895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[14,139897,139898],{},"右侧的模块 分为上中下三个盒子",[14,139900,139901],{},"结构代码：",[87,139903,139904],{"className":127278,"code":134033,"language":127280,"meta":18,"style":18},[93,139905,139906],{"__ignoreMap":18},[96,139907,139908,139910,139912,139914,139916,139918,139920,139922,139924,139926,139928,139930],{"class":98,"line":99},[96,139909,1017],{"class":106},[96,139911,1445],{"class":51279},[96,139913,55218],{"class":1946},[96,139915,152],{"class":106},[96,139917,134048],{"class":211},[96,139919,55226],{"class":1946},[96,139921,152],{"class":106},[96,139923,134055],{"class":211},[96,139925,134058],{"class":1946},[96,139927,152],{"class":106},[96,139929,134063],{"class":211},[96,139931,51286],{"class":106},[14,139933,139934,139935,139938],{},"1 号盒子为 ",[93,139936,139937],{},"news"," 新闻模块 高度为 165px",[1445,139940],{"style":126387,"src":139941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[14,139943,139944,139945,139948,139949],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[93,139946,139947],{},"news-hd","，下面是 ",[93,139950,139951],{},"news-bd",[14,139953,139901],{},[87,139955,139956],{"className":127278,"code":130635,"language":127280,"meta":18,"style":18},[93,139957,139958,139962,139976,139980],{"__ignoreMap":18},[96,139959,139960],{"class":98,"line":99},[96,139961,130642],{"class":165},[96,139963,139964,139966,139968,139970,139972,139974],{"class":98,"line":19},[96,139965,1017],{"class":106},[96,139967,51590],{"class":51279},[96,139969,53465],{"class":1946},[96,139971,152],{"class":106},[96,139973,130655],{"class":211},[96,139975,51286],{"class":106},[96,139977,139978],{"class":98,"line":1162},[96,139979,130662],{"class":106},[96,139981,139982,139984,139986],{"class":98,"line":1177},[96,139983,51764],{"class":106},[96,139985,51590],{"class":51279},[96,139987,51286],{"class":106},[14,139989,139990],{},"样式代码：",[87,139992,139993],{"className":127278,"code":130635,"language":127280,"meta":18,"style":18},[93,139994,139995,139999,140013,140017],{"__ignoreMap":18},[96,139996,139997],{"class":98,"line":99},[96,139998,130642],{"class":165},[96,140000,140001,140003,140005,140007,140009,140011],{"class":98,"line":19},[96,140002,1017],{"class":106},[96,140004,51590],{"class":51279},[96,140006,53465],{"class":1946},[96,140008,152],{"class":106},[96,140010,130655],{"class":211},[96,140012,51286],{"class":106},[96,140014,140015],{"class":98,"line":1162},[96,140016,130662],{"class":106},[96,140018,140019,140021,140023],{"class":98,"line":1177},[96,140020,51764],{"class":106},[96,140022,51590],{"class":51279},[96,140024,51286],{"class":106},[14,140026,140027,140028,140030],{},"上面是",[93,140029,139947],{},"，设置高度是 33px，设置下边框",[1114,140032,140033,140039],{},[53,140034,140035,140036,140038],{},"里面放一个",[93,140037,22894],{}," 标题",[53,140040,140041,140042,140044,140045,140047],{},"放一个a",[93,140043,102672],{},"，内容是 更多，然后让 ",[93,140046,345],{}," 进行右浮动，三角用伪元素设置字体图标就好",[14,140049,139901],{},[87,140051,140052],{"className":126531,"code":138373,"language":126533,"meta":18,"style":18},[93,140053,140054,140062,140072,140082],{"__ignoreMap":18},[96,140055,140056,140058,140060],{"class":98,"line":99},[96,140057,51590],{"class":51279},[96,140059,137532],{"class":1946},[96,140061,15556],{"class":106},[96,140063,140064,140066,140068,140070],{"class":98,"line":19},[96,140065,137539],{"class":155},[96,140067,51416],{"class":106},[96,140069,7636],{"class":211},[96,140071,1273],{"class":106},[96,140073,140074,140076,140078,140080],{"class":98,"line":1162},[96,140075,128147],{"class":155},[96,140077,51416],{"class":106},[96,140079,60848],{"class":155},[96,140081,1273],{"class":106},[96,140083,140084],{"class":98,"line":1177},[96,140085,1548],{"class":106},[14,140087,139990],{},[87,140089,140090],{"className":126531,"code":138373,"language":126533,"meta":18,"style":18},[93,140091,140092,140100,140110,140120],{"__ignoreMap":18},[96,140093,140094,140096,140098],{"class":98,"line":99},[96,140095,51590],{"class":51279},[96,140097,137532],{"class":1946},[96,140099,15556],{"class":106},[96,140101,140102,140104,140106,140108],{"class":98,"line":19},[96,140103,137539],{"class":155},[96,140105,51416],{"class":106},[96,140107,7636],{"class":211},[96,140109,1273],{"class":106},[96,140111,140112,140114,140116,140118],{"class":98,"line":1162},[96,140113,128147],{"class":155},[96,140115,51416],{"class":106},[96,140117,60848],{"class":155},[96,140119,1273],{"class":106},[96,140121,140122],{"class":98,"line":1177},[96,140123,1548],{"class":106},[14,140125,140126,140127],{},"下面是",[93,140128,139951],{},[1114,140130,140131,140139],{},[53,140132,140133,140134,100997,140136,140138],{},"里面包含 ",[93,140135,1114],{},[93,140137,53],{}," 还有链接",[53,140140,139611,140141,140143,140144,140146,140147,140150,140151],{},[93,140142,53],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[93,140145,131197],{}," 2.设置 ",[93,140148,140149],{},"white-space: nowrap;"," 3. 设置 ",[93,140152,140153],{},"text-overflow: ellipsis;",[14,140155,139901],{},[87,140157,140159],{"className":126531,"code":140158,"language":126533,"meta":18,"style":18},"div {\n  overflow: hidden;\n}\n",[93,140160,140161,140167,140178],{"__ignoreMap":18},[96,140162,140163,140165],{"class":98,"line":99},[96,140164,51590],{"class":51279},[96,140166,15556],{"class":106},[96,140168,140169,140172,140174,140176],{"class":98,"line":19},[96,140170,140171],{"class":155},"  overflow",[96,140173,51416],{"class":106},[96,140175,61693],{"class":155},[96,140177,1273],{"class":106},[96,140179,140180],{"class":98,"line":1162},[96,140181,1548],{"class":106},[14,140183,139990],{},[87,140185,140186],{"className":126531,"code":140158,"language":126533,"meta":18,"style":18},[93,140187,140188,140194,140204],{"__ignoreMap":18},[96,140189,140190,140192],{"class":98,"line":99},[96,140191,51590],{"class":51279},[96,140193,15556],{"class":106},[96,140195,140196,140198,140200,140202],{"class":98,"line":19},[96,140197,140171],{"class":155},[96,140199,51416],{"class":106},[96,140201,61693],{"class":155},[96,140203,1273],{"class":106},[96,140205,140206],{"class":98,"line":1162},[96,140207,1548],{"class":106},[14,140209,140210,140211,140214],{},"2 号盒子为 ",[93,140212,140213],{},"lifeservice"," 生活服务模块 高度为 209px",[1445,140216],{"style":126387,"src":140217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1114,140219,140220,140223,140233,140257,140268],{},[53,140221,140222],{},"设置边框（左右下边框）",[53,140224,140225,140226,140229,140230,140232],{},"里面的内容 是 ",[93,140227,140228],{},"ul > 12*li","，给",[93,140231,53],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[53,140234,140235,140236],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1114,140237,140238,140243,140252],{},[53,140239,140240,140242],{},[93,140241,140213],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[53,140244,140245,140246,140248,140249,140251],{},"可以让 ",[93,140247,140213],{}," 里面的 ",[93,140250,1114],{}," 宽度为 252，就可以装的下 4 个 小 li",[53,140253,140254,140256],{},[93,140255,140213],{}," 盒子 overflow 隐藏多余的部分就可以了",[53,140258,116446,140259,140261,140262,140264,140265,140267],{},[93,140260,53],{}," 里面放一个 ",[93,140263,548],{},"（里面放图标），下面的文本用 ",[93,140266,14],{}," 标签包裹",[53,140269,139031,140270,140272,140273,140275,140276,139065,140278,140281],{},[93,140271,548],{}," 设置 24px宽和28px的高（注意 ",[93,140274,548],{}," 是行内元素， 转成行内块），给 ",[93,140277,53],{},[93,140279,140280],{},"text-align:center"," 让里面内容居中显示",[14,140283,139901],{},[87,140285,140287],{"className":126531,"code":140286,"language":126533,"meta":18,"style":18},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[93,140288,140289,140307,140312,140322],{"__ignoreMap":18},[96,140290,140291,140293,140295,140297,140299,140301,140303,140305],{"class":98,"line":99},[96,140292,96],{"class":51279},[96,140294,12419],{"class":106},[96,140296,345],{"class":51279},[96,140298,12419],{"class":106},[96,140300,23538],{"class":51279},[96,140302,12419],{"class":106},[96,140304,256],{"class":51279},[96,140306,15556],{"class":106},[96,140308,140309],{"class":98,"line":19},[96,140310,140311],{"class":165},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[96,140313,140314,140316,140318,140320],{"class":98,"line":1162},[96,140315,128147],{"class":155},[96,140317,51416],{"class":106},[96,140319,128209],{"class":155},[96,140321,1273],{"class":106},[96,140323,140324],{"class":98,"line":1177},[96,140325,1548],{"class":106},[14,140327,139990],{},[87,140329,140330],{"className":126531,"code":140286,"language":126533,"meta":18,"style":18},[93,140331,140332,140350,140354,140364],{"__ignoreMap":18},[96,140333,140334,140336,140338,140340,140342,140344,140346,140348],{"class":98,"line":99},[96,140335,96],{"class":51279},[96,140337,12419],{"class":106},[96,140339,345],{"class":51279},[96,140341,12419],{"class":106},[96,140343,23538],{"class":51279},[96,140345,12419],{"class":106},[96,140347,256],{"class":51279},[96,140349,15556],{"class":106},[96,140351,140352],{"class":98,"line":19},[96,140353,140311],{"class":165},[96,140355,140356,140358,140360,140362],{"class":98,"line":1162},[96,140357,128147],{"class":155},[96,140359,51416],{"class":106},[96,140361,128209],{"class":155},[96,140363,1273],{"class":106},[96,140365,140366],{"class":98,"line":1177},[96,140367,1548],{"class":106},[14,140369,140370,140371,140374],{},"3 号盒子为 ",[93,140372,140373],{},"bargain"," 特价商品",[1114,140376,140377],{},[53,140378,140379],{},"这个比较简单，直接插入一张图片即可",[14,140381,139901],{},[87,140383,140384],{"className":127278,"code":134033,"language":127280,"meta":18,"style":18},[93,140385,140386],{"__ignoreMap":18},[96,140387,140388,140390,140392,140394,140396,140398,140400,140402,140404,140406,140408,140410],{"class":98,"line":99},[96,140389,1017],{"class":106},[96,140391,1445],{"class":51279},[96,140393,55218],{"class":1946},[96,140395,152],{"class":106},[96,140397,134048],{"class":211},[96,140399,55226],{"class":1946},[96,140401,152],{"class":106},[96,140403,134055],{"class":211},[96,140405,134058],{"class":1946},[96,140407,152],{"class":106},[96,140409,134063],{"class":211},[96,140411,51286],{"class":106},[14,140413,139990],{},[87,140415,140416],{"className":127278,"code":134033,"language":127280,"meta":18,"style":18},[93,140417,140418],{"__ignoreMap":18},[96,140419,140420,140422,140424,140426,140428,140430,140432,140434,140436,140438,140440,140442],{"class":98,"line":99},[96,140421,1017],{"class":106},[96,140423,1445],{"class":51279},[96,140425,55218],{"class":1946},[96,140427,152],{"class":106},[96,140429,134048],{"class":211},[96,140431,55226],{"class":1946},[96,140433,152],{"class":106},[96,140435,134055],{"class":211},[96,140437,134058],{"class":1946},[96,140439,152],{"class":106},[96,140441,134063],{"class":211},[96,140443,51286],{"class":106},[67,140445,140447],{"id":140446},"_1612-推荐模块制作","16.1.2 推荐模块制作",[1445,140449],{"style":126387,"src":140450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[14,140452,140453,140454,140457],{},"大盒子 ",[93,140455,140456],{},"recom"," 推荐模块 recommend",[1114,140459,140460],{},[53,140461,140462,140463,140465,140466,140469],{},"给这个 ",[93,140464,140456],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[93,140467,140468],{},"#ebebeb","），设置距离上边 12px",[14,140471,139901],{},[87,140473,140475],{"className":126531,"code":140474,"language":126533,"meta":18,"style":18},"div {\n  background-color: #f0f0f0;\n}\n",[93,140476,140477,140483,140494],{"__ignoreMap":18},[96,140478,140479,140481],{"class":98,"line":99},[96,140480,51590],{"class":51279},[96,140482,15556],{"class":106},[96,140484,140485,140487,140489,140492],{"class":98,"line":19},[96,140486,70857],{"class":155},[96,140488,51416],{"class":106},[96,140490,140491],{"class":155},"#f0f0f0",[96,140493,1273],{"class":106},[96,140495,140496],{"class":98,"line":1162},[96,140497,1548],{"class":106},[14,140499,139990],{},[87,140501,140502],{"className":126531,"code":140474,"language":126533,"meta":18,"style":18},[93,140503,140504,140510,140520],{"__ignoreMap":18},[96,140505,140506,140508],{"class":98,"line":99},[96,140507,51590],{"class":51279},[96,140509,15556],{"class":106},[96,140511,140512,140514,140516,140518],{"class":98,"line":19},[96,140513,70857],{"class":155},[96,140515,51416],{"class":106},[96,140517,140491],{"class":155},[96,140519,1273],{"class":106},[96,140521,140522],{"class":98,"line":1162},[96,140523,1548],{"class":106},[14,140525,140526],{},"里面包含 2 个盒子， 浮动即可",[14,140528,139901],{},[87,140530,140531],{"className":126531,"code":139201,"language":126533,"meta":18,"style":18},[93,140532,140533,140539,140549],{"__ignoreMap":18},[96,140534,140535,140537],{"class":98,"line":99},[96,140536,130379],{"class":1946},[96,140538,15556],{"class":106},[96,140540,140541,140543,140545,140547],{"class":98,"line":19},[96,140542,131011],{"class":155},[96,140544,51416],{"class":106},[96,140546,23721],{"class":155},[96,140548,1273],{"class":106},[96,140550,140551],{"class":98,"line":1162},[96,140552,1548],{"class":106},[14,140554,140555,140556],{},"1 号盒子 ",[93,140557,140558],{},"recom_hd",[1114,140560,140561,140564],{},[53,140562,140563],{},"设置宽度205px，高度163px",[53,140565,140035,140566,140568],{},[93,140567,1445],{},"标签，插入图片即可",[14,140570,139901],{},[87,140572,140573],{"className":127278,"code":134033,"language":127280,"meta":18,"style":18},[93,140574,140575],{"__ignoreMap":18},[96,140576,140577,140579,140581,140583,140585,140587,140589,140591,140593,140595,140597,140599],{"class":98,"line":99},[96,140578,1017],{"class":106},[96,140580,1445],{"class":51279},[96,140582,55218],{"class":1946},[96,140584,152],{"class":106},[96,140586,134048],{"class":211},[96,140588,55226],{"class":1946},[96,140590,152],{"class":106},[96,140592,134055],{"class":211},[96,140594,134058],{"class":1946},[96,140596,152],{"class":106},[96,140598,134063],{"class":211},[96,140600,51286],{"class":106},[14,140602,139990],{},[87,140604,140605],{"className":127278,"code":134033,"language":127280,"meta":18,"style":18},[93,140606,140607],{"__ignoreMap":18},[96,140608,140609,140611,140613,140615,140617,140619,140621,140623,140625,140627,140629,140631],{"class":98,"line":99},[96,140610,1017],{"class":106},[96,140612,1445],{"class":51279},[96,140614,55218],{"class":1946},[96,140616,152],{"class":106},[96,140618,134048],{"class":211},[96,140620,55226],{"class":1946},[96,140622,152],{"class":106},[96,140624,134055],{"class":211},[96,140626,134058],{"class":1946},[96,140628,152],{"class":106},[96,140630,134063],{"class":211},[96,140632,51286],{"class":106},[14,140634,140635,140636,140639],{},"2 号盒子 ",[93,140637,140638],{},"recom_bd"," ，注意里面的小竖线",[1114,140641,140642,140653,140656,140661,140666],{},[53,140643,140644,140645,140647,140648,140650,140651],{},"右侧结构里面放 ",[93,140646,1114],{}," 包含 4个 ",[93,140649,53],{},"，每个li里面包含一个",[93,140652,1445],{},[53,140654,140655],{},"直接利用切片工具把里面的内容当成一张图片",[53,140657,139031,140658,140660],{},[93,140659,53],{}," 设置浮动",[53,140662,139031,140663,140665],{},[93,140664,1445],{}," 设置宽高，宽度 248px，高度 163px",[53,140667,140668,140669,140229,140672,140674,140675,140677,140678],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[93,140670,140671],{},"top 10px",[93,140673,53],{},"设置相对定位（注意，最后一个",[93,140676,53],{},"不用设置伪元素），可以利用 ",[93,140679,140680],{},"nth-child(-n+3){...}",[14,140682,139901],{},[87,140684,140685],{"className":126531,"code":138373,"language":126533,"meta":18,"style":18},[93,140686,140687,140695,140705,140715],{"__ignoreMap":18},[96,140688,140689,140691,140693],{"class":98,"line":99},[96,140690,51590],{"class":51279},[96,140692,137532],{"class":1946},[96,140694,15556],{"class":106},[96,140696,140697,140699,140701,140703],{"class":98,"line":19},[96,140698,137539],{"class":155},[96,140700,51416],{"class":106},[96,140702,7636],{"class":211},[96,140704,1273],{"class":106},[96,140706,140707,140709,140711,140713],{"class":98,"line":1162},[96,140708,128147],{"class":155},[96,140710,51416],{"class":106},[96,140712,60848],{"class":155},[96,140714,1273],{"class":106},[96,140716,140717],{"class":98,"line":1177},[96,140718,1548],{"class":106},[14,140720,139990],{},[87,140722,140723],{"className":126531,"code":138373,"language":126533,"meta":18,"style":18},[93,140724,140725,140733,140743,140753],{"__ignoreMap":18},[96,140726,140727,140729,140731],{"class":98,"line":99},[96,140728,51590],{"class":51279},[96,140730,137532],{"class":1946},[96,140732,15556],{"class":106},[96,140734,140735,140737,140739,140741],{"class":98,"line":19},[96,140736,137539],{"class":155},[96,140738,51416],{"class":106},[96,140740,7636],{"class":211},[96,140742,1273],{"class":106},[96,140744,140745,140747,140749,140751],{"class":98,"line":1162},[96,140746,128147],{"class":155},[96,140748,51416],{"class":106},[96,140750,60848],{"class":155},[96,140752,1273],{"class":106},[96,140754,140755],{"class":98,"line":1177},[96,140756,1548],{"class":106},[67,140758,140760],{"id":140759},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[1445,140762],{"style":126387,"src":140763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[14,140765,140766],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[14,140768,140769],{},"第一楼是家用电器模块： 里面包含两个盒子",[14,140771,140772,140775],{},[93,140773,140774],{},"box_hd"," 制作",[14,140777,140555,140778,140780],{},[93,140779,140774],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[1445,140782],{"style":126387,"src":140783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1114,140785,140786,140791,140796,140799],{},[53,140787,140788,140790],{},[93,140789,140774],{}," 给 30px 的高度，2个像素的下边框",[53,140792,140793,140794],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[93,140795,139042],{},[53,140797,140798],{},"左侧盒左浮动，右侧盒子右浮动",[53,140800,140801,140803,140804,140806],{},[93,140802,345],{},"标签之间的距离用左右的",[93,140805,30862],{},"撑开即可",[14,140808,140809],{},"结构代码",[87,140811,140812],{"className":126531,"code":139201,"language":126533,"meta":18,"style":18},[93,140813,140814,140820,140830],{"__ignoreMap":18},[96,140815,140816,140818],{"class":98,"line":99},[96,140817,130379],{"class":1946},[96,140819,15556],{"class":106},[96,140821,140822,140824,140826,140828],{"class":98,"line":19},[96,140823,131011],{"class":155},[96,140825,51416],{"class":106},[96,140827,23721],{"class":155},[96,140829,1273],{"class":106},[96,140831,140832],{"class":98,"line":1162},[96,140833,1548],{"class":106},[14,140835,140836],{},"样式代码",[87,140838,140839],{"className":126531,"code":139201,"language":126533,"meta":18,"style":18},[93,140840,140841,140847,140857],{"__ignoreMap":18},[96,140842,140843,140845],{"class":98,"line":99},[96,140844,130379],{"class":1946},[96,140846,15556],{"class":106},[96,140848,140849,140851,140853,140855],{"class":98,"line":19},[96,140850,131011],{"class":155},[96,140852,51416],{"class":106},[96,140854,23721],{"class":155},[96,140856,1273],{"class":106},[96,140858,140859],{"class":98,"line":1162},[96,140860,1548],{"class":106},[14,140862,140863,140775],{},[93,140864,140865],{},"box_bd",[14,140867,140868],{},"2 号盒子 box_bd，不要给高度",[1445,140870],{"style":126387,"src":140871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[14,140873,140874],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[14,140876,140877],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[14,140879,140880],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1114,140882,140883,140895,140911],{},[53,140884,140885,140887,140888,140891,140892,140894],{},[93,140886,140865],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[93,140889,140890],{},"tab_content","，在",[93,140893,140890],{}," 里面包裹tab选项卡对应的内容",[53,140896,140897,140898,140901,140902,140904,140905,140907,140908,140910],{},"内容被一个大盒子包裹（",[93,140899,140900],{},"tab_list_item","），里面是 ",[93,140903,1114],{}," 包裹 5个 ",[93,140906,53],{},"，每个",[93,140909,53],{},"设置对应的宽度，然后设置浮动",[53,140912,140913,140914,140916,140917,140919,140920],{},"而这5个",[93,140915,53],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[93,140918,53],{},"设置",[1114,140921,140922,140940,140943],{},[53,140923,140924,140925,140927,140928,140930,140931,140933,140934,140936,140937,140939],{},"第一个小 ",[93,140926,53],{}," 分为上下结构，上面是 ",[93,140929,1114],{}," 包裹 ",[93,140932,53],{}," ，",[93,140935,53],{},"里面包裹 ",[93,140938,345],{},"，下面插入一张图片",[53,140941,140942],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[53,140944,140945,140946,140948,140949,140951,140952,140954],{},"后面的小 ",[93,140947,53],{}," 里面先放一个",[93,140950,345],{},"标签，然后在",[93,140953,345],{},"标签里面插入图片即可",[14,140956,140809],{},[87,140958,140959],{"className":127278,"code":134033,"language":127280,"meta":18,"style":18},[93,140960,140961],{"__ignoreMap":18},[96,140962,140963,140965,140967,140969,140971,140973,140975,140977,140979,140981,140983,140985],{"class":98,"line":99},[96,140964,1017],{"class":106},[96,140966,1445],{"class":51279},[96,140968,55218],{"class":1946},[96,140970,152],{"class":106},[96,140972,134048],{"class":211},[96,140974,55226],{"class":1946},[96,140976,152],{"class":106},[96,140978,134055],{"class":211},[96,140980,134058],{"class":1946},[96,140982,152],{"class":106},[96,140984,134063],{"class":211},[96,140986,51286],{"class":106},[14,140988,140836],{},[87,140990,140991],{"className":127278,"code":134033,"language":127280,"meta":18,"style":18},[93,140992,140993],{"__ignoreMap":18},[96,140994,140995,140997,140999,141001,141003,141005,141007,141009,141011,141013,141015,141017],{"class":98,"line":99},[96,140996,1017],{"class":106},[96,140998,1445],{"class":51279},[96,141000,55218],{"class":1946},[96,141002,152],{"class":106},[96,141004,134048],{"class":211},[96,141006,55226],{"class":1946},[96,141008,152],{"class":106},[96,141010,134055],{"class":211},[96,141012,134058],{"class":1946},[96,141014,152],{"class":106},[96,141016,134063],{"class":211},[96,141018,51286],{"class":106},[14,141020,141021],{},"tab栏切换需求！！！！！！介绍：",[1445,141023],{"style":126387,"src":141024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1114,141026,141027,141035,141041,141044],{},[53,141028,141029,141032,141033],{},[93,141030,141031],{},"tab","栏的布局是 ",[93,141034,139042],{},[53,141036,141037,141038,141040],{},"有多少个",[93,141039,141031],{},"选项卡，那么对应就有多少个内容",[53,141042,141043],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[53,141045,141046,141047,141050,141051,141053,141054,141056],{},"等后面我们学习了",[93,141048,141049],{},"js","之后，我们就会配合",[93,141052,141049],{},"来实现，",[93,141055,141031],{},"栏的切换",[38,141058,141060],{"id":141059},"_162-列表制作","16.2 列表制作",[67,141062,141064],{"id":141063},"_1621-准备工作","16.2.1 准备工作",[1114,141066,141067,141070,141073,141076],{},[53,141068,141069],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[53,141071,141072],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[53,141074,141075],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[53,141077,141078],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[67,141080,141082,141083,100997,141085,141087],{"id":141081},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[93,141084,131536],{},[93,141086,53692],{}," 修改",[1445,141089],{"style":126387,"src":141090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1114,141092,141093],{},[53,141094,141095],{},"秒杀盒子 sk（ second kill ） 定位即可",[14,141097,139901],{},[87,141099,141100],{"className":126531,"code":131963,"language":126533,"meta":18,"style":18},[93,141101,141102,141106,141120,141124,141138,141142,141156,141160,141174,141178],{"__ignoreMap":18},[96,141103,141104],{"class":98,"line":99},[96,141105,131970],{"class":165},[96,141107,141108,141110,141112,141114,141116,141118],{"class":98,"line":19},[96,141109,131975],{"class":1946},[96,141111,79786],{"class":106},[96,141113,128891],{"class":155},[96,141115,51416],{"class":106},[96,141117,131984],{"class":155},[96,141119,129461],{"class":106},[96,141121,141122],{"class":98,"line":1162},[96,141123,131991],{"class":165},[96,141125,141126,141128,141130,141132,141134,141136],{"class":98,"line":1177},[96,141127,131996],{"class":1946},[96,141129,79786],{"class":106},[96,141131,128891],{"class":155},[96,141133,51416],{"class":106},[96,141135,54743],{"class":155},[96,141137,129461],{"class":106},[96,141139,141140],{"class":98,"line":1183},[96,141141,132011],{"class":165},[96,141143,141144,141146,141148,141150,141152,141154],{"class":98,"line":1197},[96,141145,132016],{"class":1946},[96,141147,79786],{"class":106},[96,141149,128891],{"class":155},[96,141151,51416],{"class":106},[96,141153,54810],{"class":155},[96,141155,129461],{"class":106},[96,141157,141158],{"class":98,"line":1203},[96,141159,132031],{"class":165},[96,141161,141162,141164,141166,141168,141170,141172],{"class":98,"line":1294},[96,141163,132036],{"class":1946},[96,141165,79786],{"class":106},[96,141167,128891],{"class":155},[96,141169,51416],{"class":106},[96,141171,86212],{"class":155},[96,141173,129461],{"class":106},[96,141175,141176],{"class":98,"line":1300},[96,141177,132051],{"class":165},[96,141179,141180,141182,141184,141186,141188,141190],{"class":98,"line":1312},[96,141181,132056],{"class":1946},[96,141183,79786],{"class":106},[96,141185,128891],{"class":155},[96,141187,51416],{"class":106},[96,141189,132065],{"class":155},[96,141191,129461],{"class":106},[14,141193,139990],{},[87,141195,141196],{"className":126531,"code":131963,"language":126533,"meta":18,"style":18},[93,141197,141198,141202,141216,141220,141234,141238,141252,141256,141270,141274],{"__ignoreMap":18},[96,141199,141200],{"class":98,"line":99},[96,141201,131970],{"class":165},[96,141203,141204,141206,141208,141210,141212,141214],{"class":98,"line":19},[96,141205,131975],{"class":1946},[96,141207,79786],{"class":106},[96,141209,128891],{"class":155},[96,141211,51416],{"class":106},[96,141213,131984],{"class":155},[96,141215,129461],{"class":106},[96,141217,141218],{"class":98,"line":1162},[96,141219,131991],{"class":165},[96,141221,141222,141224,141226,141228,141230,141232],{"class":98,"line":1177},[96,141223,131996],{"class":1946},[96,141225,79786],{"class":106},[96,141227,128891],{"class":155},[96,141229,51416],{"class":106},[96,141231,54743],{"class":155},[96,141233,129461],{"class":106},[96,141235,141236],{"class":98,"line":1183},[96,141237,132011],{"class":165},[96,141239,141240,141242,141244,141246,141248,141250],{"class":98,"line":1197},[96,141241,132016],{"class":1946},[96,141243,79786],{"class":106},[96,141245,128891],{"class":155},[96,141247,51416],{"class":106},[96,141249,54810],{"class":155},[96,141251,129461],{"class":106},[96,141253,141254],{"class":98,"line":1203},[96,141255,132031],{"class":165},[96,141257,141258,141260,141262,141264,141266,141268],{"class":98,"line":1294},[96,141259,132036],{"class":1946},[96,141261,79786],{"class":106},[96,141263,128891],{"class":155},[96,141265,51416],{"class":106},[96,141267,86212],{"class":155},[96,141269,129461],{"class":106},[96,141271,141272],{"class":98,"line":1300},[96,141273,132051],{"class":165},[96,141275,141276,141278,141280,141282,141284,141286],{"class":98,"line":1312},[96,141277,132056],{"class":1946},[96,141279,79786],{"class":106},[96,141281,128891],{"class":155},[96,141283,51416],{"class":106},[96,141285,132065],{"class":155},[96,141287,129461],{"class":106},[1114,141289,141290,141301],{},[53,141291,141292,141293,141296,141297,100997,141299],{},"1 号盒子左侧浮动 ",[93,141294,141295],{},"sk_list"," 里面包含 ",[93,141298,1114],{},[93,141300,53],{},[53,141302,141303,141304,141296,141307,100997,141309],{},"2 号盒子左侧浮动 ",[93,141305,141306],{},"sk_con",[93,141308,1114],{},[93,141310,53],{},[14,141312,139901],{},[87,141314,141315],{"className":126531,"code":139201,"language":126533,"meta":18,"style":18},[93,141316,141317,141323,141333],{"__ignoreMap":18},[96,141318,141319,141321],{"class":98,"line":99},[96,141320,130379],{"class":1946},[96,141322,15556],{"class":106},[96,141324,141325,141327,141329,141331],{"class":98,"line":19},[96,141326,131011],{"class":155},[96,141328,51416],{"class":106},[96,141330,23721],{"class":155},[96,141332,1273],{"class":106},[96,141334,141335],{"class":98,"line":1162},[96,141336,1548],{"class":106},[14,141338,139990],{},[87,141340,141341],{"className":126531,"code":139201,"language":126533,"meta":18,"style":18},[93,141342,141343,141349,141359],{"__ignoreMap":18},[96,141344,141345,141347],{"class":98,"line":99},[96,141346,130379],{"class":1946},[96,141348,15556],{"class":106},[96,141350,141351,141353,141355,141357],{"class":98,"line":19},[96,141352,131011],{"class":155},[96,141354,51416],{"class":106},[96,141356,23721],{"class":155},[96,141358,1273],{"class":106},[96,141360,141361],{"class":98,"line":1162},[96,141362,1548],{"class":106},[67,141364,141366,141367],{"id":141365},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[93,141368,141369],{},"sk_container",[1445,141371],{"style":126387,"src":141372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1114,141374,141375,141380],{},[53,141376,140555,141377,141379],{},[93,141378,141369],{}," 给宽度 1200，不要给高度",[53,141381,141382],{},"一定不要忘记清除浮动",[14,141384,139901],{},[87,141386,141387],{"className":126531,"code":139201,"language":126533,"meta":18,"style":18},[93,141388,141389,141395,141405],{"__ignoreMap":18},[96,141390,141391,141393],{"class":98,"line":99},[96,141392,130379],{"class":1946},[96,141394,15556],{"class":106},[96,141396,141397,141399,141401,141403],{"class":98,"line":19},[96,141398,131011],{"class":155},[96,141400,51416],{"class":106},[96,141402,23721],{"class":155},[96,141404,1273],{"class":106},[96,141406,141407],{"class":98,"line":1162},[96,141408,1548],{"class":106},[50,141410,141411],{},[53,141412,141413],{},"sk_hd制作",[1114,141415,141416],{},[53,141417,140635,141418,141421],{},[93,141419,141420],{},"sk_hd"," ，插入图片即可",[14,141423,139901],{},[87,141425,141426],{"className":127278,"code":134033,"language":127280,"meta":18,"style":18},[93,141427,141428],{"__ignoreMap":18},[96,141429,141430,141432,141434,141436,141438,141440,141442,141444,141446,141448,141450,141452],{"class":98,"line":99},[96,141431,1017],{"class":106},[96,141433,1445],{"class":51279},[96,141435,55218],{"class":1946},[96,141437,152],{"class":106},[96,141439,134048],{"class":211},[96,141441,55226],{"class":1946},[96,141443,152],{"class":106},[96,141445,134055],{"class":211},[96,141447,134058],{"class":1946},[96,141449,152],{"class":106},[96,141451,134063],{"class":211},[96,141453,51286],{"class":106},[50,141455,141456],{"start":19},[53,141457,141458],{},"sk_bd制作",[1114,141460,141461],{},[53,141462,141463,141464,141467,141468,100997,141470,141472],{},"3 号盒子 ",[93,141465,141466],{},"sk_bd"," ，里面包含很多的 ",[93,141469,1114],{},[93,141471,53],{},[1114,141473,141474,141483],{},[53,141475,141476,141477,141479,141480,141482],{},"当鼠标移入到 ",[93,141478,53],{}," 上面的时候显示红色的边框，在这里先给 ",[93,141481,53],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[53,141484,141485,141486,141488,141489,141491,141492,141495,141496,141498],{},"由于给每个 ",[93,141487,53],{}," 都设置了外边距，导致一行的最后一个 ",[93,141490,53],{}," 掉了下来，在这里我们利用 ",[93,141493,141494],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[93,141497,53],{},"，去掉外边距就好了",[14,141500,139901],{},[87,141502,141503],{"className":126531,"code":138720,"language":126533,"meta":18,"style":18},[93,141504,141505,141511,141523],{"__ignoreMap":18},[96,141506,141507,141509],{"class":98,"line":99},[96,141508,51590],{"class":51279},[96,141510,15556],{"class":106},[96,141512,141513,141515,141517,141519,141521],{"class":98,"line":19},[96,141514,70449],{"class":155},[96,141516,51416],{"class":106},[96,141518,298],{"class":155},[96,141520,51535],{"class":155},[96,141522,1273],{"class":106},[96,141524,141525],{"class":98,"line":1162},[96,141526,1548],{"class":106},[14,141528,139990],{},[87,141530,141531],{"className":126531,"code":138720,"language":126533,"meta":18,"style":18},[93,141532,141533,141539,141551],{"__ignoreMap":18},[96,141534,141535,141537],{"class":98,"line":99},[96,141536,51590],{"class":51279},[96,141538,15556],{"class":106},[96,141540,141541,141543,141545,141547,141549],{"class":98,"line":19},[96,141542,70449],{"class":155},[96,141544,51416],{"class":106},[96,141546,298],{"class":155},[96,141548,51535],{"class":155},[96,141550,1273],{"class":106},[96,141552,141553],{"class":98,"line":1162},[96,141554,1548],{"class":106},[38,141556,141558],{"id":141557},"_163-注册页面制作","16.3 注册页面制作",[1445,141560],{"style":126387,"src":141561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[14,141563,141564,141566],{},[256,141565,9009],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[1445,141568],{"style":126387,"src":141569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[67,141571,141573],{"id":141572},"_1631-准备工作","16.3.1 准备工作",[1114,141575,141576,141579],{},[53,141577,141578],{},"创建register.html，引入 base.css，引入favicon图标",[53,141580,141581],{},"创建register.css ，在html页面进行引入",[67,141583,141585,141586,141588],{"id":141584},"_1632-header-头部实现","16.3.2 ",[93,141587,131536],{}," 头部实现",[1114,141590,141591,141594],{},[53,141592,141593],{},"整个内容用 版心 进行包裹",[53,141595,141596],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[14,141598,139901],{},[87,141600,141601],{"className":127278,"code":134033,"language":127280,"meta":18,"style":18},[93,141602,141603],{"__ignoreMap":18},[96,141604,141605,141607,141609,141611,141613,141615,141617,141619,141621,141623,141625,141627],{"class":98,"line":99},[96,141606,1017],{"class":106},[96,141608,1445],{"class":51279},[96,141610,55218],{"class":1946},[96,141612,152],{"class":106},[96,141614,134048],{"class":211},[96,141616,55226],{"class":1946},[96,141618,152],{"class":106},[96,141620,134055],{"class":211},[96,141622,134058],{"class":1946},[96,141624,152],{"class":106},[96,141626,134063],{"class":211},[96,141628,51286],{"class":106},[14,141630,139990],{},[87,141632,141633],{"className":127278,"code":134033,"language":127280,"meta":18,"style":18},[93,141634,141635],{"__ignoreMap":18},[96,141636,141637,141639,141641,141643,141645,141647,141649,141651,141653,141655,141657,141659],{"class":98,"line":99},[96,141638,1017],{"class":106},[96,141640,1445],{"class":51279},[96,141642,55218],{"class":1946},[96,141644,152],{"class":106},[96,141646,134048],{"class":211},[96,141648,55226],{"class":1946},[96,141650,152],{"class":106},[96,141652,134055],{"class":211},[96,141654,134058],{"class":1946},[96,141656,152],{"class":106},[96,141658,134063],{"class":211},[96,141660,51286],{"class":106},[67,141662,141664,141665,141668],{"id":141663},"_1633-registerarea-主体模块实现","16.3.3 ",[93,141666,141667],{},"registerarea"," 主体模块实现",[1445,141670],{"style":126387,"src":141671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[14,141673,141674],{},"整个大盒子 高度为 522px，设置4个边框",[14,141676,139901],{},[87,141678,141679],{"className":126531,"code":130688,"language":126533,"meta":18,"style":18},[93,141680,141681,141687,141703],{"__ignoreMap":18},[96,141682,141683,141685],{"class":98,"line":99},[96,141684,51590],{"class":51279},[96,141686,15556],{"class":106},[96,141688,141689,141691,141693,141695,141697,141699,141701],{"class":98,"line":19},[96,141690,70875],{"class":155},[96,141692,51416],{"class":106},[96,141694,324],{"class":155},[96,141696,51471],{"class":102},[96,141698,51500],{"class":155},[96,141700,129923],{"class":155},[96,141702,1273],{"class":106},[96,141704,141705],{"class":98,"line":1162},[96,141706,1548],{"class":106},[14,141708,139990],{},[87,141710,141711],{"className":126531,"code":130688,"language":126533,"meta":18,"style":18},[93,141712,141713,141719,141735],{"__ignoreMap":18},[96,141714,141715,141717],{"class":98,"line":99},[96,141716,51590],{"class":51279},[96,141718,15556],{"class":106},[96,141720,141721,141723,141725,141727,141729,141731,141733],{"class":98,"line":19},[96,141722,70875],{"class":155},[96,141724,51416],{"class":106},[96,141726,324],{"class":155},[96,141728,51471],{"class":102},[96,141730,51500],{"class":155},[96,141732,129923],{"class":155},[96,141734,1273],{"class":106},[96,141736,141737],{"class":98,"line":1162},[96,141738,1548],{"class":106},[14,141740,141741],{},"1号盒子 是一个 h3 标签，放标题",[1114,141743,141744],{},[53,141745,141746],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[14,141748,139901],{},[87,141750,141751],{"className":126531,"code":139201,"language":126533,"meta":18,"style":18},[93,141752,141753,141759,141769],{"__ignoreMap":18},[96,141754,141755,141757],{"class":98,"line":99},[96,141756,130379],{"class":1946},[96,141758,15556],{"class":106},[96,141760,141761,141763,141765,141767],{"class":98,"line":19},[96,141762,131011],{"class":155},[96,141764,51416],{"class":106},[96,141766,23721],{"class":155},[96,141768,1273],{"class":106},[96,141770,141771],{"class":98,"line":1162},[96,141772,1548],{"class":106},[14,141774,139990],{},[87,141776,141777],{"className":126531,"code":139201,"language":126533,"meta":18,"style":18},[93,141778,141779,141785,141795],{"__ignoreMap":18},[96,141780,141781,141783],{"class":98,"line":99},[96,141782,130379],{"class":1946},[96,141784,15556],{"class":106},[96,141786,141787,141789,141791,141793],{"class":98,"line":19},[96,141788,131011],{"class":155},[96,141790,51416],{"class":106},[96,141792,23721],{"class":155},[96,141794,1273],{"class":106},[96,141796,141797],{"class":98,"line":1162},[96,141798,1548],{"class":106},[14,141800,141801],{},"2号盒子 里面放注册的内容",[1114,141803,141804,141807,141816,141830,141843,141846,141849,141867,141881],{},[53,141805,141806],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[53,141808,141809,141810,141812,141813,141815],{},"里面的内容利用 ",[93,141811,1114],{}," 包含 ",[93,141814,53],{}," 来实现的（不需要用表格）",[53,141817,139045,141818,141820,141821,141823,141824,141826,141827,141829],{},[93,141819,53],{}," 里面，左侧放 ",[93,141822,33587],{}," 标签， 中间放",[93,141825,53800],{}," 标签， 右侧放 ",[93,141828,96],{}," 提示信息",[53,141831,141832,141833,141835,141836,141838,141839,141842],{},"左侧 ",[93,141834,33587],{},"里面的文字都是右对齐，我们可以给",[93,141837,33587],{},"设置一个宽度（88px），然后利用",[93,141840,141841],{},"text-align"," 来设置右对齐",[53,141844,141845],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[53,141847,141848],{},"右侧 span修饰一下文字颜色",[53,141850,141851,141852],{},"提示信息的样式优化",[1114,141853,141854,141857,141860],{},[53,141855,141856],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[53,141858,141859],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[53,141861,141862,141863,141866],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[93,141864,141865],{},"vertical-algin"," 来设置 图片与文字对齐方式",[53,141868,141869,141870],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1114,141871,141872,141878],{},[53,141873,141874,141875,141877],{},"设置 ",[93,141876,23538],{}," 的 左右 12px 的内边距，设置一下文字颜色",[53,141879,141880],{},"分别设置 背景颜色",[53,141882,141883,141884,141886],{},"同意协议 和 完成注册 都是用 ",[93,141885,53],{}," 进行包裹",[14,141888,139901],{},[87,141890,141891],{"className":126531,"code":140474,"language":126533,"meta":18,"style":18},[93,141892,141893,141899,141909],{"__ignoreMap":18},[96,141894,141895,141897],{"class":98,"line":99},[96,141896,51590],{"class":51279},[96,141898,15556],{"class":106},[96,141900,141901,141903,141905,141907],{"class":98,"line":19},[96,141902,70857],{"class":155},[96,141904,51416],{"class":106},[96,141906,140491],{"class":155},[96,141908,1273],{"class":106},[96,141910,141911],{"class":98,"line":1162},[96,141912,1548],{"class":106},[14,141914,139990],{},[87,141916,141917],{"className":126531,"code":140474,"language":126533,"meta":18,"style":18},[93,141918,141919,141925,141935],{"__ignoreMap":18},[96,141920,141921,141923],{"class":98,"line":99},[96,141922,51590],{"class":51279},[96,141924,15556],{"class":106},[96,141926,141927,141929,141931,141933],{"class":98,"line":19},[96,141928,70857],{"class":155},[96,141930,51416],{"class":106},[96,141932,140491],{"class":155},[96,141934,1273],{"class":106},[96,141936,141937],{"class":98,"line":1162},[96,141938,1548],{"class":106},[67,141940,141942],{"id":141941},"_1634-底部实现","16.3.4 底部实现",[14,141944,139901],{},[87,141946,141947],{"className":126531,"code":140474,"language":126533,"meta":18,"style":18},[93,141948,141949,141955,141965],{"__ignoreMap":18},[96,141950,141951,141953],{"class":98,"line":99},[96,141952,51590],{"class":51279},[96,141954,15556],{"class":106},[96,141956,141957,141959,141961,141963],{"class":98,"line":19},[96,141958,70857],{"class":155},[96,141960,51416],{"class":106},[96,141962,140491],{"class":155},[96,141964,1273],{"class":106},[96,141966,141967],{"class":98,"line":1162},[96,141968,1548],{"class":106},[14,141970,139990],{},[87,141972,141973],{"className":127278,"code":130635,"language":127280,"meta":18,"style":18},[93,141974,141975,141979,141993,141997],{"__ignoreMap":18},[96,141976,141977],{"class":98,"line":99},[96,141978,130642],{"class":165},[96,141980,141981,141983,141985,141987,141989,141991],{"class":98,"line":19},[96,141982,1017],{"class":106},[96,141984,51590],{"class":51279},[96,141986,53465],{"class":1946},[96,141988,152],{"class":106},[96,141990,130655],{"class":211},[96,141992,51286],{"class":106},[96,141994,141995],{"class":98,"line":1162},[96,141996,130662],{"class":106},[96,141998,141999,142001,142003],{"class":98,"line":1177},[96,142000,51764],{"class":106},[96,142002,51590],{"class":51279},[96,142004,51286],{"class":106},[38,142006,142008],{"id":142007},"_164-项目总结","16.4 项目总结",[50,142010,142011,142014,142017,142020],{},[53,142012,142013],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[53,142015,142016],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[53,142018,142019],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[53,142021,142022],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[1445,142024],{"style":126387,"src":142025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[50,142027,142028],{"start":1183},[53,142029,142030],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[1445,142032],{"style":126387,"src":142033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[50,142035,142036],{"start":1197},[53,142037,142038],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[1445,142040],{"style":126387,"src":142041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[87,142043,142044],{"className":127278,"code":136688,"language":127280,"meta":18,"style":18},[93,142045,142046],{"__ignoreMap":18},[96,142047,142048,142050,142052,142054,142056,142058,142060,142062,142064,142066,142068,142070],{"class":98,"line":99},[96,142049,1017],{"class":106},[96,142051,53800],{"class":51279},[96,142053,53803],{"class":1946},[96,142055,152],{"class":106},[96,142057,62678],{"class":211},[96,142059,14904],{"class":1946},[96,142061,152],{"class":106},[96,142063,136709],{"class":211},[96,142065,60999],{"class":1946},[96,142067,152],{"class":106},[96,142069,136716],{"class":211},[96,142071,51286],{"class":106},[50,142073,142074,142077],{"start":1203},[53,142075,142076],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[53,142078,142079],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[5110,142081,142082],{},"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":18,"searchDepth":19,"depth":19,"links":142084},[142085,142090,142097,142105],{"id":139711,"depth":19,"text":139712,"children":142086},[142087,142088,142089],{"id":139715,"depth":1162,"text":139716},{"id":140446,"depth":1162,"text":140447},{"id":140759,"depth":1162,"text":140760},{"id":141059,"depth":19,"text":141060,"children":142091},[142092,142093,142095],{"id":141063,"depth":1162,"text":141064},{"id":141081,"depth":1162,"text":142094},"16.2.2 列表页 header 和 nav 修改",{"id":141365,"depth":1162,"text":142096},"16.2.3 列表页主体 sk_container",{"id":141557,"depth":19,"text":141558,"children":142098},[142099,142100,142102,142104],{"id":141572,"depth":1162,"text":141573},{"id":141584,"depth":1162,"text":142101},"16.3.2 header 头部实现",{"id":141663,"depth":1162,"text":142103},"16.3.3 registerarea 主体模块实现",{"id":141941,"depth":1162,"text":141942},{"id":142007,"depth":19,"text":142008},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139703,"description":23361},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142112,"title":142113,"body":142114,"description":23361,"extension":21,"meta":142222,"navigation":23,"path":142223,"seo":142224,"stem":142225,"__hash__":142226},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142115,"toc":142217},[142116,142119,142123,142126,142129,142138,142147,142151,142156,142163,142181,142184,142187,142190,142193,142196,142199,142202,142205,142208,142211,142214],[10,142117,142113],{"id":142118},"_17-web服务器与网站发布",[38,142120,142122],{"id":142121},"_171-web服务器","17.1 Web服务器",[14,142124,142125],{},"把自己网站上传到服务器上，可以让其他人访问",[1445,142127],{"style":126387,"src":142128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[14,142130,142131,142134,142135],{},[256,142132,142133],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[256,142136,142137],{},"Web 服务器等",[14,142139,142140,142141,100997,142144,25719],{},"根据服务器在网络中所在的位置不同，又可分为 ",[256,142142,142143],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[256,142145,142146],{},"远程服务器",[67,142148,142150],{"id":142149},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[14,142152,142153],{},[256,142154,142155],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[14,142157,142158,142159],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[345,142160,142161],{"href":142161,"rel":142162},"http:\u002F\u002Ffree.3v.do\u002F",[23850],[1114,142164,142165,142168,142171,142178],{},[53,142166,142167],{},"去免费空间网站注册账号。",[53,142169,142170],{},"记录下主机名、用户名、密码、域名。",[53,142172,142173,142174,142177],{},"利用 ",[93,142175,142176],{},"utftp"," 软件 上传网站到远程服务器",[53,142179,142180],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[14,142182,142183],{},"使用软件上传，对上传软件文件进行解压",[1445,142185],{"style":126387,"src":142186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[1445,142188],{"style":126387,"src":142189},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[14,142191,142192],{},"输入刚刚申请的服务器账号信息：",[1445,142194],{"style":126387,"src":142195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[1445,142197],{"style":126387,"src":142198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[1445,142200],{"style":126387,"src":142201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[1445,142203],{"style":126387,"src":142204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[14,142206,142207],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[1445,142209],{"style":126387,"src":142210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[14,142212,142213],{},"浏览器输入域名即可访问",[14,142215,142216],{},"首页一定必须是index",{"title":18,"searchDepth":19,"depth":19,"links":142218},[142219],{"id":142121,"depth":19,"text":142122,"children":142220},[142221],{"id":142149,"depth":1162,"text":142150},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142113,"description":23361},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142228,"title":142229,"body":142230,"description":23361,"extension":21,"meta":143157,"navigation":23,"path":143158,"seo":143159,"stem":143160,"__hash__":143161},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142231,"toc":143140},[142232,142235,142239,142242,142245,142256,142259,142263,142267,142272,142275,142278,142281,142284,142288,142314,142318,142322,142325,142328,142332,142365,142369,142372,142375,142439,142443,142447,142450,142453,142456,142460,142505,142509,142512,142542,142546,142550,142553,142556,142560,142563,142632,142635,142743,142745,142751,142755,142758,142761,142857,142860,142864,142888,142892,142895,142899,142902,142906,142909,142912,142915,142918,142922,142925,142928,142932,142936,142939,142942,142945,142948,142952,142955,142959,142962,142965,143010,143014,143018,143021,143024,143027,143059,143063,143066,143100,143104,143107,143137],[10,142233,142229],{"id":142234},"_18-2d动画与3d转换",[38,142236,142238],{"id":142237},"_181-css3-2d转换","18.1 CSS3 2D转换",[14,142240,142241],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[14,142243,142244],{},"转换（transform）你可以简单理解为变形",[1114,142246,142247,142250,142253],{},[53,142248,142249],{},"移动：translate",[53,142251,142252],{},"旋转：rotate",[53,142254,142255],{},"缩放：scale",[1445,142257],{"style":126387,"src":142258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[67,142260,142262],{"id":142261},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[21982,142264,142266],{"id":142265},"_18111-translate介绍","18.1.1.1 translate介绍",[14,142268,142269,142270],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[256,142271,133190],{},[1445,142273],{"style":126387,"src":142274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[14,142276,142277],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[14,142279,142280],{},"对于行内元素无效",[14,142282,142283],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[21982,142285,142287],{"id":142286},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[87,142289,142290],{"className":126531,"code":138720,"language":126533,"meta":18,"style":18},[93,142291,142292,142298,142310],{"__ignoreMap":18},[96,142293,142294,142296],{"class":98,"line":99},[96,142295,51590],{"class":51279},[96,142297,15556],{"class":106},[96,142299,142300,142302,142304,142306,142308],{"class":98,"line":19},[96,142301,70449],{"class":155},[96,142303,51416],{"class":106},[96,142305,298],{"class":155},[96,142307,51535],{"class":155},[96,142309,1273],{"class":106},[96,142311,142312],{"class":98,"line":1162},[96,142313,1548],{"class":106},[67,142315,142317],{"id":142316},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[21982,142319,142321],{"id":142320},"_18121-rotate介绍","18.1.2.1 rotate介绍",[14,142323,142324],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[1445,142326],{"style":126387,"src":142327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[21982,142329,142331],{"id":142330},"_18122-旋转效果","18.1.2.2 旋转效果",[87,142333,142335],{"className":126531,"code":142334,"language":126533,"meta":18,"style":18},"div {\n  transform: rotate(45deg);\n}\n",[93,142336,142337,142343,142361],{"__ignoreMap":18},[96,142338,142339,142341],{"class":98,"line":99},[96,142340,51590],{"class":51279},[96,142342,15556],{"class":106},[96,142344,142345,142347,142349,142352,142354,142356,142359],{"class":98,"line":19},[96,142346,136515],{"class":155},[96,142348,51416],{"class":106},[96,142350,142351],{"class":155},"rotate",[96,142353,107],{"class":106},[96,142355,636],{"class":155},[96,142357,142358],{"class":102},"deg",[96,142360,2702],{"class":106},[96,142362,142363],{"class":98,"line":1162},[96,142364,1548],{"class":106},[21982,142366,142368],{"id":142367},"_18123-三角做法","18.1.2.3 三角做法",[14,142370,142371],{},"该下标当经过最外层大盒子时会实现向上反转",[1445,142373],{"style":126387,"src":142374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[87,142376,142377],{"className":126531,"code":135051,"language":126533,"meta":18,"style":18},[93,142378,142379,142383,142389,142399,142409,142425,142435],{"__ignoreMap":18},[96,142380,142381],{"class":98,"line":99},[96,142382,135058],{"class":165},[96,142384,142385,142387],{"class":98,"line":19},[96,142386,135063],{"class":1946},[96,142388,15556],{"class":106},[96,142390,142391,142393,142395,142397],{"class":98,"line":1162},[96,142392,70547],{"class":155},[96,142394,51416],{"class":106},[96,142396,298],{"class":155},[96,142398,1273],{"class":106},[96,142400,142401,142403,142405,142407],{"class":98,"line":1177},[96,142402,70767],{"class":155},[96,142404,51416],{"class":106},[96,142406,298],{"class":155},[96,142408,1273],{"class":106},[96,142410,142411,142413,142415,142417,142419,142421,142423],{"class":98,"line":1183},[96,142412,70875],{"class":155},[96,142414,51416],{"class":106},[96,142416,553],{"class":155},[96,142418,51471],{"class":102},[96,142420,51500],{"class":155},[96,142422,63970],{"class":155},[96,142424,1273],{"class":106},[96,142426,142427,142429,142431,142433],{"class":98,"line":1197},[96,142428,135106],{"class":155},[96,142430,51416],{"class":106},[96,142432,62348],{"class":155},[96,142434,1273],{"class":106},[96,142436,142437],{"class":98,"line":1203},[96,142438,1548],{"class":106},[67,142440,142442],{"id":142441},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[21982,142444,142446],{"id":142445},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[14,142448,142449],{},"设置中心点",[1445,142451],{"style":126387,"src":142452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[14,142454,142455],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[21982,142457,142459],{"id":142458},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[87,142461,142463],{"className":126531,"code":142462,"language":126533,"meta":18,"style":18},"\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",[93,142464,142465,142470,142476,142491,142496,142501],{"__ignoreMap":18},[96,142466,142467],{"class":98,"line":99},[96,142468,142469],{"class":165},"\u002F* 转换中心点 *\u002F\n",[96,142471,142472,142474],{"class":98,"line":19},[96,142473,51590],{"class":51279},[96,142475,15556],{"class":106},[96,142477,142478,142481,142483,142485,142487,142489],{"class":98,"line":1162},[96,142479,142480],{"class":155},"  transform-origin",[96,142482,51416],{"class":106},[96,142484,51571],{"class":155},[96,142486,17128],{"class":155},[96,142488,130394],{"class":106},[96,142490,135204],{"class":165},[96,142492,142493],{"class":98,"line":1177},[96,142494,142495],{"class":165},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[96,142497,142498],{"class":98,"line":1183},[96,142499,142500],{"class":165},"  \u002F* transform-origin: left top; *\u002F\n",[96,142502,142503],{"class":98,"line":1197},[96,142504,1548],{"class":106},[21982,142506,142508],{"id":142507},"_18133-旋转案例","18.1.3.3 旋转案例",[1445,142510],{"style":126387,"src":142511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[87,142513,142514],{"className":126531,"code":142334,"language":126533,"meta":18,"style":18},[93,142515,142516,142522,142538],{"__ignoreMap":18},[96,142517,142518,142520],{"class":98,"line":99},[96,142519,51590],{"class":51279},[96,142521,15556],{"class":106},[96,142523,142524,142526,142528,142530,142532,142534,142536],{"class":98,"line":19},[96,142525,136515],{"class":155},[96,142527,51416],{"class":106},[96,142529,142351],{"class":155},[96,142531,107],{"class":106},[96,142533,636],{"class":155},[96,142535,142358],{"class":102},[96,142537,2702],{"class":106},[96,142539,142540],{"class":98,"line":1162},[96,142541,1548],{"class":106},[67,142543,142545],{"id":142544},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[21982,142547,142549],{"id":142548},"_18141-scale介绍","18.1.4.1 scale介绍",[14,142551,142552],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[1445,142554],{"style":126387,"src":142555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[21982,142557,142559],{"id":142558},"_18142-分页按钮","18.1.4.2 分页按钮",[1445,142561],{"style":126387,"src":142562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[87,142564,142566],{"className":126531,"code":142565,"language":126533,"meta":18,"style":18},"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",[93,142567,142568,142574,142590,142594,142598,142603,142609,142623,142628],{"__ignoreMap":18},[96,142569,142570,142572],{"class":98,"line":99},[96,142571,51590],{"class":51279},[96,142573,15556],{"class":106},[96,142575,142576,142578,142580,142583,142585,142588],{"class":98,"line":19},[96,142577,136515],{"class":155},[96,142579,51416],{"class":106},[96,142581,142582],{"class":155},"scale",[96,142584,107],{"class":106},[96,142586,142587],{"class":155},"1.2",[96,142589,2702],{"class":106},[96,142591,142592],{"class":98,"line":1162},[96,142593,1548],{"class":106},[96,142595,142596],{"class":98,"line":1177},[96,142597,135992],{"class":106},[96,142599,142600],{"class":98,"line":1183},[96,142601,142602],{"class":165},"\u002F* 2D 缩放 *\u002F\n",[96,142604,142605,142607],{"class":98,"line":1197},[96,142606,51590],{"class":51279},[96,142608,15556],{"class":106},[96,142610,142611,142613,142615,142617,142619,142621],{"class":98,"line":1203},[96,142612,136515],{"class":155},[96,142614,51416],{"class":106},[96,142616,142582],{"class":155},[96,142618,107],{"class":106},[96,142620,142587],{"class":155},[96,142622,2702],{"class":106},[96,142624,142625],{"class":98,"line":1294},[96,142626,142627],{"class":165},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[96,142629,142630],{"class":98,"line":1300},[96,142631,1548],{"class":106},[14,142633,142634],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[87,142636,142638],{"className":126531,"code":142637,"language":126533,"meta":18,"style":18},"\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",[93,142639,142640,142645,142655,142676,142697,142701,142706,142712,142739],{"__ignoreMap":18},[96,142641,142642],{"class":98,"line":99},[96,142643,142644],{"class":165},"\u002F* 定义动画 *\u002F\n",[96,142646,142647,142650,142653],{"class":98,"line":19},[96,142648,142649],{"class":102},"@keyframes",[96,142651,142652],{"class":5200}," move",[96,142654,15556],{"class":106},[96,142656,142657,142660,142662,142664,142666,142669,142671,142673],{"class":98,"line":1162},[96,142658,142659],{"class":1946},"  0%",[96,142661,79786],{"class":106},[96,142663,48113],{"class":155},[96,142665,51416],{"class":106},[96,142667,142668],{"class":155},"translateX",[96,142670,107],{"class":106},[96,142672,298],{"class":155},[96,142674,142675],{"class":106},"); }\n",[96,142677,142678,142681,142683,142685,142687,142689,142691,142693,142695],{"class":98,"line":1177},[96,142679,142680],{"class":1946},"  100%",[96,142682,79786],{"class":106},[96,142684,48113],{"class":155},[96,142686,51416],{"class":106},[96,142688,142668],{"class":155},[96,142690,107],{"class":106},[96,142692,418],{"class":155},[96,142694,51471],{"class":102},[96,142696,142675],{"class":106},[96,142698,142699],{"class":98,"line":1183},[96,142700,1548],{"class":106},[96,142702,142703],{"class":98,"line":1197},[96,142704,142705],{"class":165},"\u002F* 调用动画 *\u002F\n",[96,142707,142708,142710],{"class":98,"line":1203},[96,142709,51590],{"class":51279},[96,142711,15556],{"class":106},[96,142713,142714,142717,142719,142721,142723,142725,142727,142729,142731,142734,142737],{"class":98,"line":1294},[96,142715,142716],{"class":155},"  animation",[96,142718,51416],{"class":106},[96,142720,135217],{"class":155},[96,142722,25097],{"class":155},[96,142724,802],{"class":102},[96,142726,78659],{"class":155},[96,142728,4076],{"class":155},[96,142730,802],{"class":102},[96,142732,142733],{"class":155}," infinite",[96,142735,142736],{"class":155}," alternate",[96,142738,1273],{"class":106},[96,142740,142741],{"class":98,"line":1300},[96,142742,1548],{"class":106},[14,142744,142634],{},[87,142746,142749],{"className":142747,"code":142748,"language":5171},[5169],"\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",[93,142750,142748],{"__ignoreMap":18},[21982,142752,142754],{"id":142753},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[14,142756,142757],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[1445,142759],{"style":126387,"src":142760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[87,142762,142763],{"className":126531,"code":142637,"language":126533,"meta":18,"style":18},[93,142764,142765,142769,142777,142795,142815,142819,142823,142829,142853],{"__ignoreMap":18},[96,142766,142767],{"class":98,"line":99},[96,142768,142644],{"class":165},[96,142770,142771,142773,142775],{"class":98,"line":19},[96,142772,142649],{"class":102},[96,142774,142652],{"class":5200},[96,142776,15556],{"class":106},[96,142778,142779,142781,142783,142785,142787,142789,142791,142793],{"class":98,"line":1162},[96,142780,142659],{"class":1946},[96,142782,79786],{"class":106},[96,142784,48113],{"class":155},[96,142786,51416],{"class":106},[96,142788,142668],{"class":155},[96,142790,107],{"class":106},[96,142792,298],{"class":155},[96,142794,142675],{"class":106},[96,142796,142797,142799,142801,142803,142805,142807,142809,142811,142813],{"class":98,"line":1177},[96,142798,142680],{"class":1946},[96,142800,79786],{"class":106},[96,142802,48113],{"class":155},[96,142804,51416],{"class":106},[96,142806,142668],{"class":155},[96,142808,107],{"class":106},[96,142810,418],{"class":155},[96,142812,51471],{"class":102},[96,142814,142675],{"class":106},[96,142816,142817],{"class":98,"line":1183},[96,142818,1548],{"class":106},[96,142820,142821],{"class":98,"line":1197},[96,142822,142705],{"class":165},[96,142824,142825,142827],{"class":98,"line":1203},[96,142826,51590],{"class":51279},[96,142828,15556],{"class":106},[96,142830,142831,142833,142835,142837,142839,142841,142843,142845,142847,142849,142851],{"class":98,"line":1294},[96,142832,142716],{"class":155},[96,142834,51416],{"class":106},[96,142836,135217],{"class":155},[96,142838,25097],{"class":155},[96,142840,802],{"class":102},[96,142842,78659],{"class":155},[96,142844,4076],{"class":155},[96,142846,802],{"class":102},[96,142848,142733],{"class":155},[96,142850,142736],{"class":155},[96,142852,1273],{"class":106},[96,142854,142855],{"class":98,"line":1300},[96,142856,1548],{"class":106},[14,142858,142859],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[67,142861,142863],{"id":142862},"_1823-知识点回顾","18.2.3 知识点回顾",[87,142865,142866],{"className":126531,"code":128700,"language":126533,"meta":18,"style":18},[93,142867,142868,142874,142884],{"__ignoreMap":18},[96,142869,142870,142872],{"class":98,"line":99},[96,142871,51590],{"class":51279},[96,142873,15556],{"class":106},[96,142875,142876,142878,142880,142882],{"class":98,"line":19},[96,142877,128713],{"class":155},[96,142879,51416],{"class":106},[96,142881,61715],{"class":155},[96,142883,1273],{"class":106},[96,142885,142886],{"class":98,"line":1162},[96,142887,1548],{"class":106},[38,142889,142891],{"id":142890},"_183-3d-转换","18.3 3D 转换",[14,142893,142894],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[67,142896,142898],{"id":142897},"_1831-坐标轴认识","18.3.1 坐标轴认识",[1445,142900],{"style":126387,"src":142901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[67,142903,142905],{"id":142904},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[1445,142907],{"style":126387,"src":142908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[14,142910,142911],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[14,142913,142914],{},"translate3d的效果需要搭配透视perspective来使用",[1445,142916],{"style":126387,"src":142917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[67,142919,142921],{"id":142920},"_1833-透视-perspective","18.3.3 透视 perspective",[1445,142923],{"style":126387,"src":142924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[14,142926,142927],{},"透视写在父盒子上，单位为像素",[67,142929,142931],{"id":142930},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[21982,142933,142935],{"id":142934},"_18341-分开解释","18.3.4.1 分开解释",[1445,142937],{"style":126387,"src":142938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[1445,142940],{"style":126387,"src":142941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[1445,142943],{"style":126387,"src":142944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[14,142946,142947],{},"总结来说就是左手原则",[21982,142949,142951],{"id":142950},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[1445,142953],{"style":126387,"src":142954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[67,142956,142958],{"id":142957},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[1445,142960],{"style":126387,"src":142961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[1445,142963],{"style":126387,"src":142964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[87,142966,142968],{"className":126531,"code":142967,"language":126533,"meta":18,"style":18},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[93,142969,142970,142976,142989,143006],{"__ignoreMap":18},[96,142971,142972,142974],{"class":98,"line":99},[96,142973,51590],{"class":51279},[96,142975,15556],{"class":106},[96,142977,142978,142981,142983,142985,142987],{"class":98,"line":19},[96,142979,142980],{"class":155},"  perspective",[96,142982,51416],{"class":106},[96,142984,65053],{"class":155},[96,142986,51471],{"class":102},[96,142988,1273],{"class":106},[96,142990,142991,142993,142995,142998,143000,143002,143004],{"class":98,"line":1162},[96,142992,136515],{"class":155},[96,142994,51416],{"class":106},[96,142996,142997],{"class":155},"rotateX",[96,142999,107],{"class":106},[96,143001,636],{"class":155},[96,143003,142358],{"class":102},[96,143005,2702],{"class":106},[96,143007,143008],{"class":98,"line":1177},[96,143009,1548],{"class":106},[67,143011,143013],{"id":143012},"_1836-案例","18.3.6 案例",[21982,143015,143017],{"id":143016},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[1445,143019],{"style":126387,"src":143020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[1445,143022],{"style":126387,"src":143023},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[1445,143025],{"style":126387,"src":143026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[87,143028,143030],{"className":126531,"code":143029,"language":126533,"meta":18,"style":18},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[93,143031,143032,143037,143043,143055],{"__ignoreMap":18},[96,143033,143034],{"class":98,"line":99},[96,143035,143036],{"class":165},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[96,143038,143039,143041],{"class":98,"line":19},[96,143040,133528],{"class":1946},[96,143042,15556],{"class":106},[96,143044,143045,143047,143049,143051,143053],{"class":98,"line":1162},[96,143046,142980],{"class":155},[96,143048,51416],{"class":106},[96,143050,65053],{"class":155},[96,143052,51471],{"class":102},[96,143054,1273],{"class":106},[96,143056,143057],{"class":98,"line":1177},[96,143058,1548],{"class":106},[21982,143060,143062],{"id":143061},"_18362-3d导航栏","18.3.6.2 3D导航栏",[1445,143064],{"style":126387,"src":143065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[87,143067,143068],{"className":127278,"code":130635,"language":127280,"meta":18,"style":18},[93,143069,143070,143074,143088,143092],{"__ignoreMap":18},[96,143071,143072],{"class":98,"line":99},[96,143073,130642],{"class":165},[96,143075,143076,143078,143080,143082,143084,143086],{"class":98,"line":19},[96,143077,1017],{"class":106},[96,143079,51590],{"class":51279},[96,143081,53465],{"class":1946},[96,143083,152],{"class":106},[96,143085,130655],{"class":211},[96,143087,51286],{"class":106},[96,143089,143090],{"class":98,"line":1162},[96,143091,130662],{"class":106},[96,143093,143094,143096,143098],{"class":98,"line":1177},[96,143095,51764],{"class":106},[96,143097,51590],{"class":51279},[96,143099,51286],{"class":106},[21982,143101,143103],{"id":143102},"_18363-旋转木马","18.3.6.3 旋转木马",[1445,143105],{"style":126387,"src":143106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[87,143108,143109],{"className":126531,"code":142334,"language":126533,"meta":18,"style":18},[93,143110,143111,143117,143133],{"__ignoreMap":18},[96,143112,143113,143115],{"class":98,"line":99},[96,143114,51590],{"class":51279},[96,143116,15556],{"class":106},[96,143118,143119,143121,143123,143125,143127,143129,143131],{"class":98,"line":19},[96,143120,136515],{"class":155},[96,143122,51416],{"class":106},[96,143124,142351],{"class":155},[96,143126,107],{"class":106},[96,143128,636],{"class":155},[96,143130,142358],{"class":102},[96,143132,2702],{"class":106},[96,143134,143135],{"class":98,"line":1162},[96,143136,1548],{"class":106},[5110,143138,143139],{},"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":18,"searchDepth":19,"depth":19,"links":143141},[143142,143149],{"id":142237,"depth":19,"text":142238,"children":143143},[143144,143145,143146,143147,143148],{"id":142261,"depth":1162,"text":142262},{"id":142316,"depth":1162,"text":142317},{"id":142441,"depth":1162,"text":142442},{"id":142544,"depth":1162,"text":142545},{"id":142862,"depth":1162,"text":142863},{"id":142890,"depth":19,"text":142891,"children":143150},[143151,143152,143153,143154,143155,143156],{"id":142897,"depth":1162,"text":142898},{"id":142904,"depth":1162,"text":142905},{"id":142920,"depth":1162,"text":142921},{"id":142930,"depth":1162,"text":142931},{"id":142957,"depth":1162,"text":142958},{"id":143012,"depth":1162,"text":143013},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142229,"description":23361},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143163,"title":143164,"body":143165,"description":23361,"extension":21,"meta":143368,"navigation":23,"path":143369,"seo":143370,"stem":143371,"__hash__":143372},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143166,"toc":143357},[143167,143170,143174,143177,143180,143184,143187,143190,143193,143197,143200,143204,143207,143211,143214,143218,143232,143236,143261,143264,143267,143284,143288,143292,143295,143298,143302,143305,143308,143326,143330,143333,143347,143351,143354],[10,143168,143164],{"id":143169},"_19-移动端基础-前缀现状与视口",[38,143171,143173],{"id":143172},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[1445,143175],{"style":126387,"src":143176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[14,143178,143179],{},"意思就是加个前缀，增加兼容性",[38,143181,143183],{"id":143182},"_192-移动端现状认识","19.2 移动端现状认识",[1445,143185],{"style":126387,"src":143186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[14,143188,143189],{},"调试方法：",[1445,143191],{"style":126387,"src":143192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[38,143194,143196],{"id":143195},"_193-视口","19.3 视口",[14,143198,143199],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[67,143201,143203],{"id":143202},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[1445,143205],{"style":126387,"src":143206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[67,143208,143210],{"id":143209},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[1445,143212],{"style":126387,"src":143213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[67,143215,143217],{"id":143216},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1114,143219,143220,143223,143226,143229],{},[53,143221,143222],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[53,143224,143225],{},"理想视口，对设备来讲，是最理想的视口尺寸",[53,143227,143228],{},"需要手动添写meta视口标签通知浏览器操作",[53,143230,143231],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[67,143233,143235],{"id":143234},"_1934-meta视口标签","19.3.4 meta视口标签",[87,143237,143239],{"className":127278,"code":143238,"language":127280,"meta":18,"style":18},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[93,143240,143241],{"__ignoreMap":18},[96,143242,143243,143245,143247,143249,143251,143253,143255,143257,143259],{"class":98,"line":99},[96,143244,1017],{"class":106},[96,143246,51323],{"class":51279},[96,143248,14904],{"class":1946},[96,143250,152],{"class":106},[96,143252,51370],{"class":211},[96,143254,51350],{"class":1946},[96,143256,152],{"class":106},[96,143258,51377],{"class":211},[96,143260,51286],{"class":106},[1445,143262],{"style":126387,"src":143263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[14,143265,143266],{},"标准视口设置：",[50,143268,143269,143272,143275,143278,143281],{},[53,143270,143271],{},"视口宽度和设备保持一致",[53,143273,143274],{},"视口的默认缩放比例1.0",[53,143276,143277],{},"不允许用户自行缩放",[53,143279,143280],{},"最大允许的缩放比例1.0",[53,143282,143283],{},"最小允许的缩放比例1.0",[67,143285,143287],{"id":143286},"_1935-二倍图","19.3.5 二倍图",[21982,143289,143291],{"id":143290},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[1445,143293],{"style":126387,"src":143294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[1445,143296],{"style":126387,"src":143297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[21982,143299,143301],{"id":143300},"_19352-多倍图","19.3.5.2 多倍图",[1445,143303],{"style":126387,"src":143304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[14,143306,143307],{},"二倍图法，代码如下：",[87,143309,143311],{"className":126531,"code":143310,"language":126533,"meta":18,"style":18},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[93,143312,143313,143318],{"__ignoreMap":18},[96,143314,143315],{"class":98,"line":99},[96,143316,143317],{"class":165},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[96,143319,143320,143323],{"class":98,"line":19},[96,143321,143322],{"class":51279},"background-size",[96,143324,143325],{"class":106},": 50% 50%;\n",[21982,143327,143329],{"id":143328},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[1445,143331],{"style":126387,"src":143332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[50,143334,143335,143338,143341,143344],{},[53,143336,143337],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[53,143339,143340],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[53,143342,143343],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[53,143345,143346],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[21982,143348,143350],{"id":143349},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[1445,143352],{"style":126387,"src":143353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[5110,143355,143356],{},"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":18,"searchDepth":19,"depth":19,"links":143358},[143359,143360,143361],{"id":143172,"depth":19,"text":143173},{"id":143182,"depth":19,"text":143183},{"id":143195,"depth":19,"text":143196,"children":143362},[143363,143364,143365,143366,143367],{"id":143202,"depth":1162,"text":143203},{"id":143209,"depth":1162,"text":143210},{"id":143216,"depth":1162,"text":143217},{"id":143234,"depth":1162,"text":143235},{"id":143286,"depth":1162,"text":143287},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143164,"description":23361},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143374,"title":143375,"body":143376,"description":23361,"extension":21,"meta":144253,"navigation":23,"path":144254,"seo":144255,"stem":144256,"__hash__":144257},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143377,"toc":144237},[143378,143381,143385,143392,143395,143402,143405,143410,143413,143417,143421,143428,143431,143434,143438,143441,143444,143447,143450,143453,143457,143460,143464,143466,143469,143472,143475,143478,143480,143483,143485,143515,143517,143547,143551,143554,143558,143561,143578,143581,143584,143660,143662,143665,143668,143671,143674,143676,143679,143682,143686,143708,143711,143714,143718,143721,143727,143730,143734,143737,143740,143744,143747,143750,143753,143757,143760,143763,143766,143769,143773,143776,143780,143787,143790,143793,143796,143799,143809,143812,143815,143822,143825,143829,143832,143835,143839,143842,143845,143848,143893,143896,143899,143902,143904,144033,144035,144073,144076,144079,144081,144199,144201,144235],[10,143379,143375],{"id":143380},"_20-移动端布局实战上篇",[38,143382,143384],{"id":143383},"_201-移动端主流方案","20.1 移动端主流方案",[50,143386,143387],{},[53,143388,143389],{},[256,143390,143391],{},"单独移动端页面（主流）",[1445,143393],{"style":126387,"src":143394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[50,143396,143397],{"start":19},[53,143398,143399],{},[256,143400,143401],{},"响应式兼容PC移动端",[1445,143403],{"style":126387,"src":143404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[50,143406,143407],{"start":1162},[53,143408,143409],{},"两种页面选型布局方式",[1445,143411],{"style":126387,"src":143412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[38,143414,143416],{"id":143415},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[67,143418,143420],{"id":143419},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[14,143422,143423,143424],{},"官网地址： ",[345,143425,143426],{"href":143426,"rel":143427},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[23850],[1445,143429],{"style":126387,"src":143430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[1445,143432],{"style":126387,"src":143433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[67,143435,143437],{"id":143436},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[1445,143439],{"style":126387,"src":143440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[1445,143442],{"style":126387,"src":143443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[14,143445,143446],{},"去除高亮：",[14,143448,143449],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[14,143451,143452],{},"-webkit- tap-highlight-color: transparent;",[38,143454,143456],{"id":143455},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[1445,143458],{"style":126387,"src":143459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[38,143461,143463],{"id":143462},"_204-流式布局案例","20.4 流式布局案例",[14,143465,136],{},[14,143467,143468],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[14,143470,143471],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[14,143473,143474],{},"图片格式：",[1445,143476],{"style":126387,"src":143477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[14,143479,135574],{},[1445,143481],{"style":126387,"src":143482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[14,143484,139901],{},[87,143486,143487],{"className":127278,"code":134033,"language":127280,"meta":18,"style":18},[93,143488,143489],{"__ignoreMap":18},[96,143490,143491,143493,143495,143497,143499,143501,143503,143505,143507,143509,143511,143513],{"class":98,"line":99},[96,143492,1017],{"class":106},[96,143494,1445],{"class":51279},[96,143496,55218],{"class":1946},[96,143498,152],{"class":106},[96,143500,134048],{"class":211},[96,143502,55226],{"class":1946},[96,143504,152],{"class":106},[96,143506,134055],{"class":211},[96,143508,134058],{"class":1946},[96,143510,152],{"class":106},[96,143512,134063],{"class":211},[96,143514,51286],{"class":106},[14,143516,139990],{},[87,143518,143519],{"className":127278,"code":134033,"language":127280,"meta":18,"style":18},[93,143520,143521],{"__ignoreMap":18},[96,143522,143523,143525,143527,143529,143531,143533,143535,143537,143539,143541,143543,143545],{"class":98,"line":99},[96,143524,1017],{"class":106},[96,143526,1445],{"class":51279},[96,143528,55218],{"class":1946},[96,143530,152],{"class":106},[96,143532,134048],{"class":211},[96,143534,55226],{"class":1946},[96,143536,152],{"class":106},[96,143538,134055],{"class":211},[96,143540,134058],{"class":1946},[96,143542,152],{"class":106},[96,143544,134063],{"class":211},[96,143546,51286],{"class":106},[38,143548,143550],{"id":143549},"_205-flex布局","20.5 flex布局",[1445,143552],{"style":126387,"src":143553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[67,143555,143557],{"id":143556},"_2051-布局原理","20.5.1 布局原理",[14,143559,143560],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1114,143562,143563,143566,143569,143572,143575],{},[53,143564,143565],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[53,143567,143568],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[53,143570,143571],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[53,143573,143574],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[53,143576,143577],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[14,143579,143580],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[14,143582,143583],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[87,143585,143587],{"className":126531,"code":143586,"language":126533,"meta":18,"style":18},"\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",[93,143588,143589,143594,143601,143611,143623,143634,143645,143656],{"__ignoreMap":18},[96,143590,143591],{"class":98,"line":99},[96,143592,143593],{"class":165},"\u002F* Flex 弹性布局 *\u002F\n",[96,143595,143596,143599],{"class":98,"line":19},[96,143597,143598],{"class":1946},".container",[96,143600,15556],{"class":106},[96,143602,143603,143605,143607,143609],{"class":98,"line":1162},[96,143604,128147],{"class":155},[96,143606,51416],{"class":106},[96,143608,51456],{"class":155},[96,143610,1273],{"class":106},[96,143612,143613,143616,143618,143621],{"class":98,"line":1177},[96,143614,143615],{"class":155},"  flex-direction",[96,143617,51416],{"class":106},[96,143619,143620],{"class":155},"row",[96,143622,1273],{"class":106},[96,143624,143625,143628,143630,143632],{"class":98,"line":1183},[96,143626,143627],{"class":155},"  justify-content",[96,143629,51416],{"class":106},[96,143631,51647],{"class":155},[96,143633,1273],{"class":106},[96,143635,143636,143639,143641,143643],{"class":98,"line":1197},[96,143637,143638],{"class":155},"  align-items",[96,143640,51416],{"class":106},[96,143642,51571],{"class":155},[96,143644,1273],{"class":106},[96,143646,143647,143650,143652,143654],{"class":98,"line":1203},[96,143648,143649],{"class":155},"  flex-wrap",[96,143651,51416],{"class":106},[96,143653,78589],{"class":155},[96,143655,1273],{"class":106},[96,143657,143658],{"class":98,"line":1294},[96,143659,1548],{"class":106},[14,143661,70432],{},[14,143663,143664],{},".form-item .male-label {",[14,143666,143667],{},"   margin-right: 20px;",[14,143669,143670],{},"   display: inline-flex;",[14,143672,143673],{},"   align-items: center;",[14,143675,1053],{},[1445,143677],{"style":126387,"src":143678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[1445,143680],{"style":126387,"src":143681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[67,143683,143685],{"id":143684},"_2052-常见父项属性","20.5.2 常见父项属性",[50,143687,143688,143691,143694,143697,143700,143703,143706],{},[53,143689,143690],{},"flex-direction：设置主轴的方向",[53,143692,143693],{},"justify-content：设置主轴上的子元素排列方式",[53,143695,143696],{},"flex-wrap：设置子元素是否换行",[53,143698,143699],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[53,143701,143702],{},"align-items：设置侧轴上的子元素排列方式（单行）",[53,143704,143705],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[53,143707,143690],{},[1445,143709],{"style":126387,"src":143710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[1445,143712],{"style":126387,"src":143713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[50,143715,143716],{"start":19},[53,143717,143693],{},[1445,143719],{"style":126387,"src":143720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[14,143722,143723,143726],{},[93,143724,143725],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[14,143728,143729],{},"跟着主轴走",[50,143731,143732],{"start":1162},[53,143733,143696],{},[1445,143735],{"style":126387,"src":143736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[14,143738,143739],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[50,143741,143742],{"start":1177},[53,143743,143699],{},[1445,143745],{"style":126387,"src":143746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[14,143748,143749],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[14,143751,143752],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[50,143754,143755],{"start":1183},[53,143756,143702],{},[1445,143758],{"style":126387,"src":143759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[14,143761,143762],{},"align-items与align-content之间的区别：",[14,143764,143765],{},"单找items，多找content",[1445,143767],{"style":126387,"src":143768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[50,143770,143771],{"start":1197},[53,143772,143705],{},[1445,143774],{"style":126387,"src":143775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[67,143777,143779],{"id":143778},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[50,143781,143782],{},[53,143783,143784],{},[256,143785,143786],{},"flex 属性",[14,143788,143789],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[1445,143791],{"style":126387,"src":143792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[14,143794,143795],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[14,143797,143798],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[50,143800,143801],{"start":19},[53,143802,143803,13779,143806],{},[256,143804,143805],{},"align-self",[256,143807,143808],{},"控制子项自己在侧轴上的排列方式",[1445,143810],{"style":126387,"src":143811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[14,143813,143814],{},"单个子盒子在父盒子侧轴上的排列方式",[50,143816,143817],{"start":1162},[53,143818,143819,143821],{},[256,143820,95276],{}," 属性定义项目的排列顺序",[1445,143823],{"style":126387,"src":143824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[67,143826,143828],{"id":143827},"_2054-背景线性渐变","20.5.4 背景线性渐变",[1445,143830],{"style":126387,"src":143831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[14,143833,143834],{},"必须要添加浏览器的私有前缀",[67,143836,143838],{"id":143837},"_2055-携程网首页案例","20.5.5 携程网首页案例",[14,143840,143841],{},"学到最重要的知识：",[14,143843,143844],{},"flex处理这样的布局思路",[1445,143846],{"style":126387,"src":143847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[87,143849,143851],{"className":126531,"code":143850,"language":126533,"meta":18,"style":18},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[93,143852,143853,143859,143869,143879,143889],{"__ignoreMap":18},[96,143854,143855,143857],{"class":98,"line":99},[96,143856,143598],{"class":1946},[96,143858,15556],{"class":106},[96,143860,143861,143863,143865,143867],{"class":98,"line":19},[96,143862,128147],{"class":155},[96,143864,51416],{"class":106},[96,143866,51456],{"class":155},[96,143868,1273],{"class":106},[96,143870,143871,143873,143875,143877],{"class":98,"line":1162},[96,143872,143627],{"class":155},[96,143874,51416],{"class":106},[96,143876,51571],{"class":155},[96,143878,1273],{"class":106},[96,143880,143881,143883,143885,143887],{"class":98,"line":1177},[96,143882,143638],{"class":155},[96,143884,51416],{"class":106},[96,143886,51571],{"class":155},[96,143888,1273],{"class":106},[96,143890,143891],{"class":98,"line":1183},[96,143892,1548],{"class":106},[14,143894,143895],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[14,143897,143898],{},"使用属性选择器",[1445,143900],{"style":126387,"src":143901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[14,143903,68868],{},[87,143905,143907],{"className":127278,"code":143906,"language":127280,"meta":18,"style":18},"\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",[93,143908,143909,143914,143928,143933,143953,143958,143977,143982,144001,144006,144025],{"__ignoreMap":18},[96,143910,143911],{"class":98,"line":99},[96,143912,143913],{"class":165},"\u003C!-- 携程网移动端案例结构 -->\n",[96,143915,143916,143918,143920,143922,143924,143926],{"class":98,"line":19},[96,143917,1017],{"class":106},[96,143919,51590],{"class":51279},[96,143921,53465],{"class":1946},[96,143923,152],{"class":106},[96,143925,92302],{"class":211},[96,143927,51286],{"class":106},[96,143929,143930],{"class":98,"line":1162},[96,143931,143932],{"class":165},"  \u003C!-- 搜索栏 -->\n",[96,143934,143935,143937,143939,143941,143943,143946,143949,143951],{"class":98,"line":1177},[96,143936,52123],{"class":106},[96,143938,51590],{"class":51279},[96,143940,53465],{"class":1946},[96,143942,152],{"class":106},[96,143944,143945],{"class":211},"\"search-index\"",[96,143947,143948],{"class":106},">...\u003C\u002F",[96,143950,51590],{"class":51279},[96,143952,51286],{"class":106},[96,143954,143955],{"class":98,"line":1183},[96,143956,143957],{"class":165},"  \u003C!-- 焦点图 -->\n",[96,143959,143960,143962,143964,143966,143968,143971,143973,143975],{"class":98,"line":1197},[96,143961,52123],{"class":106},[96,143963,51590],{"class":51279},[96,143965,53465],{"class":1946},[96,143967,152],{"class":106},[96,143969,143970],{"class":211},"\"focus\"",[96,143972,143948],{"class":106},[96,143974,51590],{"class":51279},[96,143976,51286],{"class":106},[96,143978,143979],{"class":98,"line":1203},[96,143980,143981],{"class":165},"  \u003C!-- 主导航 -->\n",[96,143983,143984,143986,143988,143990,143992,143995,143997,143999],{"class":98,"line":1294},[96,143985,52123],{"class":106},[96,143987,51590],{"class":51279},[96,143989,53465],{"class":1946},[96,143991,152],{"class":106},[96,143993,143994],{"class":211},"\"local-nav\"",[96,143996,143948],{"class":106},[96,143998,51590],{"class":51279},[96,144000,51286],{"class":106},[96,144002,144003],{"class":98,"line":1300},[96,144004,144005],{"class":165},"  \u003C!-- 子导航 -->\n",[96,144007,144008,144010,144012,144014,144016,144019,144021,144023],{"class":98,"line":1312},[96,144009,52123],{"class":106},[96,144011,51590],{"class":51279},[96,144013,53465],{"class":1946},[96,144015,152],{"class":106},[96,144017,144018],{"class":211},"\"nav-common\"",[96,144020,143948],{"class":106},[96,144022,51590],{"class":51279},[96,144024,51286],{"class":106},[96,144026,144027,144029,144031],{"class":98,"line":1595},[96,144028,51764],{"class":106},[96,144030,51590],{"class":51279},[96,144032,51286],{"class":106},[14,144034,70432],{},[87,144036,144037],{"className":126531,"code":136983,"language":126533,"meta":18,"style":18},[93,144038,144039,144053,144069],{"__ignoreMap":18},[96,144040,144041,144043,144045,144047,144049,144051],{"class":98,"line":99},[96,144042,53800],{"class":51279},[96,144044,997],{"class":106},[96,144046,103086],{"class":1946},[96,144048,152],{"class":102},[96,144050,62678],{"class":211},[96,144052,137000],{"class":106},[96,144054,144055,144057,144059,144061,144063,144065,144067],{"class":98,"line":19},[96,144056,70875],{"class":155},[96,144058,51416],{"class":106},[96,144060,324],{"class":155},[96,144062,51471],{"class":102},[96,144064,51500],{"class":155},[96,144066,130111],{"class":155},[96,144068,1273],{"class":106},[96,144070,144071],{"class":98,"line":1162},[96,144072,1548],{"class":106},[14,144074,144075],{},"总代码和效果展示：",[1445,144077],{"style":126387,"src":144078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[14,144080,68868],{},[87,144082,144083],{"className":127278,"code":143906,"language":127280,"meta":18,"style":18},[93,144084,144085,144089,144103,144107,144125,144129,144147,144151,144169,144173,144191],{"__ignoreMap":18},[96,144086,144087],{"class":98,"line":99},[96,144088,143913],{"class":165},[96,144090,144091,144093,144095,144097,144099,144101],{"class":98,"line":19},[96,144092,1017],{"class":106},[96,144094,51590],{"class":51279},[96,144096,53465],{"class":1946},[96,144098,152],{"class":106},[96,144100,92302],{"class":211},[96,144102,51286],{"class":106},[96,144104,144105],{"class":98,"line":1162},[96,144106,143932],{"class":165},[96,144108,144109,144111,144113,144115,144117,144119,144121,144123],{"class":98,"line":1177},[96,144110,52123],{"class":106},[96,144112,51590],{"class":51279},[96,144114,53465],{"class":1946},[96,144116,152],{"class":106},[96,144118,143945],{"class":211},[96,144120,143948],{"class":106},[96,144122,51590],{"class":51279},[96,144124,51286],{"class":106},[96,144126,144127],{"class":98,"line":1183},[96,144128,143957],{"class":165},[96,144130,144131,144133,144135,144137,144139,144141,144143,144145],{"class":98,"line":1197},[96,144132,52123],{"class":106},[96,144134,51590],{"class":51279},[96,144136,53465],{"class":1946},[96,144138,152],{"class":106},[96,144140,143970],{"class":211},[96,144142,143948],{"class":106},[96,144144,51590],{"class":51279},[96,144146,51286],{"class":106},[96,144148,144149],{"class":98,"line":1203},[96,144150,143981],{"class":165},[96,144152,144153,144155,144157,144159,144161,144163,144165,144167],{"class":98,"line":1294},[96,144154,52123],{"class":106},[96,144156,51590],{"class":51279},[96,144158,53465],{"class":1946},[96,144160,152],{"class":106},[96,144162,143994],{"class":211},[96,144164,143948],{"class":106},[96,144166,51590],{"class":51279},[96,144168,51286],{"class":106},[96,144170,144171],{"class":98,"line":1300},[96,144172,144005],{"class":165},[96,144174,144175,144177,144179,144181,144183,144185,144187,144189],{"class":98,"line":1312},[96,144176,52123],{"class":106},[96,144178,51590],{"class":51279},[96,144180,53465],{"class":1946},[96,144182,152],{"class":106},[96,144184,144018],{"class":211},[96,144186,143948],{"class":106},[96,144188,51590],{"class":51279},[96,144190,51286],{"class":106},[96,144192,144193,144195,144197],{"class":98,"line":1595},[96,144194,51764],{"class":106},[96,144196,51590],{"class":51279},[96,144198,51286],{"class":106},[14,144200,70432],{},[87,144202,144203],{"className":127278,"code":130635,"language":127280,"meta":18,"style":18},[93,144204,144205,144209,144223,144227],{"__ignoreMap":18},[96,144206,144207],{"class":98,"line":99},[96,144208,130642],{"class":165},[96,144210,144211,144213,144215,144217,144219,144221],{"class":98,"line":19},[96,144212,1017],{"class":106},[96,144214,51590],{"class":51279},[96,144216,53465],{"class":1946},[96,144218,152],{"class":106},[96,144220,130655],{"class":211},[96,144222,51286],{"class":106},[96,144224,144225],{"class":98,"line":1162},[96,144226,130662],{"class":106},[96,144228,144229,144231,144233],{"class":98,"line":1177},[96,144230,51764],{"class":106},[96,144232,51590],{"class":51279},[96,144234,51286],{"class":106},[5110,144236,137932],{},{"title":18,"searchDepth":19,"depth":19,"links":144238},[144239,144240,144244,144245,144246],{"id":143383,"depth":19,"text":143384},{"id":143415,"depth":19,"text":143416,"children":144241},[144242,144243],{"id":143419,"depth":1162,"text":143420},{"id":143436,"depth":1162,"text":143437},{"id":143455,"depth":19,"text":143456},{"id":143462,"depth":19,"text":143463},{"id":143549,"depth":19,"text":143550,"children":144247},[144248,144249,144250,144251,144252],{"id":143556,"depth":1162,"text":143557},{"id":143684,"depth":1162,"text":143685},{"id":143778,"depth":1162,"text":143779},{"id":143827,"depth":1162,"text":143828},{"id":143837,"depth":1162,"text":143838},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143375,"description":23361},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144259,"title":144260,"body":144261,"description":23361,"extension":21,"meta":145488,"navigation":23,"path":145489,"seo":145490,"stem":145491,"__hash__":145492},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144262,"toc":145466},[144263,144266,144270,144274,144277,144280,144284,144289,144292,144295,144298,144301,144304,144361,144364,144369,144372,144375,144379,144390,144394,144397,144400,144407,144412,144416,144419,144425,144428,144432,144435,144442,144445,144448,144455,144458,144465,144468,144471,144478,144481,144484,144486,144503,144507,144510,144513,144516,144520,144523,144526,144529,144532,144535,144538,144540,144543,144546,144608,144611,144721,144728,144734,144737,144740,144744,144747,144751,144756,144759,144766,144769,144775,144780,144783,144786,144789,144792,144795,144798,144801,144804,144860,144862,144888,144892,144895,144898,144901,144909,144912,144915,144919,144975,144978,144982,144988,144999,145002,145007,145010,145013,145019,145022,145025,145028,145031,145034,145037,145040,145043,145068,145074,145077,145080,145083,145086,145089,145092,145097,145100,145103,145106,145114,145117,145124,145127,145130,145132,145156,145158,145161,145164,145167,145170,145173,145176,145179,145213,145216,145219,145253,145260,145263,145266,145269,145272,145275,145278,145285,145288,145291,145294,145297,145304,145307,145310,145317,145320,145323,145327,145330,145333,145336,145339,145342,145345,145348,145351,145353,145377,145379,145403,145407,145418,145421,145424,145427,145430,145433,145436,145439,145442,145445,145448,145451,145454,145457,145460,145463],[10,144264,144260],{"id":144265},"_21-移动端布局实战下篇",[38,144267,144269],{"id":144268},"_211-rem适配布局","21.1 rem适配布局",[67,144271,144273],{"id":144272},"_2111-rem单位","21.1.1 rem单位",[1445,144275],{"style":126387,"src":144276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[14,144278,144279],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[67,144281,144283],{"id":144282},"_2112-媒体查询","21.1.2 媒体查询",[50,144285,144286],{},[53,144287,144288],{},"参数介绍",[1445,144290],{"style":126387,"src":144291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[1445,144293],{"style":126387,"src":144294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[1445,144296],{"style":126387,"src":144297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[1445,144299],{"style":126387,"src":144300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[1445,144302],{"style":126387,"src":144303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[87,144305,144307],{"className":126531,"code":144306,"language":126533,"meta":18,"style":18},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[93,144308,144309,144314,144333,144340,144353,144357],{"__ignoreMap":18},[96,144310,144311],{"class":98,"line":99},[96,144312,144313],{"class":165},"\u002F* 媒体查询 *\u002F\n",[96,144315,144316,144319,144321,144324,144326,144329,144331],{"class":98,"line":19},[96,144317,144318],{"class":102},"@media",[96,144320,1641],{"class":106},[96,144322,144323],{"class":155},"max-width",[96,144325,51416],{"class":106},[96,144327,144328],{"class":155},"768",[96,144330,51471],{"class":102},[96,144332,12426],{"class":106},[96,144334,144335,144338],{"class":98,"line":1162},[96,144336,144337],{"class":1946},"  .container",[96,144339,15556],{"class":106},[96,144341,144342,144345,144347,144349,144351],{"class":98,"line":1177},[96,144343,144344],{"class":155},"    width",[96,144346,51416],{"class":106},[96,144348,418],{"class":155},[96,144350,435],{"class":102},[96,144352,1273],{"class":106},[96,144354,144355],{"class":98,"line":1183},[96,144356,127327],{"class":106},[96,144358,144359],{"class":98,"line":1197},[96,144360,1548],{"class":106},[14,144362,144363],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[50,144365,144366],{"start":19},[53,144367,144368],{},"引入资源",[1445,144370],{"style":126387,"src":144371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[14,144373,144374],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[67,144376,144378],{"id":144377},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1114,144380,144381,144384,144387],{},[53,144382,144383],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[53,144385,144386],{},"媒体查询可以根据不同设备宽度来修改样式",[53,144388,144389],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[38,144391,144393],{"id":144392},"_212-less基础","21.2 Less基础",[14,144395,144396],{},"css冗余度较高，不利于复用，没有很好的计算能力",[14,144398,144399],{},"Less可以解决该问题，它是css的扩展语言",[14,144401,144402,144403],{},"Less中文网址： ",[345,144404,144405],{"href":144405,"rel":144406},"http:\u002F\u002Flesscss.cn\u002F",[23850],[14,144408,144409],{},[256,144410,144411],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[67,144413,144415],{"id":144414},"_2121-less安装","21.2.1 less安装",[14,144417,144418],{},"如果使用vscode，则无需进行下方安装步骤",[14,144420,144421],{},[345,144422,144423],{"href":144423,"rel":144424},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[23850],[1445,144426],{"style":126387,"src":144427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[67,144429,144431],{"id":144430},"_2122-less使用","21.2.2 less使用",[14,144433,144434],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[50,144436,144437],{},[53,144438,144439],{},[256,144440,144441],{},"Less 变量",[1445,144443],{"style":126387,"src":144444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[1445,144446],{"style":126387,"src":144447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[50,144449,144450],{"start":19},[53,144451,144452],{},[256,144453,144454],{},"Less 编译",[1445,144456],{"style":126387,"src":144457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[50,144459,144460],{"start":1162},[53,144461,144462],{},[256,144463,144464],{},"Less 嵌套",[1445,144466],{"style":126387,"src":144467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[1445,144469],{"style":126387,"src":144470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[50,144472,144473],{"start":1177},[53,144474,144475],{},[256,144476,144477],{},"Less 运算",[1445,144479],{"style":126387,"src":144480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[14,144482,144483],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[14,144485,136],{},[1114,144487,144488,144491,144494,144497,144500],{},[53,144489,144490],{},"乘号（*）和除号（\u002F）的写法",[53,144492,144493],{},"运算符中间左右有个空格隔开 1px + 5",[53,144495,144496],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[53,144498,144499],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[53,144501,144502],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[38,144504,144506],{"id":144505},"_213-rem-适配方案","21.3 rem 适配方案",[14,144508,144509],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[14,144511,144512],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[1445,144514],{"style":126387,"src":144515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[67,144517,144519],{"id":144518},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[14,144521,144522],{},"rem + 媒体查询 + less 技术",[1445,144524],{"style":126387,"src":144525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[14,144527,144528],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[14,144530,144531],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[1445,144533],{"style":126387,"src":144534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[14,144536,144537],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[14,144539,14617],{},[1445,144541],{"style":126387,"src":144542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[14,144544,144545],{},"index.html:",[87,144547,144549],{"className":126531,"code":144548,"language":126533,"meta":18,"style":18},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[93,144550,144551,144556,144562,144578,144582,144588,144604],{"__ignoreMap":18},[96,144552,144553],{"class":98,"line":99},[96,144554,144555],{"class":165},"\u002F* rem 适配方案 *\u002F\n",[96,144557,144558,144560],{"class":98,"line":19},[96,144559,50614],{"class":51279},[96,144561,15556],{"class":106},[96,144563,144564,144566,144568,144571,144573,144575],{"class":98,"line":1162},[96,144565,70605],{"class":155},[96,144567,51416],{"class":106},[96,144569,144570],{"class":155},"62.5",[96,144572,435],{"class":102},[96,144574,130394],{"class":106},[96,144576,144577],{"class":165},"\u002F* 1rem = 10px *\u002F\n",[96,144579,144580],{"class":98,"line":1177},[96,144581,1548],{"class":106},[96,144583,144584,144586],{"class":98,"line":1183},[96,144585,130379],{"class":1946},[96,144587,15556],{"class":106},[96,144589,144590,144592,144594,144596,144599,144601],{"class":98,"line":1197},[96,144591,70547],{"class":155},[96,144593,51416],{"class":106},[96,144595,553],{"class":155},[96,144597,144598],{"class":102},"rem",[96,144600,130394],{"class":106},[96,144602,144603],{"class":165},"\u002F* 100px *\u002F\n",[96,144605,144606],{"class":98,"line":1203},[96,144607,1548],{"class":106},[14,144609,144610],{},"common.less",[87,144612,144614],{"className":126531,"code":144613,"language":126533,"meta":18,"style":18},"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",[93,144615,144616,144622,144637,144641,144647,144661,144665,144669,144673,144679,144693,144697,144703,144717],{"__ignoreMap":18},[96,144617,144618,144620],{"class":98,"line":99},[96,144619,50614],{"class":51279},[96,144621,15556],{"class":106},[96,144623,144624,144626,144628,144630,144632,144634],{"class":98,"line":19},[96,144625,70605],{"class":155},[96,144627,51416],{"class":106},[96,144629,144570],{"class":155},[96,144631,435],{"class":102},[96,144633,26046],{"class":106},[96,144635,144636],{"class":165},"\u002F* 10px *\u002F\n",[96,144638,144639],{"class":98,"line":1162},[96,144640,1548],{"class":106},[96,144642,144643,144645],{"class":98,"line":1177},[96,144644,51590],{"class":51279},[96,144646,15556],{"class":106},[96,144648,144649,144651,144653,144655,144657,144659],{"class":98,"line":1183},[96,144650,70547],{"class":155},[96,144652,51416],{"class":106},[96,144654,553],{"class":155},[96,144656,144598],{"class":102},[96,144658,26046],{"class":106},[96,144660,144603],{"class":165},[96,144662,144663],{"class":98,"line":1197},[96,144664,1548],{"class":106},[96,144666,144667],{"class":98,"line":1203},[96,144668,135992],{"class":106},[96,144670,144671],{"class":98,"line":1294},[96,144672,144555],{"class":165},[96,144674,144675,144677],{"class":98,"line":1300},[96,144676,50614],{"class":51279},[96,144678,15556],{"class":106},[96,144680,144681,144683,144685,144687,144689,144691],{"class":98,"line":1312},[96,144682,70605],{"class":155},[96,144684,51416],{"class":106},[96,144686,144570],{"class":155},[96,144688,435],{"class":102},[96,144690,130394],{"class":106},[96,144692,144577],{"class":165},[96,144694,144695],{"class":98,"line":1595},[96,144696,1548],{"class":106},[96,144698,144699,144701],{"class":98,"line":1600},[96,144700,130379],{"class":1946},[96,144702,15556],{"class":106},[96,144704,144705,144707,144709,144711,144713,144715],{"class":98,"line":1606},[96,144706,70547],{"class":155},[96,144708,51416],{"class":106},[96,144710,553],{"class":155},[96,144712,144598],{"class":102},[96,144714,130394],{"class":106},[96,144716,144603],{"class":165},[96,144718,144719],{"class":98,"line":1611},[96,144720,1548],{"class":106},[14,144722,144723,144724,144727],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23538,144725,144726],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[87,144729,144732],{"className":144730,"code":144731,"language":5171},[5169],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[93,144733,144731],{"__ignoreMap":18},[14,144735,144736],{},"less保存时会自动变成.css文件",[14,144738,144739],{},"好好搞懂上述代码写法",[67,144741,144743],{"id":144742},"_2132-样式导入样式","21.3.2 样式导入样式",[1445,144745],{"style":126387,"src":144746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[67,144748,144750],{"id":144749},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[50,144752,144753],{},[53,144754,144755],{},"准备工作",[1445,144757],{"style":126387,"src":144758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[14,144760,144761,144762],{},"github地址：",[345,144763,144764],{"href":144764,"rel":144765},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[23850],[14,144767,144768],{},"下载之后，将index.js文件拖到项目中就可以了",[14,144770,144771,144772],{},"js文件引入到index.html中使用的是",[93,144773,144774],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[50,144776,144777],{"start":19},[53,144778,144779],{},"vscode插件",[1445,144781],{"style":126387,"src":144782},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[14,144784,144785],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[14,144787,144788],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[1445,144790],{"style":126387,"src":144791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[14,144793,144794],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[1445,144796],{"style":126387,"src":144797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[14,144799,144800],{},"修改成75就可以，alt+z为快捷键",[14,144802,144803],{},"index.css：",[87,144805,144806],{"className":126531,"code":144548,"language":126533,"meta":18,"style":18},[93,144807,144808,144812,144818,144832,144836,144842,144856],{"__ignoreMap":18},[96,144809,144810],{"class":98,"line":99},[96,144811,144555],{"class":165},[96,144813,144814,144816],{"class":98,"line":19},[96,144815,50614],{"class":51279},[96,144817,15556],{"class":106},[96,144819,144820,144822,144824,144826,144828,144830],{"class":98,"line":1162},[96,144821,70605],{"class":155},[96,144823,51416],{"class":106},[96,144825,144570],{"class":155},[96,144827,435],{"class":102},[96,144829,130394],{"class":106},[96,144831,144577],{"class":165},[96,144833,144834],{"class":98,"line":1177},[96,144835,1548],{"class":106},[96,144837,144838,144840],{"class":98,"line":1183},[96,144839,130379],{"class":1946},[96,144841,15556],{"class":106},[96,144843,144844,144846,144848,144850,144852,144854],{"class":98,"line":1197},[96,144845,70547],{"class":155},[96,144847,51416],{"class":106},[96,144849,553],{"class":155},[96,144851,144598],{"class":102},[96,144853,130394],{"class":106},[96,144855,144603],{"class":165},[96,144857,144858],{"class":98,"line":1203},[96,144859,1548],{"class":106},[14,144861,144545],{},[87,144863,144864],{"className":126531,"code":126935,"language":126533,"meta":18,"style":18},[93,144865,144866,144872,144884],{"__ignoreMap":18},[96,144867,144868,144870],{"class":98,"line":99},[96,144869,51779],{"class":51279},[96,144871,15556],{"class":106},[96,144873,144874,144876,144878,144880,144882],{"class":98,"line":19},[96,144875,70605],{"class":155},[96,144877,51416],{"class":106},[96,144879,708],{"class":155},[96,144881,51471],{"class":102},[96,144883,1273],{"class":106},[96,144885,144886],{"class":98,"line":1162},[96,144887,1548],{"class":106},[38,144889,144891],{"id":144890},"_214-响应式开发","21.4 响应式开发",[14,144893,144894],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[1445,144896],{"style":126387,"src":144897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[14,144899,144900],{},"做法：",[1114,144902,144903,144906],{},[53,144904,144905],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[53,144907,144908],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[1445,144910],{"style":126387,"src":144911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[14,144913,144914],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[67,144916,144918],{"id":144917},"_2141-简单代码示范","21.4.1 简单代码示范",[87,144920,144921],{"className":126531,"code":144548,"language":126533,"meta":18,"style":18},[93,144922,144923,144927,144933,144947,144951,144957,144971],{"__ignoreMap":18},[96,144924,144925],{"class":98,"line":99},[96,144926,144555],{"class":165},[96,144928,144929,144931],{"class":98,"line":19},[96,144930,50614],{"class":51279},[96,144932,15556],{"class":106},[96,144934,144935,144937,144939,144941,144943,144945],{"class":98,"line":1162},[96,144936,70605],{"class":155},[96,144938,51416],{"class":106},[96,144940,144570],{"class":155},[96,144942,435],{"class":102},[96,144944,130394],{"class":106},[96,144946,144577],{"class":165},[96,144948,144949],{"class":98,"line":1177},[96,144950,1548],{"class":106},[96,144952,144953,144955],{"class":98,"line":1183},[96,144954,130379],{"class":1946},[96,144956,15556],{"class":106},[96,144958,144959,144961,144963,144965,144967,144969],{"class":98,"line":1197},[96,144960,70547],{"class":155},[96,144962,51416],{"class":106},[96,144964,553],{"class":155},[96,144966,144598],{"class":102},[96,144968,130394],{"class":106},[96,144970,144603],{"class":165},[96,144972,144973],{"class":98,"line":1203},[96,144974,1548],{"class":106},[14,144976,144977],{},"父盒子一般命名为container",[67,144979,144981],{"id":144980},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[14,144983,144984,144985],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[256,144986,144987],{},"使得 Web 开发更加快捷",[1114,144989,144990],{},[53,144991,144992,144993],{},"官网：",[256,144994,144995],{},[345,144996,144997],{"href":144997,"rel":144998},"http:\u002F\u002Fgetbootstrap.com\u002F",[23850],[14,145000,145001],{},"可以直接去官网拿现成的东西",[50,145003,145004],{},[53,145005,145006],{},"Bootstrap的使用",[14,145008,145009],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[14,145011,145012],{},"Bootstrap 使用四步曲：",[14,145014,145015,145018],{},[256,145016,145017],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[1445,145020],{"style":126387,"src":145021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[14,145023,145024],{},"打开Bootstrap官网，然后下载",[1445,145026],{"style":126387,"src":145027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[1445,145029],{"style":126387,"src":145030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[14,145032,145033],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[14,145035,145036],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[14,145038,145039],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[1445,145041],{"style":126387,"src":145042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[87,145044,145046],{"className":126531,"code":145045,"language":126533,"meta":18,"style":18},".center {\n  color: red;\n}\n",[93,145047,145048,145054,145064],{"__ignoreMap":18},[96,145049,145050,145052],{"class":98,"line":99},[96,145051,126822],{"class":1946},[96,145053,15556],{"class":106},[96,145055,145056,145058,145060,145062],{"class":98,"line":19},[96,145057,70884],{"class":155},[96,145059,51416],{"class":106},[96,145061,57400],{"class":155},[96,145063,1273],{"class":106},[96,145065,145066],{"class":98,"line":1162},[96,145067,1548],{"class":106},[14,145069,145070,145073],{},[93,145071,145072],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[1445,145075],{"style":126387,"src":145076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[1445,145078],{"style":126387,"src":145079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[1445,145081],{"style":126387,"src":145082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[14,145084,145085],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[1445,145087],{"style":126387,"src":145088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[14,145090,145091],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[50,145093,145094],{"start":19},[53,145095,145096],{},"布局容器",[1445,145098],{"style":126387,"src":145099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[14,145101,145102],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[14,145104,145105],{},"container-fluid用于移动式布局比较方便",[50,145107,145108],{"start":1162},[53,145109,145110,145111],{},"bootstrap ",[256,145112,145113],{},"栅格系统原理",[1445,145115],{"style":126387,"src":145116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[50,145118,145119],{"start":1177},[53,145120,145121],{},[256,145122,145123],{},"栅格选项参数",[1445,145125],{"style":126387,"src":145126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[14,145128,145129],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[14,145131,14617],{},[87,145133,145134],{"className":126531,"code":145045,"language":126533,"meta":18,"style":18},[93,145135,145136,145142,145152],{"__ignoreMap":18},[96,145137,145138,145140],{"class":98,"line":99},[96,145139,126822],{"class":1946},[96,145141,15556],{"class":106},[96,145143,145144,145146,145148,145150],{"class":98,"line":19},[96,145145,70884],{"class":155},[96,145147,51416],{"class":106},[96,145149,57400],{"class":155},[96,145151,1273],{"class":106},[96,145153,145154],{"class":98,"line":1162},[96,145155,1548],{"class":106},[14,145157,135574],{},[1445,145159],{"style":126387,"src":145160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[14,145162,145163],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[14,145165,145166],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[14,145168,145169],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[14,145171,145172],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[14,145174,145175],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[14,145177,145178],{},"汇总展示说明：",[87,145180,145181],{"className":127278,"code":130635,"language":127280,"meta":18,"style":18},[93,145182,145183,145187,145201,145205],{"__ignoreMap":18},[96,145184,145185],{"class":98,"line":99},[96,145186,130642],{"class":165},[96,145188,145189,145191,145193,145195,145197,145199],{"class":98,"line":19},[96,145190,1017],{"class":106},[96,145192,51590],{"class":51279},[96,145194,53465],{"class":1946},[96,145196,152],{"class":106},[96,145198,130655],{"class":211},[96,145200,51286],{"class":106},[96,145202,145203],{"class":98,"line":1162},[96,145204,130662],{"class":106},[96,145206,145207,145209,145211],{"class":98,"line":1177},[96,145208,51764],{"class":106},[96,145210,51590],{"class":51279},[96,145212,51286],{"class":106},[1445,145214],{"style":126387,"src":145215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[14,145217,145218],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[87,145220,145221],{"className":127278,"code":130635,"language":127280,"meta":18,"style":18},[93,145222,145223,145227,145241,145245],{"__ignoreMap":18},[96,145224,145225],{"class":98,"line":99},[96,145226,130642],{"class":165},[96,145228,145229,145231,145233,145235,145237,145239],{"class":98,"line":19},[96,145230,1017],{"class":106},[96,145232,51590],{"class":51279},[96,145234,53465],{"class":1946},[96,145236,152],{"class":106},[96,145238,130655],{"class":211},[96,145240,51286],{"class":106},[96,145242,145243],{"class":98,"line":1162},[96,145244,130662],{"class":106},[96,145246,145247,145249,145251],{"class":98,"line":1177},[96,145248,51764],{"class":106},[96,145250,51590],{"class":51279},[96,145252,51286],{"class":106},[50,145254,145255],{"start":1183},[53,145256,145257],{},[256,145258,145259],{},"列嵌套",[1445,145261],{"style":126387,"src":145262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[14,145264,145265],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[14,145267,145268],{},"没加row内部这样：",[1445,145270],{"style":126387,"src":145271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[14,145273,145274],{},"加上row之后内部为：",[1445,145276],{"style":126387,"src":145277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[50,145279,145280],{"start":1197},[53,145281,145282],{},[256,145283,145284],{},"列偏移",[1445,145286],{"style":126387,"src":145287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[14,145289,145290],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[14,145292,145293],{},"要加偏移量，即偏移份数",[14,145295,145296],{},"偏移的份数=12-两个盒子的份数",[50,145298,145299],{"start":1203},[53,145300,145301],{},[256,145302,145303],{},"列排序",[1445,145305],{"style":126387,"src":145306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[14,145308,145309],{},"pull拉左；push推右",[50,145311,145312],{"start":1294},[53,145313,145314],{},[256,145315,145316],{},"响应式工具",[1445,145318],{"style":126387,"src":145319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[14,145321,145322],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[67,145324,145326],{"id":145325},"_2143-响应式小项目","21.4.3 响应式小项目",[14,145328,145329],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[14,145331,145332],{},"ul {",[14,145334,145335],{},"list-style: none;",[14,145337,145338],{},"margin:0;",[14,145340,145341],{},"padding:0; }",[1445,145343],{"style":126387,"src":145344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[1445,145346],{"style":126387,"src":145347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[14,145349,145350],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[14,145352,68868],{},[87,145354,145355],{"className":126531,"code":139201,"language":126533,"meta":18,"style":18},[93,145356,145357,145363,145373],{"__ignoreMap":18},[96,145358,145359,145361],{"class":98,"line":99},[96,145360,130379],{"class":1946},[96,145362,15556],{"class":106},[96,145364,145365,145367,145369,145371],{"class":98,"line":19},[96,145366,131011],{"class":155},[96,145368,51416],{"class":106},[96,145370,23721],{"class":155},[96,145372,1273],{"class":106},[96,145374,145375],{"class":98,"line":1162},[96,145376,1548],{"class":106},[14,145378,70432],{},[87,145380,145381],{"className":126531,"code":139201,"language":126533,"meta":18,"style":18},[93,145382,145383,145389,145399],{"__ignoreMap":18},[96,145384,145385,145387],{"class":98,"line":99},[96,145386,130379],{"class":1946},[96,145388,15556],{"class":106},[96,145390,145391,145393,145395,145397],{"class":98,"line":19},[96,145392,131011],{"class":155},[96,145394,51416],{"class":106},[96,145396,23721],{"class":155},[96,145398,1273],{"class":106},[96,145400,145401],{"class":98,"line":1162},[96,145402,1548],{"class":106},[38,145404,145406],{"id":145405},"_215-swiper-插件使用","21.5 swiper 插件使用",[1114,145408,145409,145412,145415],{},[53,145410,145411],{},"下载需要的css和js文件html页面中 引入相关文件",[53,145413,145414],{},"官网找到类似案例，复制html结构，css样式 js 语法",[53,145416,145417],{},"根据需求定制修改模块",[1445,145419],{"style":126387,"src":145420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[14,145422,145423],{},"解压后将这两部分放到项目中",[1445,145425],{"style":126387,"src":145426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[14,145428,145429],{},"这个插件可以帮助我们实现轮播图效果",[14,145431,145432],{},"用法：",[1445,145434],{"style":126387,"src":145435},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[14,145437,145438],{},"找到自己喜欢的",[1445,145440],{"style":126387,"src":145441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[14,145443,145444],{},"右键，查看网页源代码",[1445,145446],{"style":126387,"src":145447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[14,145449,145450],{},"复制人家的结构内容",[14,145452,145453],{},"然后去看API文档：",[1445,145455],{"style":126387,"src":145456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[14,145458,145459],{},"可以看看如何修改样式",[14,145461,145462],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[5110,145464,145465],{},"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":18,"searchDepth":19,"depth":19,"links":145467},[145468,145473,145477,145482,145487],{"id":144268,"depth":19,"text":144269,"children":145469},[145470,145471,145472],{"id":144272,"depth":1162,"text":144273},{"id":144282,"depth":1162,"text":144283},{"id":144377,"depth":1162,"text":144378},{"id":144392,"depth":19,"text":144393,"children":145474},[145475,145476],{"id":144414,"depth":1162,"text":144415},{"id":144430,"depth":1162,"text":144431},{"id":144505,"depth":19,"text":144506,"children":145478},[145479,145480,145481],{"id":144518,"depth":1162,"text":144519},{"id":144742,"depth":1162,"text":144743},{"id":144749,"depth":1162,"text":144750},{"id":144890,"depth":19,"text":144891,"children":145483},[145484,145485,145486],{"id":144917,"depth":1162,"text":144918},{"id":144980,"depth":1162,"text":144981},{"id":145325,"depth":1162,"text":145326},{"id":145405,"depth":19,"text":145406},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144260,"description":23361},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145494,"title":145495,"body":145496,"description":23361,"extension":21,"meta":145716,"navigation":23,"path":145717,"seo":145718,"stem":145719,"__hash__":145720},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145497,"toc":145712},[145498,145501,145505,145508,145523,145528,145531,145536,145571,145576,145588,145593,145606,145611,145628,145633,145653,145658,145676,145679,145682,145685,145688,145692,145695,145698,145701,145704,145707,145710],[10,145499,145495],{"id":145500},"_22-代码提交与新型相对单位",[38,145502,145504],{"id":145503},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[14,145506,145507],{},"法1：",[50,145509,145510,145517,145520],{},[53,145511,145512,145513],{},"登录网站注册：",[345,145514,145515],{"href":145515,"rel":145516},"https:\u002F\u002Fgitee.com\u002F",[23850],[53,145518,145519],{},"码云创建新的仓库",[53,145521,145522],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1114,145524,145525],{},[53,145526,145527],{},"在网站根目录右键-- Git Bash Here",[1445,145529],{"style":126387,"src":145530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1114,145532,145533],{},[53,145534,145535],{},"如果是第一次利用git提交，请配置好全局选项",[87,145537,145539],{"className":117275,"code":145538,"language":117277,"meta":18,"style":18},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[93,145540,145541,145557],{"__ignoreMap":18},[96,145542,145543,145546,145548,145551,145554],{"class":98,"line":99},[96,145544,145545],{"class":1946},"git",[96,145547,119698],{"class":211},[96,145549,145550],{"class":155}," --global",[96,145552,145553],{"class":211}," user.name",[96,145555,145556],{"class":211}," \"你的名字\"\n",[96,145558,145559,145561,145563,145565,145568],{"class":98,"line":19},[96,145560,145545],{"class":1946},[96,145562,119698],{"class":211},[96,145564,145550],{"class":155},[96,145566,145567],{"class":211}," user.email",[96,145569,145570],{"class":211}," \"你的邮箱\"\n",[1114,145572,145573],{},[53,145574,145575],{},"初始化仓库",[87,145577,145579],{"className":117275,"code":145578,"language":117277,"meta":18,"style":18},"git init\n",[93,145580,145581],{"__ignoreMap":18},[96,145582,145583,145585],{"class":98,"line":99},[96,145584,145545],{"class":1946},[96,145586,145587],{"class":211}," init\n",[1114,145589,145590],{},[53,145591,145592],{},"把本地文件放到暂存区",[87,145594,145596],{"className":117275,"code":145595,"language":117277,"meta":18,"style":18},"git add .\n",[93,145597,145598],{"__ignoreMap":18},[96,145599,145600,145602,145604],{"class":98,"line":99},[96,145601,145545],{"class":1946},[96,145603,5193],{"class":211},[96,145605,28720],{"class":211},[1114,145607,145608],{},[53,145609,145610],{},"把本地文件放到本地仓库里面",[87,145612,145614],{"className":117275,"code":145613,"language":117277,"meta":18,"style":18},"git commit -m \"first commit\"\n",[93,145615,145616],{"__ignoreMap":18},[96,145617,145618,145620,145623,145625],{"class":98,"line":99},[96,145619,145545],{"class":1946},[96,145621,145622],{"class":211}," commit",[96,145624,100861],{"class":155},[96,145626,145627],{"class":211}," \"first commit\"\n",[1114,145629,145630],{},[53,145631,145632],{},"链接远程仓库",[87,145634,145636],{"className":117275,"code":145635,"language":117277,"meta":18,"style":18},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[93,145637,145638],{"__ignoreMap":18},[96,145639,145640,145642,145645,145647,145650],{"class":98,"line":99},[96,145641,145545],{"class":1946},[96,145643,145644],{"class":211}," remote",[96,145646,5193],{"class":211},[96,145648,145649],{"class":211}," origin",[96,145651,145652],{"class":211}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1114,145654,145655],{},[53,145656,145657],{},"把本地仓库的文件推送到远程仓库 push",[87,145659,145661],{"className":117275,"code":145660,"language":117277,"meta":18,"style":18},"git push -u origin master\n",[93,145662,145663],{"__ignoreMap":18},[96,145664,145665,145667,145669,145671,145673],{"class":98,"line":99},[96,145666,145545],{"class":1946},[96,145668,28995],{"class":211},[96,145670,28269],{"class":155},[96,145672,145649],{"class":211},[96,145674,145675],{"class":211}," master\n",[1445,145677],{"style":126387,"src":145678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[14,145680,145681],{},"上方方法暂未实现，后边学完git后在整",[14,145683,145684],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[1445,145686],{"style":126387,"src":145687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[38,145689,145691],{"id":145690},"_222-新型相对单位","22.2 新型相对单位",[1445,145693],{"style":126387,"src":145694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[1445,145696],{"style":126387,"src":145697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[14,145699,145700],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[14,145702,145703],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[1445,145705],{"style":126387,"src":145706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[14,145708,145709],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[5110,145711,23943],{},{"title":18,"searchDepth":19,"depth":19,"links":145713},[145714,145715],{"id":145503,"depth":19,"text":145504},{"id":145690,"depth":19,"text":145691},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145495,"description":23361},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145722,"title":145723,"body":145724,"description":145728,"extension":21,"meta":145729,"navigation":23,"path":145730,"seo":145731,"stem":145732,"__hash__":145733},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145725,"toc":145726},[],{"title":18,"searchDepth":19,"depth":19,"links":145727},[],"自己正经开始学编程的第一门语言！",{"category":92818},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145723,"description":145728},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145735,"title":145736,"body":145737,"description":23361,"extension":21,"meta":146884,"navigation":23,"path":146885,"seo":146886,"stem":146887,"__hash__":146888},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145738,"toc":146860},[145739,145742,145746,145749,145752,145777,145780,145786,145790,145793,145820,145823,145863,145866,145878,145881,145887,145891,145895,145922,145939,145946,145950,145953,145979,145982,145986,145989,146029,146032,146049,146055,146059,146064,146108,146111,146129,146132,146200,146204,146211,146214,146229,146232,146241,146244,146255,146258,146267,146270,146287,146290,146305,146309,146313,146316,146318,146338,146342,146345,146348,146359,146362,146368,146372,146378,146405,146408,146420,146423,146434,146437,146443,146447,146453,146503,146506,146548,146551,146584,146587,146621,146625,146628,146648,146651,146687,146690,146703,146707,146711,146717,146720,146733,146737,146740,146746,146749,146753,146756,146759,146808,146812,146828,146834,146841,146847,146857],[10,145740,145736],{"id":145741},"_1-python环境与第一个程序",[38,145743,145745],{"id":145744},"_11-什么是python","1.1 什么是Python",[14,145747,145748],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[14,145750,145751],{},"理解 Python 时抓住三个关键词：",[50,145753,145754,145757,145760],{},[53,145755,145756],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[53,145758,145759],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[53,145761,145762,145763,319,145766,319,145769,319,145772,319,145774,28364],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[93,145764,145765],{},"os",[93,145767,145768],{},"sys",[93,145770,145771],{},"json",[93,145773,57839],{},[93,145775,145776],{},"datetime",[14,145778,145779],{},"Python 程序的运行链路：",[87,145781,145784],{"className":145782,"code":145783,"language":5171,"meta":18},[5169],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[93,145785,145783],{"__ignoreMap":18},[38,145787,145789],{"id":145788},"_12-python解释器","1.2 Python解释器",[14,145791,145792],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[87,145794,145796],{"className":23807,"code":145795,"language":23809,"meta":18,"style":18},"python --version\npython3 --version\npython\npython3\n",[93,145797,145798,145804,145810,145815],{"__ignoreMap":18},[96,145799,145800,145802],{"class":98,"line":99},[96,145801,30359],{"class":1946},[96,145803,26272],{"class":155},[96,145805,145806,145808],{"class":98,"line":19},[96,145807,100858],{"class":1946},[96,145809,26272],{"class":155},[96,145811,145812],{"class":98,"line":1162},[96,145813,145814],{"class":1946},"python\n",[96,145816,145817],{"class":98,"line":1177},[96,145818,145819],{"class":1946},"python3\n",[14,145821,145822],{},"进入交互模式后，可以直接输入表达式：",[87,145824,145826],{"className":30357,"code":145825,"language":30359,"meta":18,"style":18},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[93,145827,145828,145839,145844,145858],{"__ignoreMap":18},[96,145829,145830,145833,145835,145837],{"class":98,"line":99},[96,145831,145832],{"class":102},">>>",[96,145834,25097],{"class":155},[96,145836,45545],{"class":102},[96,145838,47702],{"class":155},[96,145840,145841],{"class":98,"line":19},[96,145842,145843],{"class":155},"3\n",[96,145845,145846,145848,145851,145853,145856],{"class":98,"line":1162},[96,145847,145832],{"class":102},[96,145849,145850],{"class":155}," print",[96,145852,107],{"class":106},[96,145854,145855],{"class":211},"\"hello python\"",[96,145857,113],{"class":106},[96,145859,145860],{"class":98,"line":1177},[96,145861,145862],{"class":106},"hello python\n",[14,145864,145865],{},"退出交互模式：",[87,145867,145869],{"className":30357,"code":145868,"language":30359,"meta":18,"style":18},"exit()\n",[93,145870,145871],{"__ignoreMap":18},[96,145872,145873,145876],{"class":98,"line":99},[96,145874,145875],{"class":155},"exit",[96,145877,1959],{"class":106},[14,145879,145880],{},"或使用快捷键：",[87,145882,145885],{"className":145883,"code":145884,"language":5171,"meta":18},[5169],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[93,145886,145884],{"__ignoreMap":18},[38,145888,145890],{"id":145889},"_13-安装python","1.3 安装Python",[67,145892,145894],{"id":145893},"_131-windows安装","1.3.1 Windows安装",[50,145896,145897,145904,145907,145913,145919],{},[53,145898,145899,145900],{},"打开 Python 官网：",[345,145901,145902],{"href":145902,"rel":145903},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[23850],[53,145905,145906],{},"下载 Windows Installer。",[53,145908,145909,145910,28364],{},"安装时勾选 ",[93,145911,145912],{},"Add Python to PATH",[53,145914,145915,145916,28364],{},"点击 ",[93,145917,145918],{},"Install Now",[53,145920,145921],{},"安装完成后打开命令提示符验证：",[87,145923,145925],{"className":23807,"code":145924,"language":23809,"meta":18,"style":18},"python --version\npip --version\n",[93,145926,145927,145933],{"__ignoreMap":18},[96,145928,145929,145931],{"class":98,"line":99},[96,145930,30359],{"class":1946},[96,145932,26272],{"class":155},[96,145934,145935,145937],{"class":98,"line":19},[96,145936,23816],{"class":1946},[96,145938,26272],{"class":155},[14,145940,145941,145942,145945],{},"如果提示 ",[93,145943,145944],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[67,145947,145949],{"id":145948},"_132-macos安装","1.3.2 macOS安装",[14,145951,145952],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[87,145954,145956],{"className":23807,"code":145955,"language":23809,"meta":18,"style":18},"brew install python\npython3 --version\npip3 --version\n",[93,145957,145958,145967,145973],{"__ignoreMap":18},[96,145959,145960,145963,145965],{"class":98,"line":99},[96,145961,145962],{"class":1946},"brew",[96,145964,23819],{"class":211},[96,145966,124297],{"class":211},[96,145968,145969,145971],{"class":98,"line":19},[96,145970,100858],{"class":1946},[96,145972,26272],{"class":155},[96,145974,145975,145977],{"class":98,"line":1162},[96,145976,119679],{"class":1946},[96,145978,26272],{"class":155},[14,145980,145981],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[67,145983,145985],{"id":145984},"_133-linux安装","1.3.3 Linux安装",[14,145987,145988],{},"Ubuntu\u002FDebian：",[87,145990,145992],{"className":23807,"code":145991,"language":23809,"meta":18,"style":18},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[93,145993,145994,146002,146017,146023],{"__ignoreMap":18},[96,145995,145996,145998,146000],{"class":98,"line":99},[96,145997,24555],{"class":1946},[96,145999,117296],{"class":211},[96,146001,26221],{"class":211},[96,146003,146004,146006,146008,146010,146012,146014],{"class":98,"line":19},[96,146005,24555],{"class":1946},[96,146007,117296],{"class":211},[96,146009,23819],{"class":211},[96,146011,104382],{"class":211},[96,146013,100777],{"class":211},[96,146015,146016],{"class":211}," python3-venv\n",[96,146018,146019,146021],{"class":98,"line":1162},[96,146020,100858],{"class":1946},[96,146022,26272],{"class":155},[96,146024,146025,146027],{"class":98,"line":1177},[96,146026,119679],{"class":1946},[96,146028,26272],{"class":155},[14,146030,146031],{},"Fedora：",[87,146033,146035],{"className":23807,"code":146034,"language":23809,"meta":18,"style":18},"sudo dnf install python3 python3-pip\n",[93,146036,146037],{"__ignoreMap":18},[96,146038,146039,146041,146043,146045,146047],{"class":98,"line":99},[96,146040,24555],{"class":1946},[96,146042,26294],{"class":211},[96,146044,23819],{"class":211},[96,146046,104382],{"class":211},[96,146048,119744],{"class":211},[14,146050,146051,146052,146054],{},"Linux 上通常使用 ",[93,146053,100858],{}," 命令，避免和系统旧版本 Python 冲突。",[38,146056,146058],{"id":146057},"_14-pip包管理器","1.4 pip包管理器",[14,146060,146061,146063],{},[93,146062,23816],{}," 用来安装第三方库。",[87,146065,146067],{"className":23807,"code":146066,"language":23809,"meta":18,"style":18},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[93,146068,146069,146078,146087,146095,146101],{"__ignoreMap":18},[96,146070,146071,146073,146075],{"class":98,"line":99},[96,146072,23816],{"class":1946},[96,146074,23819],{"class":211},[96,146076,146077],{"class":211}," requests\n",[96,146079,146080,146082,146085],{"class":98,"line":19},[96,146081,23816],{"class":1946},[96,146083,146084],{"class":211}," uninstall",[96,146086,146077],{"class":211},[96,146088,146089,146091,146093],{"class":98,"line":1162},[96,146090,23816],{"class":1946},[96,146092,117553],{"class":211},[96,146094,146077],{"class":211},[96,146096,146097,146099],{"class":98,"line":1177},[96,146098,23816],{"class":1946},[96,146100,118934],{"class":211},[96,146102,146103,146105],{"class":98,"line":1183},[96,146104,23816],{"class":1946},[96,146106,146107],{"class":211}," freeze\n",[14,146109,146110],{},"国内网络较慢时可以临时使用镜像：",[87,146112,146114],{"className":23807,"code":146113,"language":23809,"meta":18,"style":18},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[93,146115,146116],{"__ignoreMap":18},[96,146117,146118,146120,146122,146125,146127],{"class":98,"line":99},[96,146119,23816],{"class":1946},[96,146121,23819],{"class":211},[96,146123,146124],{"class":211}," requests",[96,146126,26409],{"class":155},[96,146128,119707],{"class":211},[14,146130,146131],{},"常见第三方库：",[244,146133,146134,146143],{},[247,146135,146136],{},[250,146137,146138,146141],{},[253,146139,146140],{},"库",[253,146142,102675],{},[291,146144,146145,146153,146160,146168,146176,146184,146192],{},[250,146146,146147,146150],{},[296,146148,146149],{},"requests",[296,146151,146152],{},"网络请求",[250,146154,146155,146157],{},[296,146156,100605],{},[296,146158,146159],{},"数值计算",[250,146161,146162,146165],{},[296,146163,146164],{},"pandas",[296,146166,146167],{},"表格数据处理",[250,146169,146170,146173],{},[296,146171,146172],{},"matplotlib",[296,146174,146175],{},"绘图",[250,146177,146178,146181],{},[296,146179,146180],{},"pyecharts",[296,146182,146183],{},"ECharts 图表",[250,146185,146186,146189],{},[296,146187,146188],{},"flask",[296,146190,146191],{},"Web 后端",[250,146193,146194,146197],{},[296,146195,146196],{},"pytest",[296,146198,146199],{},"自动化测试",[38,146201,146203],{"id":146202},"_15-虚拟环境","1.5 虚拟环境",[14,146205,146206,146207,146210],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[93,146208,146209],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[14,146212,146213],{},"创建虚拟环境：",[87,146215,146217],{"className":23807,"code":146216,"language":23809,"meta":18,"style":18},"python -m venv .venv\n",[93,146218,146219],{"__ignoreMap":18},[96,146220,146221,146223,146225,146227],{"class":98,"line":99},[96,146222,30359],{"class":1946},[96,146224,100861],{"class":155},[96,146226,100864],{"class":211},[96,146228,100867],{"class":211},[14,146230,146231],{},"Windows 激活：",[87,146233,146235],{"className":23807,"code":146234,"language":23809,"meta":18,"style":18},".venv\\Scripts\\activate\n",[93,146236,146237],{"__ignoreMap":18},[96,146238,146239],{"class":98,"line":99},[96,146240,146234],{"class":1946},[14,146242,146243],{},"macOS\u002FLinux 激活：",[87,146245,146247],{"className":23807,"code":146246,"language":23809,"meta":18,"style":18},"source .venv\u002Fbin\u002Factivate\n",[93,146248,146249],{"__ignoreMap":18},[96,146250,146251,146253],{"class":98,"line":99},[96,146252,100872],{"class":155},[96,146254,100875],{"class":211},[14,146256,146257],{},"退出虚拟环境：",[87,146259,146261],{"className":23807,"code":146260,"language":23809,"meta":18,"style":18},"deactivate\n",[93,146262,146263],{"__ignoreMap":18},[96,146264,146265],{"class":98,"line":99},[96,146266,146260],{"class":1946},[14,146268,146269],{},"保存依赖：",[87,146271,146273],{"className":23807,"code":146272,"language":23809,"meta":18,"style":18},"pip freeze > requirements.txt\n",[93,146274,146275],{"__ignoreMap":18},[96,146276,146277,146279,146282,146284],{"class":98,"line":99},[96,146278,23816],{"class":1946},[96,146280,146281],{"class":211}," freeze",[96,146283,26201],{"class":102},[96,146285,146286],{"class":211}," requirements.txt\n",[14,146288,146289],{},"安装依赖：",[87,146291,146293],{"className":23807,"code":146292,"language":23809,"meta":18,"style":18},"pip install -r requirements.txt\n",[93,146294,146295],{"__ignoreMap":18},[96,146296,146297,146299,146301,146303],{"class":98,"line":99},[96,146298,23816],{"class":1946},[96,146300,23819],{"class":211},[96,146302,119618],{"class":155},[96,146304,146286],{"class":211},[38,146306,146308],{"id":146307},"_16-开发工具","1.6 开发工具",[67,146310,146312],{"id":146311},"_161-pycharm","1.6.1 PyCharm",[14,146314,146315],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[14,146317,122041],{},[50,146319,146320,146323,146326,146332,146335],{},[53,146321,146322],{},"New Project：创建项目。",[53,146324,146325],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[53,146327,146328,146329,125962],{},"New Python File：创建 ",[93,146330,146331],{},".py",[53,146333,146334],{},"Run：运行当前文件。",[53,146336,146337],{},"Debug：断点调试。",[67,146339,146341],{"id":146340},"_162-vs-code","1.6.2 VS Code",[14,146343,146344],{},"VS Code 轻量，适合后续多语言开发。",[14,146346,146347],{},"建议安装插件：",[50,146349,146350,146353,146356],{},[53,146351,146352],{},"Python。",[53,146354,146355],{},"Pylance。",[53,146357,146358],{},"Jupyter。",[14,146360,146361],{},"选择解释器：",[87,146363,146366],{"className":146364,"code":146365,"language":5171,"meta":18},[5169],"Ctrl + Shift + P -> Python: Select Interpreter\n",[93,146367,146365],{"__ignoreMap":18},[38,146369,146371],{"id":146370},"_17-第一个python程序","1.7 第一个Python程序",[14,146373,146374,146375,24597],{},"创建文件 ",[93,146376,146377],{},"hello.py",[87,146379,146381],{"className":30357,"code":146380,"language":30359,"meta":18,"style":18},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[93,146382,146383,146394],{"__ignoreMap":18},[96,146384,146385,146387,146389,146392],{"class":98,"line":99},[96,146386,30394],{"class":155},[96,146388,107],{"class":106},[96,146390,146391],{"class":211},"\"Hello World\"",[96,146393,113],{"class":106},[96,146395,146396,146398,146400,146403],{"class":98,"line":19},[96,146397,30394],{"class":155},[96,146399,107],{"class":106},[96,146401,146402],{"class":211},"\"你好，Python\"",[96,146404,113],{"class":106},[14,146406,146407],{},"在终端运行：",[87,146409,146411],{"className":23807,"code":146410,"language":23809,"meta":18,"style":18},"python hello.py\n",[93,146412,146413],{"__ignoreMap":18},[96,146414,146415,146417],{"class":98,"line":99},[96,146416,30359],{"class":1946},[96,146418,146419],{"class":211}," hello.py\n",[14,146421,146422],{},"或：",[87,146424,146426],{"className":23807,"code":146425,"language":23809,"meta":18,"style":18},"python3 hello.py\n",[93,146427,146428],{"__ignoreMap":18},[96,146429,146430,146432],{"class":98,"line":99},[96,146431,100858],{"class":1946},[96,146433,146419],{"class":211},[14,146435,146436],{},"输出：",[87,146438,146441],{"className":146439,"code":146440,"language":5171,"meta":18},[5169],"Hello World\n你好，Python\n",[93,146442,146440],{"__ignoreMap":18},[38,146444,146446],{"id":146445},"_18-print函数","1.8 print函数",[14,146448,146449,146452],{},[93,146450,146451],{},"print()"," 用来输出内容。",[87,146454,146456],{"className":30357,"code":146455,"language":30359,"meta":18,"style":18},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[93,146457,146458,146468,146478,146488],{"__ignoreMap":18},[96,146459,146460,146462,146464,146466],{"class":98,"line":99},[96,146461,30394],{"class":155},[96,146463,107],{"class":106},[96,146465,5828],{"class":211},[96,146467,113],{"class":106},[96,146469,146470,146472,146474,146476],{"class":98,"line":19},[96,146471,30394],{"class":155},[96,146473,107],{"class":106},[96,146475,418],{"class":155},[96,146477,113],{"class":106},[96,146479,146480,146482,146484,146486],{"class":98,"line":1162},[96,146481,30394],{"class":155},[96,146483,107],{"class":106},[96,146485,156],{"class":155},[96,146487,113],{"class":106},[96,146489,146490,146492,146494,146497,146499,146501],{"class":98,"line":1177},[96,146491,30394],{"class":155},[96,146493,107],{"class":106},[96,146495,146496],{"class":211},"\"年龄:\"",[96,146498,12419],{"class":106},[96,146500,757],{"class":155},[96,146502,113],{"class":106},[14,146504,146505],{},"多个内容用逗号隔开，默认中间加空格：",[87,146507,146509],{"className":30357,"code":146508,"language":30359,"meta":18,"style":18},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[93,146510,146511,146521,146531],{"__ignoreMap":18},[96,146512,146513,146516,146518],{"class":98,"line":99},[96,146514,146515],{"class":106},"name ",[96,146517,152],{"class":102},[96,146519,146520],{"class":211}," \"张三\"\n",[96,146522,146523,146526,146528],{"class":98,"line":19},[96,146524,146525],{"class":106},"age ",[96,146527,152],{"class":102},[96,146529,146530],{"class":155}," 18\n",[96,146532,146533,146535,146537,146540,146543,146545],{"class":98,"line":1162},[96,146534,30394],{"class":155},[96,146536,107],{"class":106},[96,146538,146539],{"class":211},"\"姓名:\"",[96,146541,146542],{"class":106},", name, ",[96,146544,146496],{"class":211},[96,146546,146547],{"class":106},", age)\n",[14,146549,146550],{},"修改分隔符：",[87,146552,146554],{"className":30357,"code":146553,"language":30359,"meta":18,"style":18},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[93,146555,146556],{"__ignoreMap":18},[96,146557,146558,146560,146562,146565,146567,146569,146571,146573,146575,146578,146580,146582],{"class":98,"line":99},[96,146559,30394],{"class":155},[96,146561,107],{"class":106},[96,146563,146564],{"class":211},"\"2024\"",[96,146566,12419],{"class":106},[96,146568,54295],{"class":211},[96,146570,12419],{"class":106},[96,146572,54295],{"class":211},[96,146574,12419],{"class":106},[96,146576,146577],{"class":5200},"sep",[96,146579,152],{"class":102},[96,146581,32462],{"class":211},[96,146583,113],{"class":106},[14,146585,146586],{},"修改结尾符：",[87,146588,146590],{"className":30357,"code":146589,"language":30359,"meta":18,"style":18},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[93,146591,146592,146610],{"__ignoreMap":18},[96,146593,146594,146596,146598,146600,146602,146604,146606,146608],{"class":98,"line":99},[96,146595,30394],{"class":155},[96,146597,107],{"class":106},[96,146599,5828],{"class":211},[96,146601,12419],{"class":106},[96,146603,45780],{"class":5200},[96,146605,152],{"class":102},[96,146607,4342],{"class":211},[96,146609,113],{"class":106},[96,146611,146612,146614,146616,146619],{"class":98,"line":19},[96,146613,30394],{"class":155},[96,146615,107],{"class":106},[96,146617,146618],{"class":211},"\"python\"",[96,146620,113],{"class":106},[38,146622,146624],{"id":146623},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[14,146626,146627],{},"交互运行适合临时验证：",[87,146629,146631],{"className":30357,"code":146630,"language":30359,"meta":18,"style":18},">>> 10 * 3\n30\n",[93,146632,146633,146643],{"__ignoreMap":18},[96,146634,146635,146637,146639,146641],{"class":98,"line":99},[96,146636,145832],{"class":102},[96,146638,2021],{"class":155},[96,146640,6502],{"class":102},[96,146642,120015],{"class":155},[96,146644,146645],{"class":98,"line":19},[96,146646,146647],{"class":155},"30\n",[14,146649,146650],{},"脚本运行适合保存程序：",[87,146652,146654],{"className":30357,"code":146653,"language":30359,"meta":18,"style":18},"price = 8\ncount = 5\nprint(price * count)\n",[93,146655,146656,146666,146675],{"__ignoreMap":18},[96,146657,146658,146661,146663],{"class":98,"line":99},[96,146659,146660],{"class":106},"price ",[96,146662,152],{"class":102},[96,146664,146665],{"class":155}," 8\n",[96,146667,146668,146671,146673],{"class":98,"line":19},[96,146669,146670],{"class":106},"count ",[96,146672,152],{"class":102},[96,146674,54406],{"class":155},[96,146676,146677,146679,146682,146684],{"class":98,"line":1162},[96,146678,30394],{"class":155},[96,146680,146681],{"class":106},"(price ",[96,146683,562],{"class":102},[96,146685,146686],{"class":106}," count)\n",[14,146688,146689],{},"实际学习中推荐：",[50,146691,146692,146695,146700],{},[53,146693,146694],{},"临时试一个语法，用交互模式。",[53,146696,146697,146698,125962],{},"写完整练习，用 ",[93,146699,146331],{},[53,146701,146702],{},"写项目，用独立目录和虚拟环境。",[38,146704,146706],{"id":146705},"_110-常见错误","1.10 常见错误",[67,146708,146710],{"id":146709},"_1101-命令找不到","1.10.1 命令找不到",[87,146712,146715],{"className":146713,"code":146714,"language":5171,"meta":18},[5169],"python: command not found\n",[93,146716,146714],{"__ignoreMap":18},[14,146718,146719],{},"原因：",[50,146721,146722,146725,146728],{},[53,146723,146724],{},"没安装 Python。",[53,146726,146727],{},"PATH 没配置。",[53,146729,146730,146731,28364],{},"Linux\u002FmacOS 应该使用 ",[93,146732,100858],{},[67,146734,146736],{"id":146735},"_1102-文件名冲突","1.10.2 文件名冲突",[14,146738,146739],{},"不要把文件命名为：",[87,146741,146744],{"className":146742,"code":146743,"language":5171,"meta":18},[5169],"random.py\njson.py\ntime.py\nrequests.py\n",[93,146745,146743],{"__ignoreMap":18},[14,146747,146748],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[67,146750,146752],{"id":146751},"_1103-中文乱码","1.10.3 中文乱码",[14,146754,146755],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[14,146757,146758],{},"如果读写文件出现乱码，要明确指定编码：",[87,146760,146762],{"className":30357,"code":146761,"language":30359,"meta":18,"style":18},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[93,146763,146764,146798],{"__ignoreMap":18},[96,146765,146766,146768,146771,146773,146776,146778,146781,146783,146786,146788,146791,146793,146795],{"class":98,"line":99},[96,146767,107812],{"class":102},[96,146769,146770],{"class":155}," open",[96,146772,107],{"class":106},[96,146774,146775],{"class":211},"\"data.txt\"",[96,146777,12419],{"class":106},[96,146779,146780],{"class":211},"\"r\"",[96,146782,12419],{"class":106},[96,146784,146785],{"class":5200},"encoding",[96,146787,152],{"class":102},[96,146789,146790],{"class":211},"\"utf-8\"",[96,146792,13698],{"class":106},[96,146794,31362],{"class":102},[96,146796,146797],{"class":106}," f:\n",[96,146799,146800,146803,146805],{"class":98,"line":19},[96,146801,146802],{"class":106},"    content ",[96,146804,152],{"class":102},[96,146806,146807],{"class":106}," f.read()\n",[38,146809,146811],{"id":146810},"_111-本章练习","1.11 本章练习",[50,146813,146814,146817,146823],{},[53,146815,146816],{},"安装 Python，并在终端输出版本号。",[53,146818,146819,146820,146822],{},"新建 ",[93,146821,146377],{},"，输出自己的姓名、年龄、学习目标。",[53,146824,104345,146825,146827],{},[93,146826,146451],{}," 输出下面格式：",[87,146829,146832],{"className":146830,"code":146831,"language":5171,"meta":18},[5169],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[93,146833,146831],{"__ignoreMap":18},[50,146835,146836],{"start":1177},[53,146837,104345,146838,146840],{},[93,146839,146577],{}," 输出日期：",[87,146842,146845],{"className":146843,"code":146844,"language":5171,"meta":18},[5169],"2024-10-10\n",[93,146846,146844],{"__ignoreMap":18},[50,146848,146849],{"start":1183},[53,146850,104345,146851,146853,146854,146856],{},[93,146852,45780],{}," 让两次 ",[93,146855,146451],{}," 输出在同一行。",[5110,146858,146859],{},"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":18,"searchDepth":19,"depth":19,"links":146861},[146862,146863,146864,146869,146870,146871,146875,146876,146877,146878,146883],{"id":145744,"depth":19,"text":145745},{"id":145788,"depth":19,"text":145789},{"id":145889,"depth":19,"text":145890,"children":146865},[146866,146867,146868],{"id":145893,"depth":1162,"text":145894},{"id":145948,"depth":1162,"text":145949},{"id":145984,"depth":1162,"text":145985},{"id":146057,"depth":19,"text":146058},{"id":146202,"depth":19,"text":146203},{"id":146307,"depth":19,"text":146308,"children":146872},[146873,146874],{"id":146311,"depth":1162,"text":146312},{"id":146340,"depth":1162,"text":146341},{"id":146370,"depth":19,"text":146371},{"id":146445,"depth":19,"text":146446},{"id":146623,"depth":19,"text":146624},{"id":146705,"depth":19,"text":146706,"children":146879},[146880,146881,146882],{"id":146709,"depth":1162,"text":146710},{"id":146735,"depth":1162,"text":146736},{"id":146751,"depth":1162,"text":146752},{"id":146810,"depth":19,"text":146811},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145736,"description":23361},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":146890,"title":146891,"body":146892,"description":23361,"extension":21,"meta":149296,"navigation":23,"path":149297,"seo":149298,"stem":149299,"__hash__":149300},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":146893,"toc":149281},[146894,146897,146901,146904,146907,146924,146927,146969,146972,146976,146979,146982,147019,147022,147056,147059,147151,147155,147169,147172,147199,147202,147206,147309,147316,147319,147336,147340,147347,147536,147539,147612,147616,147619,147703,147706,147738,147742,147946,147949,147953,147959,148061,148064,148320,148324,148327,148330,148344,148346,148532,148536,148898,148904,148908,148911,149035,149038,149217,149220,149224,149257,149261,149278],[10,146895,146891],{"id":146896},"_10-json与pyecharts折线图",[38,146898,146900],{"id":146899},"_101-数据可视化","10.1 数据可视化",[14,146902,146903],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[14,146905,146906],{},"常见图表：",[50,146908,146909,146912,146915,146918,146921],{},[53,146910,146911],{},"折线图：看趋势。",[53,146913,146914],{},"柱状图：看分类对比。",[53,146916,146917],{},"饼图：看占比。",[53,146919,146920],{},"地图：看地域分布。",[53,146922,146923],{},"散点图：看两个变量之间的关系。",[14,146925,146926],{},"Python 可视化常用库：",[244,146928,146929,146937],{},[247,146930,146931],{},[250,146932,146933,146935],{},[253,146934,146140],{},[253,146936,23725],{},[291,146938,146939,146946,146954,146961],{},[250,146940,146941,146943],{},[296,146942,146172],{},[296,146944,146945],{},"基础、经典、可定制",[250,146947,146948,146951],{},[296,146949,146950],{},"seaborn",[296,146952,146953],{},"统计图表更美观",[250,146955,146956,146958],{},[296,146957,146180],{},[296,146959,146960],{},"生成交互式网页图表",[250,146962,146963,146966],{},[296,146964,146965],{},"plotly",[296,146967,146968],{},"交互图表能力强",[14,146970,146971],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[38,146973,146975],{"id":146974},"_102-json回顾","10.2 JSON回顾",[14,146977,146978],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[14,146980,146981],{},"Python 字典：",[87,146983,146985],{"className":30357,"code":146984,"language":30359,"meta":18,"style":18},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[93,146986,146987,146995,147006,147015],{"__ignoreMap":18},[96,146988,146989,146991,146993],{"class":98,"line":99},[96,146990,101637],{"class":106},[96,146992,152],{"class":102},[96,146994,15556],{"class":106},[96,146996,146997,147000,147002,147004],{"class":98,"line":19},[96,146998,146999],{"class":211},"    \"name\"",[96,147001,51416],{"class":106},[96,147003,69248],{"class":211},[96,147005,31445],{"class":106},[96,147007,147008,147011,147013],{"class":98,"line":1162},[96,147009,147010],{"class":211},"    \"value\"",[96,147012,51416],{"class":106},[96,147014,97437],{"class":155},[96,147016,147017],{"class":98,"line":1177},[96,147018,1548],{"class":106},[14,147020,147021],{},"JSON 字符串：",[87,147023,147026],{"className":147024,"code":147025,"language":145771,"meta":18,"style":18},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[93,147027,147028,147032,147043,147052],{"__ignoreMap":18},[96,147029,147030],{"class":98,"line":99},[96,147031,1529],{"class":106},[96,147033,147034,147037,147039,147041],{"class":98,"line":19},[96,147035,147036],{"class":155},"  \"name\"",[96,147038,51416],{"class":106},[96,147040,69248],{"class":211},[96,147042,31445],{"class":106},[96,147044,147045,147048,147050],{"class":98,"line":1162},[96,147046,147047],{"class":155},"  \"value\"",[96,147049,51416],{"class":106},[96,147051,97437],{"class":155},[96,147053,147054],{"class":98,"line":1177},[96,147055,1548],{"class":106},[14,147057,147058],{},"Python 与 JSON 的转换：",[87,147060,147062],{"className":30357,"code":147061,"language":30359,"meta":18,"style":18},"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",[93,147063,147064,147071,147075,147100,147104,147123,147130,147134,147144],{"__ignoreMap":18},[96,147065,147066,147068],{"class":98,"line":99},[96,147067,30371],{"class":102},[96,147069,147070],{"class":106}," json\n",[96,147072,147073],{"class":98,"line":19},[96,147074,2383],{"emptyLinePlaceholder":23},[96,147076,147077,147079,147081,147083,147085,147087,147089,147091,147094,147096,147098],{"class":98,"line":1162},[96,147078,101637],{"class":106},[96,147080,152],{"class":102},[96,147082,4431],{"class":106},[96,147084,62658],{"class":211},[96,147086,51416],{"class":106},[96,147088,69248],{"class":211},[96,147090,12419],{"class":106},[96,147092,147093],{"class":211},"\"value\"",[96,147095,51416],{"class":106},[96,147097,418],{"class":155},[96,147099,1548],{"class":106},[96,147101,147102],{"class":98,"line":1177},[96,147103,2383],{"emptyLinePlaceholder":23},[96,147105,147106,147109,147111,147114,147117,147119,147121],{"class":98,"line":1183},[96,147107,147108],{"class":106},"json_text ",[96,147110,152],{"class":102},[96,147112,147113],{"class":106}," json.dumps(data, ",[96,147115,147116],{"class":5200},"ensure_ascii",[96,147118,152],{"class":102},[96,147120,33966],{"class":155},[96,147122,113],{"class":106},[96,147124,147125,147127],{"class":98,"line":1197},[96,147126,30394],{"class":155},[96,147128,147129],{"class":106},"(json_text)\n",[96,147131,147132],{"class":98,"line":1203},[96,147133,2383],{"emptyLinePlaceholder":23},[96,147135,147136,147139,147141],{"class":98,"line":1294},[96,147137,147138],{"class":106},"new_data ",[96,147140,152],{"class":102},[96,147142,147143],{"class":106}," json.loads(json_text)\n",[96,147145,147146,147148],{"class":98,"line":1300},[96,147147,30394],{"class":155},[96,147149,147150],{"class":106},"(new_data)\n",[38,147152,147154],{"id":147153},"_103-安装pyecharts","10.3 安装pyecharts",[87,147156,147158],{"className":23807,"code":147157,"language":23809,"meta":18,"style":18},"pip install pyecharts\n",[93,147159,147160],{"__ignoreMap":18},[96,147161,147162,147164,147166],{"class":98,"line":99},[96,147163,23816],{"class":1946},[96,147165,23819],{"class":211},[96,147167,147168],{"class":211}," pyecharts\n",[14,147170,147171],{},"验证：",[87,147173,147175],{"className":30357,"code":147174,"language":30359,"meta":18,"style":18},"import pyecharts\n\nprint(pyecharts.__version__)\n",[93,147176,147177,147183,147187],{"__ignoreMap":18},[96,147178,147179,147181],{"class":98,"line":99},[96,147180,30371],{"class":102},[96,147182,147168],{"class":106},[96,147184,147185],{"class":98,"line":19},[96,147186,2383],{"emptyLinePlaceholder":23},[96,147188,147189,147191,147194,147197],{"class":98,"line":1162},[96,147190,30394],{"class":155},[96,147192,147193],{"class":106},"(pyecharts.",[96,147195,147196],{"class":155},"__version__",[96,147198,113],{"class":106},[14,147200,147201],{},"如果使用虚拟环境，要先激活环境再安装。",[38,147203,147205],{"id":147204},"_104-第一个折线图","10.4 第一个折线图",[87,147207,147209],{"className":30357,"code":147208,"language":30359,"meta":18,"style":18},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[93,147210,147211,147223,147227,147237,147267,147299],{"__ignoreMap":18},[96,147212,147213,147215,147218,147220],{"class":98,"line":99},[96,147214,30716],{"class":102},[96,147216,147217],{"class":106}," pyecharts.charts ",[96,147219,30371],{"class":102},[96,147221,147222],{"class":106}," Line\n",[96,147224,147225],{"class":98,"line":19},[96,147226,2383],{"emptyLinePlaceholder":23},[96,147228,147229,147232,147234],{"class":98,"line":1162},[96,147230,147231],{"class":106},"line ",[96,147233,152],{"class":102},[96,147235,147236],{"class":106}," Line()\n",[96,147238,147239,147242,147245,147247,147250,147252,147255,147257,147260,147262,147265],{"class":98,"line":1177},[96,147240,147241],{"class":106},"line.add_xaxis([",[96,147243,147244],{"class":211},"\"周一\"",[96,147246,12419],{"class":106},[96,147248,147249],{"class":211},"\"周二\"",[96,147251,12419],{"class":106},[96,147253,147254],{"class":211},"\"周三\"",[96,147256,12419],{"class":106},[96,147258,147259],{"class":211},"\"周四\"",[96,147261,12419],{"class":106},[96,147263,147264],{"class":211},"\"周五\"",[96,147266,4640],{"class":106},[96,147268,147269,147272,147275,147277,147279,147281,147283,147285,147287,147289,147292,147294,147297],{"class":98,"line":1183},[96,147270,147271],{"class":106},"line.add_yaxis(",[96,147273,147274],{"class":211},"\"销售额\"",[96,147276,77497],{"class":106},[96,147278,418],{"class":155},[96,147280,12419],{"class":106},[96,147282,924],{"class":155},[96,147284,12419],{"class":106},[96,147286,969],{"class":155},[96,147288,12419],{"class":106},[96,147290,147291],{"class":155},"150",[96,147293,12419],{"class":106},[96,147295,147296],{"class":155},"180",[96,147298,4640],{"class":106},[96,147300,147301,147304,147307],{"class":98,"line":1197},[96,147302,147303],{"class":106},"line.render(",[96,147305,147306],{"class":211},"\"line.html\"",[96,147308,113],{"class":106},[14,147310,147311,147312,147315],{},"运行后会生成 ",[93,147313,147314],{},"line.html","，用浏览器打开即可看到图表。",[14,147317,147318],{},"核心步骤：",[50,147320,147321,147324,147327,147330,147333],{},[53,147322,147323],{},"导入图表类。",[53,147325,147326],{},"创建图表对象。",[53,147328,147329],{},"添加 x 轴数据。",[53,147331,147332],{},"添加 y 轴数据。",[53,147334,147335],{},"渲染为 HTML。",[38,147337,147339],{"id":147338},"_105-全局配置","10.5 全局配置",[14,147341,147342,147343,147346],{},"常用配置在 ",[93,147344,147345],{},"pyecharts.options"," 中。",[87,147348,147350],{"className":30357,"code":147349,"language":30359,"meta":18,"style":18},"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",[93,147351,147352,147369,147379,147383,147391,147415,147443,147448,147467,147486,147504,147524,147528],{"__ignoreMap":18},[96,147353,147354,147356,147359,147361,147364,147366],{"class":98,"line":99},[96,147355,30716],{"class":102},[96,147357,147358],{"class":106}," pyecharts ",[96,147360,30371],{"class":102},[96,147362,147363],{"class":106}," options ",[96,147365,31362],{"class":102},[96,147367,147368],{"class":106}," opts\n",[96,147370,147371,147373,147375,147377],{"class":98,"line":19},[96,147372,30716],{"class":102},[96,147374,147217],{"class":106},[96,147376,30371],{"class":102},[96,147378,147222],{"class":106},[96,147380,147381],{"class":98,"line":1162},[96,147382,2383],{"emptyLinePlaceholder":23},[96,147384,147385,147387,147389],{"class":98,"line":1177},[96,147386,147231],{"class":106},[96,147388,152],{"class":102},[96,147390,147236],{"class":106},[96,147392,147393,147395,147397,147399,147401,147403,147405,147407,147409,147411,147413],{"class":98,"line":1183},[96,147394,147241],{"class":106},[96,147396,147244],{"class":211},[96,147398,12419],{"class":106},[96,147400,147249],{"class":211},[96,147402,12419],{"class":106},[96,147404,147254],{"class":211},[96,147406,12419],{"class":106},[96,147408,147259],{"class":211},[96,147410,12419],{"class":106},[96,147412,147264],{"class":211},[96,147414,4640],{"class":106},[96,147416,147417,147419,147421,147423,147425,147427,147429,147431,147433,147435,147437,147439,147441],{"class":98,"line":1197},[96,147418,147271],{"class":106},[96,147420,147274],{"class":211},[96,147422,77497],{"class":106},[96,147424,418],{"class":155},[96,147426,12419],{"class":106},[96,147428,924],{"class":155},[96,147430,12419],{"class":106},[96,147432,969],{"class":155},[96,147434,12419],{"class":106},[96,147436,147291],{"class":155},[96,147438,12419],{"class":106},[96,147440,147296],{"class":155},[96,147442,4640],{"class":106},[96,147444,147445],{"class":98,"line":1203},[96,147446,147447],{"class":106},"line.set_global_opts(\n",[96,147449,147450,147453,147455,147458,147460,147462,147465],{"class":98,"line":1294},[96,147451,147452],{"class":5200},"    title_opts",[96,147454,152],{"class":102},[96,147456,147457],{"class":106},"opts.TitleOpts(",[96,147459,51386],{"class":5200},[96,147461,152],{"class":102},[96,147463,147464],{"class":211},"\"一周销售额\"",[96,147466,38026],{"class":106},[96,147468,147469,147472,147474,147477,147479,147481,147484],{"class":98,"line":1300},[96,147470,147471],{"class":5200},"    xaxis_opts",[96,147473,152],{"class":102},[96,147475,147476],{"class":106},"opts.AxisOpts(",[96,147478,79789],{"class":5200},[96,147480,152],{"class":102},[96,147482,147483],{"class":211},"\"日期\"",[96,147485,38026],{"class":106},[96,147487,147488,147491,147493,147495,147497,147499,147502],{"class":98,"line":1312},[96,147489,147490],{"class":5200},"    yaxis_opts",[96,147492,152],{"class":102},[96,147494,147476],{"class":106},[96,147496,79789],{"class":5200},[96,147498,152],{"class":102},[96,147500,147501],{"class":211},"\"金额\"",[96,147503,38026],{"class":106},[96,147505,147506,147509,147511,147514,147517,147519,147522],{"class":98,"line":1595},[96,147507,147508],{"class":5200},"    tooltip_opts",[96,147510,152],{"class":102},[96,147512,147513],{"class":106},"opts.TooltipOpts(",[96,147515,147516],{"class":5200},"trigger",[96,147518,152],{"class":102},[96,147520,147521],{"class":211},"\"axis\"",[96,147523,38026],{"class":106},[96,147525,147526],{"class":98,"line":1600},[96,147527,113],{"class":106},[96,147529,147530,147532,147534],{"class":98,"line":1606},[96,147531,147303],{"class":106},[96,147533,147306],{"class":211},[96,147535,113],{"class":106},[14,147537,147538],{},"常见全局配置：",[244,147540,147541,147550],{},[247,147542,147543],{},[250,147544,147545,147548],{},[253,147546,147547],{},"配置",[253,147549,102675],{},[291,147551,147552,147562,147572,147582,147592,147602],{},[250,147553,147554,147559],{},[296,147555,147556],{},[93,147557,147558],{},"TitleOpts",[296,147560,147561],{},"标题",[250,147563,147564,147569],{},[296,147565,147566],{},[93,147567,147568],{},"LegendOpts",[296,147570,147571],{},"图例",[250,147573,147574,147579],{},[296,147575,147576],{},[93,147577,147578],{},"TooltipOpts",[296,147580,147581],{},"提示框",[250,147583,147584,147589],{},[296,147585,147586],{},[93,147587,147588],{},"AxisOpts",[296,147590,147591],{},"坐标轴",[250,147593,147594,147599],{},[296,147595,147596],{},[93,147597,147598],{},"VisualMapOpts",[296,147600,147601],{},"视觉映射",[250,147603,147604,147609],{},[296,147605,147606],{},[93,147607,147608],{},"DataZoomOpts",[296,147610,147611],{},"区域缩放",[38,147613,147615],{"id":147614},"_106-系列配置","10.6 系列配置",[14,147617,147618],{},"系列配置作用于某一组数据。",[87,147620,147622],{"className":30357,"code":147621,"language":30359,"meta":18,"style":18},"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",[93,147623,147624,147629,147640,147669,147680,147699],{"__ignoreMap":18},[96,147625,147626],{"class":98,"line":99},[96,147627,147628],{"class":106},"line.add_yaxis(\n",[96,147630,147631,147634,147636,147638],{"class":98,"line":19},[96,147632,147633],{"class":5200},"    series_name",[96,147635,152],{"class":102},[96,147637,147274],{"class":211},[96,147639,31445],{"class":106},[96,147641,147642,147645,147647,147649,147651,147653,147655,147657,147659,147661,147663,147665,147667],{"class":98,"line":1162},[96,147643,147644],{"class":5200},"    y_axis",[96,147646,152],{"class":102},[96,147648,997],{"class":106},[96,147650,418],{"class":155},[96,147652,12419],{"class":106},[96,147654,924],{"class":155},[96,147656,12419],{"class":106},[96,147658,969],{"class":155},[96,147660,12419],{"class":106},[96,147662,147291],{"class":155},[96,147664,12419],{"class":106},[96,147666,147296],{"class":155},[96,147668,87815],{"class":106},[96,147670,147671,147674,147676,147678],{"class":98,"line":1177},[96,147672,147673],{"class":5200},"    is_smooth",[96,147675,152],{"class":102},[96,147677,31455],{"class":155},[96,147679,31445],{"class":106},[96,147681,147682,147685,147687,147690,147693,147695,147697],{"class":98,"line":1183},[96,147683,147684],{"class":5200},"    label_opts",[96,147686,152],{"class":102},[96,147688,147689],{"class":106},"opts.LabelOpts(",[96,147691,147692],{"class":5200},"is_show",[96,147694,152],{"class":102},[96,147696,31455],{"class":155},[96,147698,38026],{"class":106},[96,147700,147701],{"class":98,"line":1197},[96,147702,113],{"class":106},[14,147704,147705],{},"常用参数：",[50,147707,147708,147714,147720,147726,147732],{},[53,147709,147710,147713],{},[93,147711,147712],{},"series_name","：系列名称。",[53,147715,147716,147719],{},[93,147717,147718],{},"y_axis","：y 轴数据。",[53,147721,147722,147725],{},[93,147723,147724],{},"is_smooth","：是否平滑曲线。",[53,147727,147728,147731],{},[93,147729,147730],{},"label_opts","：标签配置。",[53,147733,147734,147737],{},[93,147735,147736],{},"symbol_size","：标记点大小。",[38,147739,147741],{"id":147740},"_107-多条折线","10.7 多条折线",[87,147743,147745],{"className":30357,"code":147744,"language":30359,"meta":18,"style":18},"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",[93,147746,147747,147761,147771,147775,147804,147808,147816,147821,147859,147896,147900,147917,147933,147937],{"__ignoreMap":18},[96,147748,147749,147751,147753,147755,147757,147759],{"class":98,"line":99},[96,147750,30716],{"class":102},[96,147752,147358],{"class":106},[96,147754,30371],{"class":102},[96,147756,147363],{"class":106},[96,147758,31362],{"class":102},[96,147760,147368],{"class":106},[96,147762,147763,147765,147767,147769],{"class":98,"line":19},[96,147764,30716],{"class":102},[96,147766,147217],{"class":106},[96,147768,30371],{"class":102},[96,147770,147222],{"class":106},[96,147772,147773],{"class":98,"line":1162},[96,147774,2383],{"emptyLinePlaceholder":23},[96,147776,147777,147780,147782,147784,147786,147788,147790,147792,147794,147796,147798,147800,147802],{"class":98,"line":1177},[96,147778,147779],{"class":106},"dates ",[96,147781,152],{"class":102},[96,147783,52205],{"class":106},[96,147785,147244],{"class":211},[96,147787,12419],{"class":106},[96,147789,147249],{"class":211},[96,147791,12419],{"class":106},[96,147793,147254],{"class":211},[96,147795,12419],{"class":106},[96,147797,147259],{"class":211},[96,147799,12419],{"class":106},[96,147801,147264],{"class":211},[96,147803,33225],{"class":106},[96,147805,147806],{"class":98,"line":1183},[96,147807,2383],{"emptyLinePlaceholder":23},[96,147809,147810,147812,147814],{"class":98,"line":1197},[96,147811,147231],{"class":106},[96,147813,152],{"class":102},[96,147815,147236],{"class":106},[96,147817,147818],{"class":98,"line":1203},[96,147819,147820],{"class":106},"line.add_xaxis(dates)\n",[96,147822,147823,147825,147828,147830,147832,147834,147837,147839,147841,147843,147845,147847,147849,147851,147853,147855,147857],{"class":98,"line":1294},[96,147824,147271],{"class":106},[96,147826,147827],{"class":211},"\"线上销售\"",[96,147829,77497],{"class":106},[96,147831,418],{"class":155},[96,147833,12419],{"class":106},[96,147835,147836],{"class":155},"130",[96,147838,12419],{"class":106},[96,147840,924],{"class":155},[96,147842,12419],{"class":106},[96,147844,21032],{"class":155},[96,147846,12419],{"class":106},[96,147848,1705],{"class":155},[96,147850,112181],{"class":106},[96,147852,147724],{"class":5200},[96,147854,152],{"class":102},[96,147856,31455],{"class":155},[96,147858,113],{"class":106},[96,147860,147861,147863,147866,147868,147870,147872,147874,147876,147878,147880,147882,147884,147886,147888,147890,147892,147894],{"class":98,"line":1300},[96,147862,147271],{"class":106},[96,147864,147865],{"class":211},"\"线下销售\"",[96,147867,77497],{"class":106},[96,147869,719],{"class":155},[96,147871,12419],{"class":106},[96,147873,969],{"class":155},[96,147875,12419],{"class":106},[96,147877,418],{"class":155},[96,147879,12419],{"class":106},[96,147881,924],{"class":155},[96,147883,12419],{"class":106},[96,147885,147291],{"class":155},[96,147887,112181],{"class":106},[96,147889,147724],{"class":5200},[96,147891,152],{"class":102},[96,147893,31455],{"class":155},[96,147895,113],{"class":106},[96,147897,147898],{"class":98,"line":1312},[96,147899,147447],{"class":106},[96,147901,147902,147904,147906,147908,147910,147912,147915],{"class":98,"line":1595},[96,147903,147452],{"class":5200},[96,147905,152],{"class":102},[96,147907,147457],{"class":106},[96,147909,51386],{"class":5200},[96,147911,152],{"class":102},[96,147913,147914],{"class":211},"\"线上线下销售趋势\"",[96,147916,38026],{"class":106},[96,147918,147919,147921,147923,147925,147927,147929,147931],{"class":98,"line":1600},[96,147920,147508],{"class":5200},[96,147922,152],{"class":102},[96,147924,147513],{"class":106},[96,147926,147516],{"class":5200},[96,147928,152],{"class":102},[96,147930,147521],{"class":211},[96,147932,38026],{"class":106},[96,147934,147935],{"class":98,"line":1606},[96,147936,113],{"class":106},[96,147938,147939,147941,147944],{"class":98,"line":1611},[96,147940,147303],{"class":106},[96,147942,147943],{"class":211},"\"sales.html\"",[96,147945,113],{"class":106},[14,147947,147948],{},"多条折线适合比较不同指标或不同地区。",[38,147950,147952],{"id":147951},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[14,147954,147955,147956,24597],{},"假设 ",[93,147957,147958],{},"sales.json",[87,147960,147962],{"className":147024,"code":147961,"language":145771,"meta":18,"style":18},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[93,147963,147964,147969,148001,148029,148057],{"__ignoreMap":18},[96,147965,147966],{"class":98,"line":99},[96,147967,147968],{"class":106},"[\n",[96,147970,147971,147974,147977,147979,147981,147983,147986,147988,147990,147992,147995,147997,147999],{"class":98,"line":19},[96,147972,147973],{"class":106},"  {",[96,147975,147976],{"class":155},"\"date\"",[96,147978,51416],{"class":106},[96,147980,147244],{"class":211},[96,147982,12419],{"class":106},[96,147984,147985],{"class":155},"\"online\"",[96,147987,51416],{"class":106},[96,147989,418],{"class":155},[96,147991,12419],{"class":106},[96,147993,147994],{"class":155},"\"offline\"",[96,147996,51416],{"class":106},[96,147998,719],{"class":155},[96,148000,4913],{"class":106},[96,148002,148003,148005,148007,148009,148011,148013,148015,148017,148019,148021,148023,148025,148027],{"class":98,"line":1162},[96,148004,147973],{"class":106},[96,148006,147976],{"class":155},[96,148008,51416],{"class":106},[96,148010,147249],{"class":211},[96,148012,12419],{"class":106},[96,148014,147985],{"class":155},[96,148016,51416],{"class":106},[96,148018,147836],{"class":155},[96,148020,12419],{"class":106},[96,148022,147994],{"class":155},[96,148024,51416],{"class":106},[96,148026,969],{"class":155},[96,148028,4913],{"class":106},[96,148030,148031,148033,148035,148037,148039,148041,148043,148045,148047,148049,148051,148053,148055],{"class":98,"line":1177},[96,148032,147973],{"class":106},[96,148034,147976],{"class":155},[96,148036,51416],{"class":106},[96,148038,147254],{"class":211},[96,148040,12419],{"class":106},[96,148042,147985],{"class":155},[96,148044,51416],{"class":106},[96,148046,924],{"class":155},[96,148048,12419],{"class":106},[96,148050,147994],{"class":155},[96,148052,51416],{"class":106},[96,148054,418],{"class":155},[96,148056,1548],{"class":106},[96,148058,148059],{"class":98,"line":1183},[96,148060,33225],{"class":106},[14,148062,148063],{},"读取并绘图：",[87,148065,148067],{"className":30357,"code":148066,"language":30359,"meta":18,"style":18},"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",[93,148068,148069,148075,148089,148099,148103,148135,148148,148152,148160,148169,148178,148182,148194,148203,148212,148221,148225,148233,148237,148254,148271,148275,148292,148308,148312],{"__ignoreMap":18},[96,148070,148071,148073],{"class":98,"line":99},[96,148072,30371],{"class":102},[96,148074,147070],{"class":106},[96,148076,148077,148079,148081,148083,148085,148087],{"class":98,"line":19},[96,148078,30716],{"class":102},[96,148080,147358],{"class":106},[96,148082,30371],{"class":102},[96,148084,147363],{"class":106},[96,148086,31362],{"class":102},[96,148088,147368],{"class":106},[96,148090,148091,148093,148095,148097],{"class":98,"line":1162},[96,148092,30716],{"class":102},[96,148094,147217],{"class":106},[96,148096,30371],{"class":102},[96,148098,147222],{"class":106},[96,148100,148101],{"class":98,"line":1177},[96,148102,2383],{"emptyLinePlaceholder":23},[96,148104,148105,148107,148109,148111,148114,148116,148118,148120,148122,148124,148126,148128,148130,148133],{"class":98,"line":1183},[96,148106,107812],{"class":102},[96,148108,146770],{"class":155},[96,148110,107],{"class":106},[96,148112,148113],{"class":211},"\"sales.json\"",[96,148115,12419],{"class":106},[96,148117,146780],{"class":211},[96,148119,12419],{"class":106},[96,148121,146785],{"class":5200},[96,148123,152],{"class":102},[96,148125,146790],{"class":211},[96,148127,13698],{"class":106},[96,148129,31362],{"class":102},[96,148131,148132],{"class":5200}," file",[96,148134,3722],{"class":106},[96,148136,148137,148139,148141,148144,148146],{"class":98,"line":1197},[96,148138,101400],{"class":106},[96,148140,152],{"class":102},[96,148142,148143],{"class":106}," json.load(",[96,148145,45333],{"class":5200},[96,148147,113],{"class":106},[96,148149,148150],{"class":98,"line":1203},[96,148151,2383],{"emptyLinePlaceholder":23},[96,148153,148154,148156,148158],{"class":98,"line":1294},[96,148155,147779],{"class":106},[96,148157,152],{"class":102},[96,148159,51817],{"class":106},[96,148161,148162,148165,148167],{"class":98,"line":1300},[96,148163,148164],{"class":106},"online_sales ",[96,148166,152],{"class":102},[96,148168,51817],{"class":106},[96,148170,148171,148174,148176],{"class":98,"line":1312},[96,148172,148173],{"class":106},"offline_sales ",[96,148175,152],{"class":102},[96,148177,51817],{"class":106},[96,148179,148180],{"class":98,"line":1595},[96,148181,2383],{"emptyLinePlaceholder":23},[96,148183,148184,148186,148189,148191],{"class":98,"line":1600},[96,148185,3008],{"class":102},[96,148187,148188],{"class":106}," item ",[96,148190,26022],{"class":102},[96,148192,148193],{"class":106}," data:\n",[96,148195,148196,148199,148201],{"class":98,"line":1606},[96,148197,148198],{"class":106},"    dates.append(item[",[96,148200,147976],{"class":211},[96,148202,4640],{"class":106},[96,148204,148205,148208,148210],{"class":98,"line":1611},[96,148206,148207],{"class":106},"    online_sales.append(item[",[96,148209,147985],{"class":211},[96,148211,4640],{"class":106},[96,148213,148214,148217,148219],{"class":98,"line":1625},[96,148215,148216],{"class":106},"    offline_sales.append(item[",[96,148218,147994],{"class":211},[96,148220,4640],{"class":106},[96,148222,148223],{"class":98,"line":1630},[96,148224,2383],{"emptyLinePlaceholder":23},[96,148226,148227,148229,148231],{"class":98,"line":1636},[96,148228,147231],{"class":106},[96,148230,152],{"class":102},[96,148232,147236],{"class":106},[96,148234,148235],{"class":98,"line":1657},[96,148236,147820],{"class":106},[96,148238,148239,148241,148243,148246,148248,148250,148252],{"class":98,"line":1662},[96,148240,147271],{"class":106},[96,148242,147827],{"class":211},[96,148244,148245],{"class":106},", online_sales, ",[96,148247,147724],{"class":5200},[96,148249,152],{"class":102},[96,148251,31455],{"class":155},[96,148253,113],{"class":106},[96,148255,148256,148258,148260,148263,148265,148267,148269],{"class":98,"line":1676},[96,148257,147271],{"class":106},[96,148259,147865],{"class":211},[96,148261,148262],{"class":106},", offline_sales, ",[96,148264,147724],{"class":5200},[96,148266,152],{"class":102},[96,148268,31455],{"class":155},[96,148270,113],{"class":106},[96,148272,148273],{"class":98,"line":1681},[96,148274,147447],{"class":106},[96,148276,148277,148279,148281,148283,148285,148287,148290],{"class":98,"line":1710},[96,148278,147452],{"class":5200},[96,148280,152],{"class":102},[96,148282,147457],{"class":106},[96,148284,51386],{"class":5200},[96,148286,152],{"class":102},[96,148288,148289],{"class":211},"\"销售趋势\"",[96,148291,38026],{"class":106},[96,148293,148294,148296,148298,148300,148302,148304,148306],{"class":98,"line":1715},[96,148295,147508],{"class":5200},[96,148297,152],{"class":102},[96,148299,147513],{"class":106},[96,148301,147516],{"class":5200},[96,148303,152],{"class":102},[96,148305,147521],{"class":211},[96,148307,38026],{"class":106},[96,148309,148310],{"class":98,"line":1732},[96,148311,113],{"class":106},[96,148313,148314,148316,148318],{"class":98,"line":1737},[96,148315,147303],{"class":106},[96,148317,147943],{"class":211},[96,148319,113],{"class":106},[38,148321,148323],{"id":148322},"_109-数据清洗","10.9 数据清洗",[14,148325,148326],{},"真实数据经常不整齐，需要清洗。",[14,148328,148329],{},"常见问题：",[50,148331,148332,148335,148338,148341],{},[53,148333,148334],{},"数字是字符串。",[53,148336,148337],{},"字段缺失。",[53,148339,148340],{},"空值。",[53,148342,148343],{},"日期格式不统一。",[14,148345,15119],{},[87,148347,148349],{"className":30357,"code":148348,"language":30359,"meta":18,"style":18},"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",[93,148350,148351,148360,148383,148403,148424,148428,148432,148440,148449,148453,148464,148478,148487,148492,148496,148504,148514,148518,148525],{"__ignoreMap":18},[96,148352,148353,148356,148358],{"class":98,"line":99},[96,148354,148355],{"class":106},"raw_data ",[96,148357,152],{"class":102},[96,148359,55426],{"class":106},[96,148361,148362,148365,148367,148369,148371,148373,148376,148378,148381],{"class":98,"line":19},[96,148363,148364],{"class":106},"    {",[96,148366,147976],{"class":211},[96,148368,51416],{"class":106},[96,148370,147244],{"class":211},[96,148372,12419],{"class":106},[96,148374,148375],{"class":211},"\"sales\"",[96,148377,51416],{"class":106},[96,148379,148380],{"class":211},"\"100\"",[96,148382,4913],{"class":106},[96,148384,148385,148387,148389,148391,148393,148395,148397,148399,148401],{"class":98,"line":1162},[96,148386,148364],{"class":106},[96,148388,147976],{"class":211},[96,148390,51416],{"class":106},[96,148392,147249],{"class":211},[96,148394,12419],{"class":106},[96,148396,148375],{"class":211},[96,148398,51416],{"class":106},[96,148400,7636],{"class":211},[96,148402,4913],{"class":106},[96,148404,148405,148407,148409,148411,148413,148415,148417,148419,148422],{"class":98,"line":1177},[96,148406,148364],{"class":106},[96,148408,147976],{"class":211},[96,148410,51416],{"class":106},[96,148412,147254],{"class":211},[96,148414,12419],{"class":106},[96,148416,148375],{"class":211},[96,148418,51416],{"class":106},[96,148420,148421],{"class":211},"\"120\"",[96,148423,4913],{"class":106},[96,148425,148426],{"class":98,"line":1183},[96,148427,33225],{"class":106},[96,148429,148430],{"class":98,"line":1197},[96,148431,2383],{"emptyLinePlaceholder":23},[96,148433,148434,148436,148438],{"class":98,"line":1203},[96,148435,147779],{"class":106},[96,148437,152],{"class":102},[96,148439,51817],{"class":106},[96,148441,148442,148445,148447],{"class":98,"line":1294},[96,148443,148444],{"class":106},"sales ",[96,148446,152],{"class":102},[96,148448,51817],{"class":106},[96,148450,148451],{"class":98,"line":1300},[96,148452,2383],{"emptyLinePlaceholder":23},[96,148454,148455,148457,148459,148461],{"class":98,"line":1312},[96,148456,3008],{"class":102},[96,148458,148188],{"class":106},[96,148460,26022],{"class":102},[96,148462,148463],{"class":106}," raw_data:\n",[96,148465,148466,148469,148471,148474,148476],{"class":98,"line":1595},[96,148467,148468],{"class":106},"    value ",[96,148470,152],{"class":102},[96,148472,148473],{"class":106}," item.get(",[96,148475,148375],{"class":211},[96,148477,113],{"class":106},[96,148479,148480,148482,148484],{"class":98,"line":1600},[96,148481,3084],{"class":102},[96,148483,38909],{"class":102},[96,148485,148486],{"class":106}," value:\n",[96,148488,148489],{"class":98,"line":1606},[96,148490,148491],{"class":102},"        continue\n",[96,148493,148494],{"class":98,"line":1611},[96,148495,2383],{"emptyLinePlaceholder":23},[96,148497,148498,148500,148502],{"class":98,"line":1625},[96,148499,148198],{"class":106},[96,148501,147976],{"class":211},[96,148503,4640],{"class":106},[96,148505,148506,148509,148511],{"class":98,"line":1630},[96,148507,148508],{"class":106},"    sales.append(",[96,148510,110],{"class":155},[96,148512,148513],{"class":106},"(value))\n",[96,148515,148516],{"class":98,"line":1636},[96,148517,2383],{"emptyLinePlaceholder":23},[96,148519,148520,148522],{"class":98,"line":1657},[96,148521,30394],{"class":155},[96,148523,148524],{"class":106},"(dates)\n",[96,148526,148527,148529],{"class":98,"line":1662},[96,148528,30394],{"class":155},[96,148530,148531],{"class":106},"(sales)\n",[38,148533,148535],{"id":148534},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[87,148537,148539],{"className":30357,"code":148538,"language":30359,"meta":18,"style":18},"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",[93,148540,148541,148555,148565,148569,148577,148598,148620,148642,148664,148686,148690,148694,148716,148737,148741,148749,148753,148757,148767,148776,148786,148802,148806,148810,148827,148843,148859,148875,148885,148889],{"__ignoreMap":18},[96,148542,148543,148545,148547,148549,148551,148553],{"class":98,"line":99},[96,148544,30716],{"class":102},[96,148546,147358],{"class":106},[96,148548,30371],{"class":102},[96,148550,147363],{"class":106},[96,148552,31362],{"class":102},[96,148554,147368],{"class":106},[96,148556,148557,148559,148561,148563],{"class":98,"line":19},[96,148558,30716],{"class":102},[96,148560,147217],{"class":106},[96,148562,30371],{"class":102},[96,148564,147222],{"class":106},[96,148566,148567],{"class":98,"line":1162},[96,148568,2383],{"emptyLinePlaceholder":23},[96,148570,148571,148573,148575],{"class":98,"line":1177},[96,148572,148444],{"class":106},[96,148574,152],{"class":102},[96,148576,55426],{"class":106},[96,148578,148579,148581,148583,148585,148588,148590,148592,148594,148596],{"class":98,"line":1183},[96,148580,148364],{"class":106},[96,148582,147976],{"class":211},[96,148584,51416],{"class":106},[96,148586,148587],{"class":211},"\"2024-10-01\"",[96,148589,12419],{"class":106},[96,148591,84063],{"class":211},[96,148593,51416],{"class":106},[96,148595,92002],{"class":155},[96,148597,4913],{"class":106},[96,148599,148600,148602,148604,148606,148609,148611,148613,148615,148618],{"class":98,"line":1197},[96,148601,148364],{"class":106},[96,148603,147976],{"class":211},[96,148605,51416],{"class":106},[96,148607,148608],{"class":211},"\"2024-10-02\"",[96,148610,12419],{"class":106},[96,148612,84063],{"class":211},[96,148614,51416],{"class":106},[96,148616,148617],{"class":155},"1800",[96,148619,4913],{"class":106},[96,148621,148622,148624,148626,148628,148631,148633,148635,148637,148640],{"class":98,"line":1203},[96,148623,148364],{"class":106},[96,148625,147976],{"class":211},[96,148627,51416],{"class":106},[96,148629,148630],{"class":211},"\"2024-10-03\"",[96,148632,12419],{"class":106},[96,148634,84063],{"class":211},[96,148636,51416],{"class":106},[96,148638,148639],{"class":155},"1500",[96,148641,4913],{"class":106},[96,148643,148644,148646,148648,148650,148653,148655,148657,148659,148662],{"class":98,"line":1294},[96,148645,148364],{"class":106},[96,148647,147976],{"class":211},[96,148649,51416],{"class":106},[96,148651,148652],{"class":211},"\"2024-10-04\"",[96,148654,12419],{"class":106},[96,148656,84063],{"class":211},[96,148658,51416],{"class":106},[96,148660,148661],{"class":155},"2100",[96,148663,4913],{"class":106},[96,148665,148666,148668,148670,148672,148675,148677,148679,148681,148684],{"class":98,"line":1300},[96,148667,148364],{"class":106},[96,148669,147976],{"class":211},[96,148671,51416],{"class":106},[96,148673,148674],{"class":211},"\"2024-10-05\"",[96,148676,12419],{"class":106},[96,148678,84063],{"class":211},[96,148680,51416],{"class":106},[96,148682,148683],{"class":155},"2600",[96,148685,4913],{"class":106},[96,148687,148688],{"class":98,"line":1312},[96,148689,33225],{"class":106},[96,148691,148692],{"class":98,"line":1595},[96,148693,2383],{"emptyLinePlaceholder":23},[96,148695,148696,148698,148700,148703,148705,148707,148709,148711,148713],{"class":98,"line":1600},[96,148697,147779],{"class":106},[96,148699,152],{"class":102},[96,148701,148702],{"class":106}," [item[",[96,148704,147976],{"class":211},[96,148706,4426],{"class":106},[96,148708,3008],{"class":102},[96,148710,148188],{"class":106},[96,148712,26022],{"class":102},[96,148714,148715],{"class":106}," sales]\n",[96,148717,148718,148721,148723,148725,148727,148729,148731,148733,148735],{"class":98,"line":1606},[96,148719,148720],{"class":106},"amounts ",[96,148722,152],{"class":102},[96,148724,148702],{"class":106},[96,148726,84063],{"class":211},[96,148728,4426],{"class":106},[96,148730,3008],{"class":102},[96,148732,148188],{"class":106},[96,148734,26022],{"class":102},[96,148736,148715],{"class":106},[96,148738,148739],{"class":98,"line":1611},[96,148740,2383],{"emptyLinePlaceholder":23},[96,148742,148743,148745,148747],{"class":98,"line":1625},[96,148744,147231],{"class":106},[96,148746,152],{"class":102},[96,148748,147236],{"class":106},[96,148750,148751],{"class":98,"line":1630},[96,148752,147820],{"class":106},[96,148754,148755],{"class":98,"line":1636},[96,148756,147628],{"class":106},[96,148758,148759,148761,148763,148765],{"class":98,"line":1657},[96,148760,147633],{"class":5200},[96,148762,152],{"class":102},[96,148764,147274],{"class":211},[96,148766,31445],{"class":106},[96,148768,148769,148771,148773],{"class":98,"line":1662},[96,148770,147644],{"class":5200},[96,148772,152],{"class":102},[96,148774,148775],{"class":106},"amounts,\n",[96,148777,148778,148780,148782,148784],{"class":98,"line":1676},[96,148779,147673],{"class":5200},[96,148781,152],{"class":102},[96,148783,31455],{"class":155},[96,148785,31445],{"class":106},[96,148787,148788,148790,148792,148794,148796,148798,148800],{"class":98,"line":1681},[96,148789,147684],{"class":5200},[96,148791,152],{"class":102},[96,148793,147689],{"class":106},[96,148795,147692],{"class":5200},[96,148797,152],{"class":102},[96,148799,31455],{"class":155},[96,148801,38026],{"class":106},[96,148803,148804],{"class":98,"line":1710},[96,148805,113],{"class":106},[96,148807,148808],{"class":98,"line":1715},[96,148809,147447],{"class":106},[96,148811,148812,148814,148816,148818,148820,148822,148825],{"class":98,"line":1732},[96,148813,147452],{"class":5200},[96,148815,152],{"class":102},[96,148817,147457],{"class":106},[96,148819,51386],{"class":5200},[96,148821,152],{"class":102},[96,148823,148824],{"class":211},"\"每日销售额\"",[96,148826,38026],{"class":106},[96,148828,148829,148831,148833,148835,148837,148839,148841],{"class":98,"line":1737},[96,148830,147471],{"class":5200},[96,148832,152],{"class":102},[96,148834,147476],{"class":106},[96,148836,79789],{"class":5200},[96,148838,152],{"class":102},[96,148840,147483],{"class":211},[96,148842,38026],{"class":106},[96,148844,148845,148847,148849,148851,148853,148855,148857],{"class":98,"line":1742},[96,148846,147490],{"class":5200},[96,148848,152],{"class":102},[96,148850,147476],{"class":106},[96,148852,79789],{"class":5200},[96,148854,152],{"class":102},[96,148856,147501],{"class":211},[96,148858,38026],{"class":106},[96,148860,148861,148863,148865,148867,148869,148871,148873],{"class":98,"line":1747},[96,148862,147508],{"class":5200},[96,148864,152],{"class":102},[96,148866,147513],{"class":106},[96,148868,147516],{"class":5200},[96,148870,152],{"class":102},[96,148872,147521],{"class":211},[96,148874,38026],{"class":106},[96,148876,148877,148880,148882],{"class":98,"line":1761},[96,148878,148879],{"class":5200},"    datazoom_opts",[96,148881,152],{"class":102},[96,148883,148884],{"class":106},"[opts.DataZoomOpts()],\n",[96,148886,148887],{"class":98,"line":1766},[96,148888,113],{"class":106},[96,148890,148891,148893,148896],{"class":98,"line":2560},[96,148892,147303],{"class":106},[96,148894,148895],{"class":211},"\"daily_sales.html\"",[96,148897,113],{"class":106},[14,148899,148900,148903],{},[93,148901,148902],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[38,148905,148907],{"id":148906},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[14,148909,148910],{},"如果数据结构如下：",[87,148912,148914],{"className":30357,"code":148913,"language":30359,"meta":18,"style":18},"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",[93,148915,148916,148924,148932,148954,148975,148980,148987,149007,149027,149031],{"__ignoreMap":18},[96,148917,148918,148920,148922],{"class":98,"line":99},[96,148919,101637],{"class":106},[96,148921,152],{"class":102},[96,148923,15556],{"class":106},[96,148925,148926,148929],{"class":98,"line":19},[96,148927,148928],{"class":211},"    \"北京\"",[96,148930,148931],{"class":106},": [\n",[96,148933,148934,148936,148938,148940,148943,148945,148948,148950,148952],{"class":98,"line":1162},[96,148935,4900],{"class":106},[96,148937,147976],{"class":211},[96,148939,51416],{"class":106},[96,148941,148942],{"class":211},"\"2024-01-01\"",[96,148944,12419],{"class":106},[96,148946,148947],{"class":211},"\"confirm\"",[96,148949,51416],{"class":106},[96,148951,553],{"class":155},[96,148953,4913],{"class":106},[96,148955,148956,148958,148960,148962,148965,148967,148969,148971,148973],{"class":98,"line":1177},[96,148957,4900],{"class":106},[96,148959,147976],{"class":211},[96,148961,51416],{"class":106},[96,148963,148964],{"class":211},"\"2024-01-02\"",[96,148966,12419],{"class":106},[96,148968,148947],{"class":211},[96,148970,51416],{"class":106},[96,148972,605],{"class":155},[96,148974,4913],{"class":106},[96,148976,148977],{"class":98,"line":1183},[96,148978,148979],{"class":106},"    ],\n",[96,148981,148982,148985],{"class":98,"line":1197},[96,148983,148984],{"class":211},"    \"上海\"",[96,148986,148931],{"class":106},[96,148988,148989,148991,148993,148995,148997,148999,149001,149003,149005],{"class":98,"line":1203},[96,148990,4900],{"class":106},[96,148992,147976],{"class":211},[96,148994,51416],{"class":106},[96,148996,148942],{"class":211},[96,148998,12419],{"class":106},[96,149000,148947],{"class":211},[96,149002,51416],{"class":106},[96,149004,502],{"class":155},[96,149006,4913],{"class":106},[96,149008,149009,149011,149013,149015,149017,149019,149021,149023,149025],{"class":98,"line":1294},[96,149010,4900],{"class":106},[96,149012,147976],{"class":211},[96,149014,51416],{"class":106},[96,149016,148964],{"class":211},[96,149018,12419],{"class":106},[96,149020,148947],{"class":211},[96,149022,51416],{"class":106},[96,149024,630],{"class":155},[96,149026,4913],{"class":106},[96,149028,149029],{"class":98,"line":1300},[96,149030,148979],{"class":106},[96,149032,149033],{"class":98,"line":1312},[96,149034,1548],{"class":106},[14,149036,149037],{},"绘制多地区趋势：",[87,149039,149041],{"className":30357,"code":149040,"language":30359,"meta":18,"style":18},"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",[93,149042,149043,149057,149067,149071,149096,149100,149108,149112,149116,149128,149150,149163,149167,149171,149188,149204,149208],{"__ignoreMap":18},[96,149044,149045,149047,149049,149051,149053,149055],{"class":98,"line":99},[96,149046,30716],{"class":102},[96,149048,147358],{"class":106},[96,149050,30371],{"class":102},[96,149052,147363],{"class":106},[96,149054,31362],{"class":102},[96,149056,147368],{"class":106},[96,149058,149059,149061,149063,149065],{"class":98,"line":19},[96,149060,30716],{"class":102},[96,149062,147217],{"class":106},[96,149064,30371],{"class":102},[96,149066,147222],{"class":106},[96,149068,149069],{"class":98,"line":1162},[96,149070,2383],{"emptyLinePlaceholder":23},[96,149072,149073,149075,149077,149079,149081,149083,149085,149087,149089,149092,149094],{"class":98,"line":1177},[96,149074,147779],{"class":106},[96,149076,152],{"class":102},[96,149078,148702],{"class":106},[96,149080,147976],{"class":211},[96,149082,4426],{"class":106},[96,149084,3008],{"class":102},[96,149086,148188],{"class":106},[96,149088,26022],{"class":102},[96,149090,149091],{"class":106}," data[",[96,149093,69248],{"class":211},[96,149095,77506],{"class":106},[96,149097,149098],{"class":98,"line":1183},[96,149099,2383],{"emptyLinePlaceholder":23},[96,149101,149102,149104,149106],{"class":98,"line":1197},[96,149103,147231],{"class":106},[96,149105,152],{"class":102},[96,149107,147236],{"class":106},[96,149109,149110],{"class":98,"line":1203},[96,149111,147820],{"class":106},[96,149113,149114],{"class":98,"line":1294},[96,149115,2383],{"emptyLinePlaceholder":23},[96,149117,149118,149120,149123,149125],{"class":98,"line":1300},[96,149119,3008],{"class":102},[96,149121,149122],{"class":106}," city, records ",[96,149124,26022],{"class":102},[96,149126,149127],{"class":106}," data.items():\n",[96,149129,149130,149133,149135,149137,149139,149141,149143,149145,149147],{"class":98,"line":1312},[96,149131,149132],{"class":106},"    values ",[96,149134,152],{"class":102},[96,149136,148702],{"class":106},[96,149138,148947],{"class":211},[96,149140,4426],{"class":106},[96,149142,3008],{"class":102},[96,149144,148188],{"class":106},[96,149146,26022],{"class":102},[96,149148,149149],{"class":106}," records]\n",[96,149151,149152,149155,149157,149159,149161],{"class":98,"line":1595},[96,149153,149154],{"class":106},"    line.add_yaxis(city, values, ",[96,149156,147724],{"class":5200},[96,149158,152],{"class":102},[96,149160,31455],{"class":155},[96,149162,113],{"class":106},[96,149164,149165],{"class":98,"line":1600},[96,149166,2383],{"emptyLinePlaceholder":23},[96,149168,149169],{"class":98,"line":1606},[96,149170,147447],{"class":106},[96,149172,149173,149175,149177,149179,149181,149183,149186],{"class":98,"line":1611},[96,149174,147452],{"class":5200},[96,149176,152],{"class":102},[96,149178,147457],{"class":106},[96,149180,51386],{"class":5200},[96,149182,152],{"class":102},[96,149184,149185],{"class":211},"\"多地区趋势图\"",[96,149187,38026],{"class":106},[96,149189,149190,149192,149194,149196,149198,149200,149202],{"class":98,"line":1625},[96,149191,147508],{"class":5200},[96,149193,152],{"class":102},[96,149195,147513],{"class":106},[96,149197,147516],{"class":5200},[96,149199,152],{"class":102},[96,149201,147521],{"class":211},[96,149203,38026],{"class":106},[96,149205,149206],{"class":98,"line":1630},[96,149207,113],{"class":106},[96,149209,149210,149212,149215],{"class":98,"line":1636},[96,149211,147303],{"class":106},[96,149213,149214],{"class":211},"\"trend.html\"",[96,149216,113],{"class":106},[14,149218,149219],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[38,149221,149223],{"id":149222},"_1012-易错点","10.12 易错点",[50,149225,149226,149232,149238,149248,149254],{},[53,149227,149228,149231],{},[93,149229,149230],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[53,149233,149234,149237],{},[93,149235,149236],{},"render()"," 生成的是 HTML，不是图片。",[53,149239,149240,149241,149244,149245,28364],{},"JSON 字符串用 ",[93,149242,149243],{},"json.loads()","，JSON 文件用 ",[93,149246,149247],{},"json.load()",[53,149249,149250,149251,28364],{},"中文 JSON 保存时加 ",[93,149252,149253],{},"ensure_ascii=False",[53,149255,149256],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[38,149258,149260],{"id":149259},"_1013-本章练习","10.13 本章练习",[50,149262,149263,149266,149269,149272,149275],{},[53,149264,149265],{},"安装 pyecharts 并生成第一个折线图。",[53,149267,149268],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[53,149270,149271],{},"绘制两条折线，对比线上和线下销售额。",[53,149273,149274],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[53,149276,149277],{},"对含有空值的销售数据进行清洗后再绘图。",[5110,149279,149280],{},"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":18,"searchDepth":19,"depth":19,"links":149282},[149283,149284,149285,149286,149287,149288,149289,149290,149291,149292,149293,149294,149295],{"id":146899,"depth":19,"text":146900},{"id":146974,"depth":19,"text":146975},{"id":147153,"depth":19,"text":147154},{"id":147204,"depth":19,"text":147205},{"id":147338,"depth":19,"text":147339},{"id":147614,"depth":19,"text":147615},{"id":147740,"depth":19,"text":147741},{"id":147951,"depth":19,"text":147952},{"id":148322,"depth":19,"text":148323},{"id":148534,"depth":19,"text":148535},{"id":148906,"depth":19,"text":148907},{"id":149222,"depth":19,"text":149223},{"id":149259,"depth":19,"text":149260},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":146891,"description":23361},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149302,"title":149303,"body":149304,"description":23361,"extension":21,"meta":151664,"navigation":23,"path":151665,"seo":151666,"stem":151667,"__hash__":151668},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149305,"toc":151641},[149306,149309,149313,149316,149319,149395,149398,149489,149492,149496,149499,149543,149556,149560,149563,149630,149633,149637,149640,149724,149732,149736,149741,149882,149885,149896,149902,149908,150022,150026,150029,150032,150285,150288,150292,150295,150399,150402,150406,150557,150561,150568,150681,150685,150688,150794,150797,150801,150804,150835,150838,150943,150946,150950,150954,150964,151032,151036,151043,151107,151110,151114,151120,151216,151225,151229,151553,151562,151566,151594,151598,151638],[10,149307,149303],{"id":149308},"_11-面向对象基础",[38,149310,149312],{"id":149311},"_111-什么是面向对象","11.1 什么是面向对象",[14,149314,149315],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[14,149317,149318],{},"面向过程：",[87,149320,149322],{"className":30357,"code":149321,"language":30359,"meta":18,"style":18},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[93,149323,149324,149333,149341,149345,149355,149386,149390],{"__ignoreMap":18},[96,149325,149326,149328,149330],{"class":98,"line":99},[96,149327,146515],{"class":106},[96,149329,152],{"class":102},[96,149331,149332],{"class":211}," \"小明\"\n",[96,149334,149335,149337,149339],{"class":98,"line":19},[96,149336,146525],{"class":106},[96,149338,152],{"class":102},[96,149340,146530],{"class":155},[96,149342,149343],{"class":98,"line":1162},[96,149344,2383],{"emptyLinePlaceholder":23},[96,149346,149347,149349,149352],{"class":98,"line":1177},[96,149348,31926],{"class":102},[96,149350,149351],{"class":1946}," introduce",[96,149353,149354],{"class":106},"(name, age):\n",[96,149356,149357,149359,149361,149363,149366,149368,149370,149372,149375,149377,149379,149381,149384],{"class":98,"line":1183},[96,149358,31278],{"class":155},[96,149360,107],{"class":106},[96,149362,159],{"class":102},[96,149364,149365],{"class":211},"\"我叫",[96,149367,1003],{"class":155},[96,149369,79789],{"class":106},[96,149371,1053],{"class":155},[96,149373,149374],{"class":211},"，今年",[96,149376,1003],{"class":155},[96,149378,70200],{"class":106},[96,149380,1053],{"class":155},[96,149382,149383],{"class":211},"岁\"",[96,149385,113],{"class":106},[96,149387,149388],{"class":98,"line":1197},[96,149389,2383],{"emptyLinePlaceholder":23},[96,149391,149392],{"class":98,"line":1203},[96,149393,149394],{"class":106},"introduce(name, age)\n",[14,149396,149397],{},"面向对象：",[87,149399,149401],{"className":30357,"code":149400,"language":30359,"meta":18,"style":18},"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",[93,149402,149403,149411,149419,149448,149452,149456,149466,149475,149484],{"__ignoreMap":18},[96,149404,149405,149407,149409],{"class":98,"line":99},[96,149406,14678],{"class":102},[96,149408,7882],{"class":1946},[96,149410,3722],{"class":106},[96,149412,149413,149415,149417],{"class":98,"line":19},[96,149414,30780],{"class":102},[96,149416,149351],{"class":1946},[96,149418,30786],{"class":106},[96,149420,149421,149423,149425,149427,149429,149432,149434,149436,149438,149440,149442,149444,149446],{"class":98,"line":1162},[96,149422,32430],{"class":155},[96,149424,107],{"class":106},[96,149426,159],{"class":102},[96,149428,149365],{"class":211},[96,149430,149431],{"class":155},"{self",[96,149433,80280],{"class":106},[96,149435,1053],{"class":155},[96,149437,149374],{"class":211},[96,149439,149431],{"class":155},[96,149441,80292],{"class":106},[96,149443,1053],{"class":155},[96,149445,149383],{"class":211},[96,149447,113],{"class":106},[96,149449,149450],{"class":98,"line":1177},[96,149451,2383],{"emptyLinePlaceholder":23},[96,149453,149454],{"class":98,"line":1183},[96,149455,2383],{"emptyLinePlaceholder":23},[96,149457,149458,149461,149463],{"class":98,"line":1197},[96,149459,149460],{"class":106},"student ",[96,149462,152],{"class":102},[96,149464,149465],{"class":106}," Student()\n",[96,149467,149468,149471,149473],{"class":98,"line":1203},[96,149469,149470],{"class":106},"student.name ",[96,149472,152],{"class":102},[96,149474,149332],{"class":211},[96,149476,149477,149480,149482],{"class":98,"line":1294},[96,149478,149479],{"class":106},"student.age ",[96,149481,152],{"class":102},[96,149483,146530],{"class":155},[96,149485,149486],{"class":98,"line":1300},[96,149487,149488],{"class":106},"student.introduce()\n",[14,149490,149491],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[38,149493,149495],{"id":149494},"_112-类和对象","11.2 类和对象",[14,149497,149498],{},"类是模板，对象是根据模板创建出来的具体实例。",[87,149500,149502],{"className":30357,"code":149501,"language":30359,"meta":18,"style":18},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[93,149503,149504,149512,149517,149521,149525,149534],{"__ignoreMap":18},[96,149505,149506,149508,149510],{"class":98,"line":99},[96,149507,14678],{"class":102},[96,149509,7882],{"class":1946},[96,149511,3722],{"class":106},[96,149513,149514],{"class":98,"line":19},[96,149515,149516],{"class":102},"    pass\n",[96,149518,149519],{"class":98,"line":1162},[96,149520,2383],{"emptyLinePlaceholder":23},[96,149522,149523],{"class":98,"line":1177},[96,149524,2383],{"emptyLinePlaceholder":23},[96,149526,149527,149530,149532],{"class":98,"line":1183},[96,149528,149529],{"class":106},"student1 ",[96,149531,152],{"class":102},[96,149533,149465],{"class":106},[96,149535,149536,149539,149541],{"class":98,"line":1197},[96,149537,149538],{"class":106},"student2 ",[96,149540,152],{"class":102},[96,149542,149465],{"class":106},[14,149544,149545,149548,149549,100997,149552,149555],{},[93,149546,149547],{},"Student"," 是类，",[93,149550,149551],{},"student1",[93,149553,149554],{},"student2"," 是对象。",[38,149557,149559],{"id":149558},"_113-属性","11.3 属性",[14,149561,149562],{},"属性是对象保存的数据。",[87,149564,149566],{"className":30357,"code":149565,"language":30359,"meta":18,"style":18},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[93,149567,149568,149576,149580,149584,149588,149596,149604,149612,149616,149623],{"__ignoreMap":18},[96,149569,149570,149572,149574],{"class":98,"line":99},[96,149571,14678],{"class":102},[96,149573,7882],{"class":1946},[96,149575,3722],{"class":106},[96,149577,149578],{"class":98,"line":19},[96,149579,149516],{"class":102},[96,149581,149582],{"class":98,"line":1162},[96,149583,2383],{"emptyLinePlaceholder":23},[96,149585,149586],{"class":98,"line":1177},[96,149587,2383],{"emptyLinePlaceholder":23},[96,149589,149590,149592,149594],{"class":98,"line":1183},[96,149591,149460],{"class":106},[96,149593,152],{"class":102},[96,149595,149465],{"class":106},[96,149597,149598,149600,149602],{"class":98,"line":1197},[96,149599,149470],{"class":106},[96,149601,152],{"class":102},[96,149603,149332],{"class":211},[96,149605,149606,149608,149610],{"class":98,"line":1203},[96,149607,149479],{"class":106},[96,149609,152],{"class":102},[96,149611,146530],{"class":155},[96,149613,149614],{"class":98,"line":1294},[96,149615,2383],{"emptyLinePlaceholder":23},[96,149617,149618,149620],{"class":98,"line":1300},[96,149619,30394],{"class":155},[96,149621,149622],{"class":106},"(student.name)\n",[96,149624,149625,149627],{"class":98,"line":1312},[96,149626,30394],{"class":155},[96,149628,149629],{"class":106},"(student.age)\n",[14,149631,149632],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[38,149634,149636],{"id":149635},"_114-方法","11.4 方法",[14,149638,149639],{},"类中的函数叫方法。",[87,149641,149642],{"className":30357,"code":149400,"language":30359,"meta":18,"style":18},[93,149643,149644,149652,149660,149688,149692,149696,149704,149712,149720],{"__ignoreMap":18},[96,149645,149646,149648,149650],{"class":98,"line":99},[96,149647,14678],{"class":102},[96,149649,7882],{"class":1946},[96,149651,3722],{"class":106},[96,149653,149654,149656,149658],{"class":98,"line":19},[96,149655,30780],{"class":102},[96,149657,149351],{"class":1946},[96,149659,30786],{"class":106},[96,149661,149662,149664,149666,149668,149670,149672,149674,149676,149678,149680,149682,149684,149686],{"class":98,"line":1162},[96,149663,32430],{"class":155},[96,149665,107],{"class":106},[96,149667,159],{"class":102},[96,149669,149365],{"class":211},[96,149671,149431],{"class":155},[96,149673,80280],{"class":106},[96,149675,1053],{"class":155},[96,149677,149374],{"class":211},[96,149679,149431],{"class":155},[96,149681,80292],{"class":106},[96,149683,1053],{"class":155},[96,149685,149383],{"class":211},[96,149687,113],{"class":106},[96,149689,149690],{"class":98,"line":1177},[96,149691,2383],{"emptyLinePlaceholder":23},[96,149693,149694],{"class":98,"line":1183},[96,149695,2383],{"emptyLinePlaceholder":23},[96,149697,149698,149700,149702],{"class":98,"line":1197},[96,149699,149460],{"class":106},[96,149701,152],{"class":102},[96,149703,149465],{"class":106},[96,149705,149706,149708,149710],{"class":98,"line":1203},[96,149707,149470],{"class":106},[96,149709,152],{"class":102},[96,149711,149332],{"class":211},[96,149713,149714,149716,149718],{"class":98,"line":1294},[96,149715,149479],{"class":106},[96,149717,152],{"class":102},[96,149719,146530],{"class":155},[96,149721,149722],{"class":98,"line":1300},[96,149723,149488],{"class":106},[14,149725,149726,149728,149729,149731],{},[93,149727,30802],{}," 表示当前对象。调用方法时不需要手动传入 ",[93,149730,30802],{},"，Python 会自动传。",[38,149733,149735],{"id":149734},"_115-构造方法__init__","11.5 构造方法__init__",[14,149737,149738,149740],{},[93,149739,30808],{}," 在对象创建时自动执行，用于初始化属性。",[87,149742,149744],{"className":30357,"code":149743,"language":30359,"meta":18,"style":18},"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",[93,149745,149746,149754,149763,149775,149787,149798,149802,149810,149848,149852,149856,149878],{"__ignoreMap":18},[96,149747,149748,149750,149752],{"class":98,"line":99},[96,149749,14678],{"class":102},[96,149751,7882],{"class":1946},[96,149753,3722],{"class":106},[96,149755,149756,149758,149760],{"class":98,"line":19},[96,149757,30780],{"class":102},[96,149759,30783],{"class":155},[96,149761,149762],{"class":106},"(self, name, age, score):\n",[96,149764,149765,149767,149770,149772],{"class":98,"line":1162},[96,149766,30824],{"class":155},[96,149768,149769],{"class":106},".name ",[96,149771,152],{"class":102},[96,149773,149774],{"class":106}," name\n",[96,149776,149777,149779,149782,149784],{"class":98,"line":1177},[96,149778,30824],{"class":155},[96,149780,149781],{"class":106},".age ",[96,149783,152],{"class":102},[96,149785,149786],{"class":106}," age\n",[96,149788,149789,149791,149794,149796],{"class":98,"line":1183},[96,149790,30824],{"class":155},[96,149792,149793],{"class":106},".score ",[96,149795,152],{"class":102},[96,149797,1562],{"class":106},[96,149799,149800],{"class":98,"line":1197},[96,149801,2383],{"emptyLinePlaceholder":23},[96,149803,149804,149806,149808],{"class":98,"line":1203},[96,149805,30780],{"class":102},[96,149807,149351],{"class":1946},[96,149809,30786],{"class":106},[96,149811,149812,149814,149816,149818,149820,149822,149824,149826,149828,149830,149832,149834,149837,149839,149842,149844,149846],{"class":98,"line":1294},[96,149813,32430],{"class":155},[96,149815,107],{"class":106},[96,149817,159],{"class":102},[96,149819,149365],{"class":211},[96,149821,149431],{"class":155},[96,149823,80280],{"class":106},[96,149825,1053],{"class":155},[96,149827,149374],{"class":211},[96,149829,149431],{"class":155},[96,149831,80292],{"class":106},[96,149833,1053],{"class":155},[96,149835,149836],{"class":211},"岁，成绩",[96,149838,149431],{"class":155},[96,149840,149841],{"class":106},".score",[96,149843,1053],{"class":155},[96,149845,358],{"class":211},[96,149847,113],{"class":106},[96,149849,149850],{"class":98,"line":1300},[96,149851,2383],{"emptyLinePlaceholder":23},[96,149853,149854],{"class":98,"line":1312},[96,149855,2383],{"emptyLinePlaceholder":23},[96,149857,149858,149860,149862,149865,149868,149870,149872,149874,149876],{"class":98,"line":1595},[96,149859,149460],{"class":106},[96,149861,152],{"class":102},[96,149863,149864],{"class":106}," Student(",[96,149866,149867],{"class":211},"\"小明\"",[96,149869,12419],{"class":106},[96,149871,757],{"class":155},[96,149873,12419],{"class":106},[96,149875,1096],{"class":155},[96,149877,113],{"class":106},[96,149879,149880],{"class":98,"line":1600},[96,149881,149488],{"class":106},[14,149883,149884],{},"构造方法的好处：",[50,149886,149887,149890,149893],{},[53,149888,149889],{},"创建对象时必须提供必要数据。",[53,149891,149892],{},"属性初始化集中，不容易漏。",[53,149894,149895],{},"对象状态更完整。",[38,149897,149899,149900],{"id":149898},"_116-str","11.6 ",[256,149901,1282],{},[14,149903,149904,149905,28364],{},"直接打印对象时，默认输出不直观。可以定义 ",[93,149906,149907],{},"__str__",[87,149909,149911],{"className":30357,"code":149910,"language":30359,"meta":18,"style":18},"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",[93,149912,149913,149921,149930,149940,149950,149954,149963,149991,149995,149999,150015],{"__ignoreMap":18},[96,149914,149915,149917,149919],{"class":98,"line":99},[96,149916,14678],{"class":102},[96,149918,7882],{"class":1946},[96,149920,3722],{"class":106},[96,149922,149923,149925,149927],{"class":98,"line":19},[96,149924,30780],{"class":102},[96,149926,30783],{"class":155},[96,149928,149929],{"class":106},"(self, name, age):\n",[96,149931,149932,149934,149936,149938],{"class":98,"line":1162},[96,149933,30824],{"class":155},[96,149935,149769],{"class":106},[96,149937,152],{"class":102},[96,149939,149774],{"class":106},[96,149941,149942,149944,149946,149948],{"class":98,"line":1177},[96,149943,30824],{"class":155},[96,149945,149781],{"class":106},[96,149947,152],{"class":102},[96,149949,149786],{"class":106},[96,149951,149952],{"class":98,"line":1183},[96,149953,2383],{"emptyLinePlaceholder":23},[96,149955,149956,149958,149961],{"class":98,"line":1197},[96,149957,30780],{"class":102},[96,149959,149960],{"class":155}," __str__",[96,149962,30786],{"class":106},[96,149964,149965,149967,149970,149973,149975,149977,149979,149982,149984,149986,149988],{"class":98,"line":1203},[96,149966,14736],{"class":102},[96,149968,149969],{"class":102}," f",[96,149971,149972],{"class":211},"\"Student(name=",[96,149974,149431],{"class":155},[96,149976,80280],{"class":106},[96,149978,1053],{"class":155},[96,149980,149981],{"class":211},", age=",[96,149983,149431],{"class":155},[96,149985,80292],{"class":106},[96,149987,1053],{"class":155},[96,149989,149990],{"class":211},")\"\n",[96,149992,149993],{"class":98,"line":1294},[96,149994,2383],{"emptyLinePlaceholder":23},[96,149996,149997],{"class":98,"line":1300},[96,149998,2383],{"emptyLinePlaceholder":23},[96,150000,150001,150003,150005,150007,150009,150011,150013],{"class":98,"line":1312},[96,150002,149460],{"class":106},[96,150004,152],{"class":102},[96,150006,149864],{"class":106},[96,150008,149867],{"class":211},[96,150010,12419],{"class":106},[96,150012,757],{"class":155},[96,150014,113],{"class":106},[96,150016,150017,150019],{"class":98,"line":1595},[96,150018,30394],{"class":155},[96,150020,150021],{"class":106},"(student)\n",[38,150023,150025],{"id":150024},"_117-封装","11.7 封装",[14,150027,150028],{},"封装就是把数据和方法放到类中，并控制访问方式。",[14,150030,150031],{},"Python 中以双下划线开头的属性通常视为私有属性。",[87,150033,150035],{"className":30357,"code":150034,"language":30359,"meta":18,"style":18},"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",[93,150036,150037,150046,150055,150067,150079,150083,150092,150101,150105,150115,150128,150139,150144,150155,150159,150168,150180,150191,150195,150208,150219,150223,150234,150238,150242,150260,150269,150278],{"__ignoreMap":18},[96,150038,150039,150041,150044],{"class":98,"line":99},[96,150040,14678],{"class":102},[96,150042,150043],{"class":1946}," Account",[96,150045,3722],{"class":106},[96,150047,150048,150050,150052],{"class":98,"line":19},[96,150049,30780],{"class":102},[96,150051,30783],{"class":155},[96,150053,150054],{"class":106},"(self, owner, balance):\n",[96,150056,150057,150059,150062,150064],{"class":98,"line":1162},[96,150058,30824],{"class":155},[96,150060,150061],{"class":106},".owner ",[96,150063,152],{"class":102},[96,150065,150066],{"class":106}," owner\n",[96,150068,150069,150071,150074,150076],{"class":98,"line":1177},[96,150070,30824],{"class":155},[96,150072,150073],{"class":106},".__balance ",[96,150075,152],{"class":102},[96,150077,150078],{"class":106}," balance\n",[96,150080,150081],{"class":98,"line":1183},[96,150082,2383],{"emptyLinePlaceholder":23},[96,150084,150085,150087,150090],{"class":98,"line":1197},[96,150086,30780],{"class":102},[96,150088,150089],{"class":1946}," get_balance",[96,150091,30786],{"class":106},[96,150093,150094,150096,150098],{"class":98,"line":1203},[96,150095,14736],{"class":102},[96,150097,38852],{"class":155},[96,150099,150100],{"class":106},".__balance\n",[96,150102,150103],{"class":98,"line":1294},[96,150104,2383],{"emptyLinePlaceholder":23},[96,150106,150107,150109,150112],{"class":98,"line":1300},[96,150108,30780],{"class":102},[96,150110,150111],{"class":1946}," deposit",[96,150113,150114],{"class":106},"(self, money):\n",[96,150116,150117,150119,150122,150124,150126],{"class":98,"line":1312},[96,150118,2480],{"class":102},[96,150120,150121],{"class":106}," money ",[96,150123,1571],{"class":102},[96,150125,4076],{"class":155},[96,150127,3722],{"class":106},[96,150129,150130,150132,150134,150137],{"class":98,"line":1595},[96,150131,34629],{"class":155},[96,150133,107],{"class":106},[96,150135,150136],{"class":211},"\"存款金额必须大于0\"",[96,150138,113],{"class":106},[96,150140,150141],{"class":98,"line":1600},[96,150142,150143],{"class":102},"            return\n",[96,150145,150146,150148,150150,150152],{"class":98,"line":1606},[96,150147,30824],{"class":155},[96,150149,150073],{"class":106},[96,150151,9461],{"class":102},[96,150153,150154],{"class":106}," money\n",[96,150156,150157],{"class":98,"line":1611},[96,150158,2383],{"emptyLinePlaceholder":23},[96,150160,150161,150163,150166],{"class":98,"line":1625},[96,150162,30780],{"class":102},[96,150164,150165],{"class":1946}," withdraw",[96,150167,150114],{"class":106},[96,150169,150170,150172,150174,150176,150178],{"class":98,"line":1630},[96,150171,2480],{"class":102},[96,150173,150121],{"class":106},[96,150175,1571],{"class":102},[96,150177,4076],{"class":155},[96,150179,3722],{"class":106},[96,150181,150182,150184,150186,150189],{"class":98,"line":1636},[96,150183,34629],{"class":155},[96,150185,107],{"class":106},[96,150187,150188],{"class":211},"\"取款金额必须大于0\"",[96,150190,113],{"class":106},[96,150192,150193],{"class":98,"line":1657},[96,150194,150143],{"class":102},[96,150196,150197,150199,150201,150203,150205],{"class":98,"line":1662},[96,150198,2480],{"class":102},[96,150200,150121],{"class":106},[96,150202,1067],{"class":102},[96,150204,38852],{"class":155},[96,150206,150207],{"class":106},".__balance:\n",[96,150209,150210,150212,150214,150217],{"class":98,"line":1676},[96,150211,34629],{"class":155},[96,150213,107],{"class":106},[96,150215,150216],{"class":211},"\"余额不足\"",[96,150218,113],{"class":106},[96,150220,150221],{"class":98,"line":1681},[96,150222,150143],{"class":102},[96,150224,150225,150227,150229,150232],{"class":98,"line":1710},[96,150226,30824],{"class":155},[96,150228,150073],{"class":106},[96,150230,150231],{"class":102},"-=",[96,150233,150154],{"class":106},[96,150235,150236],{"class":98,"line":1715},[96,150237,2383],{"emptyLinePlaceholder":23},[96,150239,150240],{"class":98,"line":1732},[96,150241,2383],{"emptyLinePlaceholder":23},[96,150243,150244,150247,150249,150252,150254,150256,150258],{"class":98,"line":1737},[96,150245,150246],{"class":106},"account ",[96,150248,152],{"class":102},[96,150250,150251],{"class":106}," Account(",[96,150253,149867],{"class":211},[96,150255,12419],{"class":106},[96,150257,6394],{"class":155},[96,150259,113],{"class":106},[96,150261,150262,150265,150267],{"class":98,"line":1742},[96,150263,150264],{"class":106},"account.deposit(",[96,150266,1705],{"class":155},[96,150268,113],{"class":106},[96,150270,150271,150274,150276],{"class":98,"line":1747},[96,150272,150273],{"class":106},"account.withdraw(",[96,150275,418],{"class":155},[96,150277,113],{"class":106},[96,150279,150280,150282],{"class":98,"line":1761},[96,150281,30394],{"class":155},[96,150283,150284],{"class":106},"(account.get_balance())\n",[14,150286,150287],{},"封装的意义是避免外部随意修改内部状态。",[38,150289,150291],{"id":150290},"_118-继承","11.8 继承",[14,150293,150294],{},"继承可以让子类复用父类的属性和方法。",[87,150296,150298],{"className":30357,"code":150297,"language":30359,"meta":18,"style":18},"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",[93,150299,150300,150309,150318,150329,150333,150337,150351,150360,150371,150375,150379,150389,150394],{"__ignoreMap":18},[96,150301,150302,150304,150307],{"class":98,"line":99},[96,150303,14678],{"class":102},[96,150305,150306],{"class":1946}," Animal",[96,150308,3722],{"class":106},[96,150310,150311,150313,150316],{"class":98,"line":19},[96,150312,30780],{"class":102},[96,150314,150315],{"class":1946}," eat",[96,150317,30786],{"class":106},[96,150319,150320,150322,150324,150327],{"class":98,"line":1162},[96,150321,32430],{"class":155},[96,150323,107],{"class":106},[96,150325,150326],{"class":211},"\"吃东西\"",[96,150328,113],{"class":106},[96,150330,150331],{"class":98,"line":1177},[96,150332,2383],{"emptyLinePlaceholder":23},[96,150334,150335],{"class":98,"line":1183},[96,150336,2383],{"emptyLinePlaceholder":23},[96,150338,150339,150341,150344,150346,150349],{"class":98,"line":1197},[96,150340,14678],{"class":102},[96,150342,150343],{"class":1946}," Dog",[96,150345,107],{"class":106},[96,150347,150348],{"class":1946},"Animal",[96,150350,30765],{"class":106},[96,150352,150353,150355,150358],{"class":98,"line":1203},[96,150354,30780],{"class":102},[96,150356,150357],{"class":1946}," bark",[96,150359,30786],{"class":106},[96,150361,150362,150364,150366,150369],{"class":98,"line":1294},[96,150363,32430],{"class":155},[96,150365,107],{"class":106},[96,150367,150368],{"class":211},"\"汪汪\"",[96,150370,113],{"class":106},[96,150372,150373],{"class":98,"line":1300},[96,150374,2383],{"emptyLinePlaceholder":23},[96,150376,150377],{"class":98,"line":1312},[96,150378,2383],{"emptyLinePlaceholder":23},[96,150380,150381,150384,150386],{"class":98,"line":1595},[96,150382,150383],{"class":106},"dog ",[96,150385,152],{"class":102},[96,150387,150388],{"class":106}," Dog()\n",[96,150390,150391],{"class":98,"line":1600},[96,150392,150393],{"class":106},"dog.eat()\n",[96,150395,150396],{"class":98,"line":1606},[96,150397,150398],{"class":106},"dog.bark()\n",[14,150400,150401],{},"子类可以扩展新方法，也可以重写父类方法。",[38,150403,150405],{"id":150404},"_119-方法重写","11.9 方法重写",[87,150407,150409],{"className":30357,"code":150408,"language":30359,"meta":18,"style":18},"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",[93,150410,150411,150419,150428,150439,150443,150447,150459,150467,150477,150481,150485,150498,150506,150517,150521,150525,150533,150543,150547,150552],{"__ignoreMap":18},[96,150412,150413,150415,150417],{"class":98,"line":99},[96,150414,14678],{"class":102},[96,150416,150306],{"class":1946},[96,150418,3722],{"class":106},[96,150420,150421,150423,150426],{"class":98,"line":19},[96,150422,30780],{"class":102},[96,150424,150425],{"class":1946}," speak",[96,150427,30786],{"class":106},[96,150429,150430,150432,150434,150437],{"class":98,"line":1162},[96,150431,32430],{"class":155},[96,150433,107],{"class":106},[96,150435,150436],{"class":211},"\"动物叫\"",[96,150438,113],{"class":106},[96,150440,150441],{"class":98,"line":1177},[96,150442,2383],{"emptyLinePlaceholder":23},[96,150444,150445],{"class":98,"line":1183},[96,150446,2383],{"emptyLinePlaceholder":23},[96,150448,150449,150451,150453,150455,150457],{"class":98,"line":1197},[96,150450,14678],{"class":102},[96,150452,150343],{"class":1946},[96,150454,107],{"class":106},[96,150456,150348],{"class":1946},[96,150458,30765],{"class":106},[96,150460,150461,150463,150465],{"class":98,"line":1203},[96,150462,30780],{"class":102},[96,150464,150425],{"class":1946},[96,150466,30786],{"class":106},[96,150468,150469,150471,150473,150475],{"class":98,"line":1294},[96,150470,32430],{"class":155},[96,150472,107],{"class":106},[96,150474,150368],{"class":211},[96,150476,113],{"class":106},[96,150478,150479],{"class":98,"line":1300},[96,150480,2383],{"emptyLinePlaceholder":23},[96,150482,150483],{"class":98,"line":1312},[96,150484,2383],{"emptyLinePlaceholder":23},[96,150486,150487,150489,150492,150494,150496],{"class":98,"line":1595},[96,150488,14678],{"class":102},[96,150490,150491],{"class":1946}," Cat",[96,150493,107],{"class":106},[96,150495,150348],{"class":1946},[96,150497,30765],{"class":106},[96,150499,150500,150502,150504],{"class":98,"line":1600},[96,150501,30780],{"class":102},[96,150503,150425],{"class":1946},[96,150505,30786],{"class":106},[96,150507,150508,150510,150512,150515],{"class":98,"line":1606},[96,150509,32430],{"class":155},[96,150511,107],{"class":106},[96,150513,150514],{"class":211},"\"喵喵\"",[96,150516,113],{"class":106},[96,150518,150519],{"class":98,"line":1611},[96,150520,2383],{"emptyLinePlaceholder":23},[96,150522,150523],{"class":98,"line":1625},[96,150524,2383],{"emptyLinePlaceholder":23},[96,150526,150527,150529,150531],{"class":98,"line":1630},[96,150528,150383],{"class":106},[96,150530,152],{"class":102},[96,150532,150388],{"class":106},[96,150534,150535,150538,150540],{"class":98,"line":1636},[96,150536,150537],{"class":106},"cat ",[96,150539,152],{"class":102},[96,150541,150542],{"class":106}," Cat()\n",[96,150544,150545],{"class":98,"line":1657},[96,150546,2383],{"emptyLinePlaceholder":23},[96,150548,150549],{"class":98,"line":1662},[96,150550,150551],{"class":106},"dog.speak()\n",[96,150553,150554],{"class":98,"line":1676},[96,150555,150556],{"class":106},"cat.speak()\n",[38,150558,150560],{"id":150559},"_1110-super","11.10 super",[14,150562,150563,150564,150567],{},"子类可以通过 ",[93,150565,150566],{},"super()"," 调用父类方法。",[87,150569,150571],{"className":30357,"code":150570,"language":30359,"meta":18,"style":18},"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",[93,150572,150573,150581,150590,150600,150604,150608,150620,150629,150640,150650,150654,150658,150674],{"__ignoreMap":18},[96,150574,150575,150577,150579],{"class":98,"line":99},[96,150576,14678],{"class":102},[96,150578,15553],{"class":1946},[96,150580,3722],{"class":106},[96,150582,150583,150585,150587],{"class":98,"line":19},[96,150584,30780],{"class":102},[96,150586,30783],{"class":155},[96,150588,150589],{"class":106},"(self, name):\n",[96,150591,150592,150594,150596,150598],{"class":98,"line":1162},[96,150593,30824],{"class":155},[96,150595,149769],{"class":106},[96,150597,152],{"class":102},[96,150599,149774],{"class":106},[96,150601,150602],{"class":98,"line":1177},[96,150603,2383],{"emptyLinePlaceholder":23},[96,150605,150606],{"class":98,"line":1183},[96,150607,2383],{"emptyLinePlaceholder":23},[96,150609,150610,150612,150614,150616,150618],{"class":98,"line":1197},[96,150611,14678],{"class":102},[96,150613,7882],{"class":1946},[96,150615,107],{"class":106},[96,150617,19030],{"class":1946},[96,150619,30765],{"class":106},[96,150621,150622,150624,150626],{"class":98,"line":1203},[96,150623,30780],{"class":102},[96,150625,30783],{"class":155},[96,150627,150628],{"class":106},"(self, name, score):\n",[96,150630,150631,150633,150635,150637],{"class":98,"line":1294},[96,150632,30796],{"class":155},[96,150634,17245],{"class":106},[96,150636,30808],{"class":155},[96,150638,150639],{"class":106},"(name)\n",[96,150641,150642,150644,150646,150648],{"class":98,"line":1300},[96,150643,30824],{"class":155},[96,150645,149793],{"class":106},[96,150647,152],{"class":102},[96,150649,1562],{"class":106},[96,150651,150652],{"class":98,"line":1312},[96,150653,2383],{"emptyLinePlaceholder":23},[96,150655,150656],{"class":98,"line":1595},[96,150657,2383],{"emptyLinePlaceholder":23},[96,150659,150660,150662,150664,150666,150668,150670,150672],{"class":98,"line":1600},[96,150661,149460],{"class":106},[96,150663,152],{"class":102},[96,150665,149864],{"class":106},[96,150667,149867],{"class":211},[96,150669,12419],{"class":106},[96,150671,1096],{"class":155},[96,150673,113],{"class":106},[96,150675,150676,150678],{"class":98,"line":1606},[96,150677,30394],{"class":155},[96,150679,150680],{"class":106},"(student.name, student.score)\n",[38,150682,150684],{"id":150683},"_1111-多态","11.11 多态",[14,150686,150687],{},"多态指不同对象响应同一个方法，表现出不同结果。",[87,150689,150691],{"className":30357,"code":150690,"language":30359,"meta":18,"style":18},"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",[93,150692,150693,150701,150709,150719,150723,150727,150735,150743,150753,150757,150761,150771,150776,150780,150784,150789],{"__ignoreMap":18},[96,150694,150695,150697,150699],{"class":98,"line":99},[96,150696,14678],{"class":102},[96,150698,150343],{"class":1946},[96,150700,3722],{"class":106},[96,150702,150703,150705,150707],{"class":98,"line":19},[96,150704,30780],{"class":102},[96,150706,150425],{"class":1946},[96,150708,30786],{"class":106},[96,150710,150711,150713,150715,150717],{"class":98,"line":1162},[96,150712,32430],{"class":155},[96,150714,107],{"class":106},[96,150716,150368],{"class":211},[96,150718,113],{"class":106},[96,150720,150721],{"class":98,"line":1177},[96,150722,2383],{"emptyLinePlaceholder":23},[96,150724,150725],{"class":98,"line":1183},[96,150726,2383],{"emptyLinePlaceholder":23},[96,150728,150729,150731,150733],{"class":98,"line":1197},[96,150730,14678],{"class":102},[96,150732,150491],{"class":1946},[96,150734,3722],{"class":106},[96,150736,150737,150739,150741],{"class":98,"line":1203},[96,150738,30780],{"class":102},[96,150740,150425],{"class":1946},[96,150742,30786],{"class":106},[96,150744,150745,150747,150749,150751],{"class":98,"line":1294},[96,150746,32430],{"class":155},[96,150748,107],{"class":106},[96,150750,150514],{"class":211},[96,150752,113],{"class":106},[96,150754,150755],{"class":98,"line":1300},[96,150756,2383],{"emptyLinePlaceholder":23},[96,150758,150759],{"class":98,"line":1312},[96,150760,2383],{"emptyLinePlaceholder":23},[96,150762,150763,150765,150768],{"class":98,"line":1595},[96,150764,31926],{"class":102},[96,150766,150767],{"class":1946}," make_sound",[96,150769,150770],{"class":106},"(animal):\n",[96,150772,150773],{"class":98,"line":1600},[96,150774,150775],{"class":106},"    animal.speak()\n",[96,150777,150778],{"class":98,"line":1606},[96,150779,2383],{"emptyLinePlaceholder":23},[96,150781,150782],{"class":98,"line":1611},[96,150783,2383],{"emptyLinePlaceholder":23},[96,150785,150786],{"class":98,"line":1625},[96,150787,150788],{"class":106},"make_sound(Dog())\n",[96,150790,150791],{"class":98,"line":1630},[96,150792,150793],{"class":106},"make_sound(Cat())\n",[14,150795,150796],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[38,150798,150800],{"id":150799},"_1112-类属性和实例属性","11.12 类属性和实例属性",[14,150802,150803],{},"实例属性属于对象：",[87,150805,150807],{"className":30357,"code":150806,"language":30359,"meta":18,"style":18},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[93,150808,150809,150817,150825],{"__ignoreMap":18},[96,150810,150811,150813,150815],{"class":98,"line":99},[96,150812,14678],{"class":102},[96,150814,7882],{"class":1946},[96,150816,3722],{"class":106},[96,150818,150819,150821,150823],{"class":98,"line":19},[96,150820,30780],{"class":102},[96,150822,30783],{"class":155},[96,150824,150589],{"class":106},[96,150826,150827,150829,150831,150833],{"class":98,"line":1162},[96,150828,30824],{"class":155},[96,150830,149769],{"class":106},[96,150832,152],{"class":102},[96,150834,149774],{"class":106},[14,150836,150837],{},"类属性属于类，所有对象共享：",[87,150839,150841],{"className":30357,"code":150840,"language":30359,"meta":18,"style":18},"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",[93,150842,150843,150851,150861,150865,150873,150883,150887,150891,150904,150918,150922,150929,150936],{"__ignoreMap":18},[96,150844,150845,150847,150849],{"class":98,"line":99},[96,150846,14678],{"class":102},[96,150848,7882],{"class":1946},[96,150850,3722],{"class":106},[96,150852,150853,150856,150858],{"class":98,"line":19},[96,150854,150855],{"class":106},"    school ",[96,150857,152],{"class":102},[96,150859,150860],{"class":211}," \"黑马学校\"\n",[96,150862,150863],{"class":98,"line":1162},[96,150864,2383],{"emptyLinePlaceholder":23},[96,150866,150867,150869,150871],{"class":98,"line":1177},[96,150868,30780],{"class":102},[96,150870,30783],{"class":155},[96,150872,150589],{"class":106},[96,150874,150875,150877,150879,150881],{"class":98,"line":1183},[96,150876,30824],{"class":155},[96,150878,149769],{"class":106},[96,150880,152],{"class":102},[96,150882,149774],{"class":106},[96,150884,150885],{"class":98,"line":1197},[96,150886,2383],{"emptyLinePlaceholder":23},[96,150888,150889],{"class":98,"line":1203},[96,150890,2383],{"emptyLinePlaceholder":23},[96,150892,150893,150896,150898,150900,150902],{"class":98,"line":1294},[96,150894,150895],{"class":106},"s1 ",[96,150897,152],{"class":102},[96,150899,149864],{"class":106},[96,150901,149867],{"class":211},[96,150903,113],{"class":106},[96,150905,150906,150909,150911,150913,150916],{"class":98,"line":1300},[96,150907,150908],{"class":106},"s2 ",[96,150910,152],{"class":102},[96,150912,149864],{"class":106},[96,150914,150915],{"class":211},"\"小红\"",[96,150917,113],{"class":106},[96,150919,150920],{"class":98,"line":1312},[96,150921,2383],{"emptyLinePlaceholder":23},[96,150923,150924,150926],{"class":98,"line":1595},[96,150925,30394],{"class":155},[96,150927,150928],{"class":106},"(s1.school)\n",[96,150930,150931,150933],{"class":98,"line":1600},[96,150932,30394],{"class":155},[96,150934,150935],{"class":106},"(s2.school)\n",[96,150937,150938,150940],{"class":98,"line":1606},[96,150939,30394],{"class":155},[96,150941,150942],{"class":106},"(Student.school)\n",[14,150944,150945],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[38,150947,150949],{"id":150948},"_1113-类方法和静态方法","11.13 类方法和静态方法",[67,150951,150953],{"id":150952},"_11131-类方法","11.13.1 类方法",[14,150955,150956,150957,150960,150961,28364],{},"类方法使用 ",[93,150958,150959],{},"@classmethod","，第一个参数通常是 ",[93,150962,150963],{},"cls",[87,150965,150967],{"className":30357,"code":150966,"language":30359,"meta":18,"style":18},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[93,150968,150969,150977,150985,150989,150997,151007,151017,151021,151025],{"__ignoreMap":18},[96,150970,150971,150973,150975],{"class":98,"line":99},[96,150972,14678],{"class":102},[96,150974,7882],{"class":1946},[96,150976,3722],{"class":106},[96,150978,150979,150981,150983],{"class":98,"line":19},[96,150980,150855],{"class":106},[96,150982,152],{"class":102},[96,150984,150860],{"class":211},[96,150986,150987],{"class":98,"line":1162},[96,150988,2383],{"emptyLinePlaceholder":23},[96,150990,150991,150994],{"class":98,"line":1177},[96,150992,150993],{"class":1946},"    @",[96,150995,150996],{"class":155},"classmethod\n",[96,150998,150999,151001,151004],{"class":98,"line":1183},[96,151000,30780],{"class":102},[96,151002,151003],{"class":1946}," get_school",[96,151005,151006],{"class":106},"(cls):\n",[96,151008,151009,151011,151014],{"class":98,"line":1197},[96,151010,14736],{"class":102},[96,151012,151013],{"class":155}," cls",[96,151015,151016],{"class":106},".school\n",[96,151018,151019],{"class":98,"line":1203},[96,151020,2383],{"emptyLinePlaceholder":23},[96,151022,151023],{"class":98,"line":1294},[96,151024,2383],{"emptyLinePlaceholder":23},[96,151026,151027,151029],{"class":98,"line":1300},[96,151028,30394],{"class":155},[96,151030,151031],{"class":106},"(Student.get_school())\n",[67,151033,151035],{"id":151034},"_11132-静态方法","11.13.2 静态方法",[14,151037,151038,151039,151042],{},"静态方法使用 ",[93,151040,151041],{},"@staticmethod","，不需要访问实例和类。",[87,151044,151046],{"className":30357,"code":151045,"language":30359,"meta":18,"style":18},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[93,151047,151048,151057,151064,151073,151084,151088,151092],{"__ignoreMap":18},[96,151049,151050,151052,151055],{"class":98,"line":99},[96,151051,14678],{"class":102},[96,151053,151054],{"class":1946}," MathUtils",[96,151056,3722],{"class":106},[96,151058,151059,151061],{"class":98,"line":19},[96,151060,150993],{"class":1946},[96,151062,151063],{"class":155},"staticmethod\n",[96,151065,151066,151068,151070],{"class":98,"line":1162},[96,151067,30780],{"class":102},[96,151069,5193],{"class":1946},[96,151071,151072],{"class":106},"(a, b):\n",[96,151074,151075,151077,151079,151081],{"class":98,"line":1177},[96,151076,14736],{"class":102},[96,151078,10853],{"class":106},[96,151080,588],{"class":102},[96,151082,151083],{"class":106}," b\n",[96,151085,151086],{"class":98,"line":1183},[96,151087,2383],{"emptyLinePlaceholder":23},[96,151089,151090],{"class":98,"line":1197},[96,151091,2383],{"emptyLinePlaceholder":23},[96,151093,151094,151096,151099,151101,151103,151105],{"class":98,"line":1203},[96,151095,30394],{"class":155},[96,151097,151098],{"class":106},"(MathUtils.add(",[96,151100,324],{"class":155},[96,151102,12419],{"class":106},[96,151104,184],{"class":155},[96,151106,30476],{"class":106},[14,151108,151109],{},"静态方法本质上是放在类命名空间里的普通函数。",[38,151111,151113],{"id":151112},"_1114-dataclass","11.14 dataclass",[14,151115,151116,151119],{},[93,151117,151118],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[87,151121,151123],{"className":30357,"code":151122,"language":30359,"meta":18,"style":18},"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",[93,151124,151125,151137,151141,151145,151150,151158,151166,151174,151182,151186,151190,151210],{"__ignoreMap":18},[96,151126,151127,151129,151132,151134],{"class":98,"line":99},[96,151128,30716],{"class":102},[96,151130,151131],{"class":106}," dataclasses ",[96,151133,30371],{"class":102},[96,151135,151136],{"class":106}," dataclass\n",[96,151138,151139],{"class":98,"line":19},[96,151140,2383],{"emptyLinePlaceholder":23},[96,151142,151143],{"class":98,"line":1162},[96,151144,2383],{"emptyLinePlaceholder":23},[96,151146,151147],{"class":98,"line":1177},[96,151148,151149],{"class":1946},"@dataclass\n",[96,151151,151152,151154,151156],{"class":98,"line":1183},[96,151153,14678],{"class":102},[96,151155,7882],{"class":1946},[96,151157,3722],{"class":106},[96,151159,151160,151163],{"class":98,"line":1197},[96,151161,151162],{"class":106},"    name: ",[96,151164,151165],{"class":155},"str\n",[96,151167,151168,151171],{"class":98,"line":1203},[96,151169,151170],{"class":106},"    age: ",[96,151172,151173],{"class":155},"int\n",[96,151175,151176,151179],{"class":98,"line":1294},[96,151177,151178],{"class":106},"    score: ",[96,151180,151181],{"class":155},"float\n",[96,151183,151184],{"class":98,"line":1300},[96,151185,2383],{"emptyLinePlaceholder":23},[96,151187,151188],{"class":98,"line":1312},[96,151189,2383],{"emptyLinePlaceholder":23},[96,151191,151192,151194,151196,151198,151200,151202,151204,151206,151208],{"class":98,"line":1595},[96,151193,149460],{"class":106},[96,151195,152],{"class":102},[96,151197,149864],{"class":106},[96,151199,149867],{"class":211},[96,151201,12419],{"class":106},[96,151203,757],{"class":155},[96,151205,12419],{"class":106},[96,151207,1096],{"class":155},[96,151209,113],{"class":106},[96,151211,151212,151214],{"class":98,"line":1600},[96,151213,30394],{"class":155},[96,151215,150021],{"class":106},[14,151217,151218,151219,319,151221,151224],{},"它会自动生成 ",[93,151220,30808],{},[93,151222,151223],{},"__repr__"," 等方法。适合数据模型类。",[38,151226,151228],{"id":151227},"_1115-小案例学生类","11.15 小案例：学生类",[87,151230,151232],{"className":30357,"code":151231,"language":30359,"meta":18,"style":18},"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",[93,151233,151234,151242,151251,151263,151273,151283,151293,151297,151306,151319,151323,151332,151338,151350,151362,151374,151386,151390,151394,151400,151410,151419,151429,151437,151445,151454,151458,151462,151470,151506,151510,151514,151539,151546],{"__ignoreMap":18},[96,151235,151236,151238,151240],{"class":98,"line":99},[96,151237,14678],{"class":102},[96,151239,7882],{"class":1946},[96,151241,3722],{"class":106},[96,151243,151244,151246,151248],{"class":98,"line":19},[96,151245,30780],{"class":102},[96,151247,30783],{"class":155},[96,151249,151250],{"class":106},"(self, student_id, name, age, score):\n",[96,151252,151253,151255,151258,151260],{"class":98,"line":1162},[96,151254,30824],{"class":155},[96,151256,151257],{"class":106},".student_id ",[96,151259,152],{"class":102},[96,151261,151262],{"class":106}," student_id\n",[96,151264,151265,151267,151269,151271],{"class":98,"line":1177},[96,151266,30824],{"class":155},[96,151268,149769],{"class":106},[96,151270,152],{"class":102},[96,151272,149774],{"class":106},[96,151274,151275,151277,151279,151281],{"class":98,"line":1183},[96,151276,30824],{"class":155},[96,151278,149781],{"class":106},[96,151280,152],{"class":102},[96,151282,149786],{"class":106},[96,151284,151285,151287,151289,151291],{"class":98,"line":1197},[96,151286,30824],{"class":155},[96,151288,149793],{"class":106},[96,151290,152],{"class":102},[96,151292,1562],{"class":106},[96,151294,151295],{"class":98,"line":1203},[96,151296,2383],{"emptyLinePlaceholder":23},[96,151298,151299,151301,151304],{"class":98,"line":1294},[96,151300,30780],{"class":102},[96,151302,151303],{"class":1946}," is_passed",[96,151305,30786],{"class":106},[96,151307,151308,151310,151312,151314,151316],{"class":98,"line":1300},[96,151309,14736],{"class":102},[96,151311,38852],{"class":155},[96,151313,149793],{"class":106},[96,151315,1693],{"class":102},[96,151317,151318],{"class":155}," 60\n",[96,151320,151321],{"class":98,"line":1312},[96,151322,2383],{"emptyLinePlaceholder":23},[96,151324,151325,151327,151330],{"class":98,"line":1595},[96,151326,30780],{"class":102},[96,151328,151329],{"class":1946}," to_dict",[96,151331,30786],{"class":106},[96,151333,151334,151336],{"class":98,"line":1600},[96,151335,14736],{"class":102},[96,151337,15556],{"class":106},[96,151339,151340,151343,151345,151347],{"class":98,"line":1606},[96,151341,151342],{"class":211},"            \"student_id\"",[96,151344,51416],{"class":106},[96,151346,30802],{"class":155},[96,151348,151349],{"class":106},".student_id,\n",[96,151351,151352,151355,151357,151359],{"class":98,"line":1611},[96,151353,151354],{"class":211},"            \"name\"",[96,151356,51416],{"class":106},[96,151358,30802],{"class":155},[96,151360,151361],{"class":106},".name,\n",[96,151363,151364,151367,151369,151371],{"class":98,"line":1625},[96,151365,151366],{"class":211},"            \"age\"",[96,151368,51416],{"class":106},[96,151370,30802],{"class":155},[96,151372,151373],{"class":106},".age,\n",[96,151375,151376,151379,151381,151383],{"class":98,"line":1630},[96,151377,151378],{"class":211},"            \"score\"",[96,151380,51416],{"class":106},[96,151382,30802],{"class":155},[96,151384,151385],{"class":106},".score,\n",[96,151387,151388],{"class":98,"line":1636},[96,151389,2512],{"class":106},[96,151391,151392],{"class":98,"line":1657},[96,151393,2383],{"emptyLinePlaceholder":23},[96,151395,151396,151398],{"class":98,"line":1662},[96,151397,150993],{"class":1946},[96,151399,150996],{"class":155},[96,151401,151402,151404,151407],{"class":98,"line":1676},[96,151403,30780],{"class":102},[96,151405,151406],{"class":1946}," from_dict",[96,151408,151409],{"class":106},"(cls, data):\n",[96,151411,151412,151414,151416],{"class":98,"line":1681},[96,151413,14736],{"class":102},[96,151415,151013],{"class":155},[96,151417,151418],{"class":106},"(\n",[96,151420,151421,151424,151427],{"class":98,"line":1710},[96,151422,151423],{"class":106},"            data[",[96,151425,151426],{"class":211},"\"student_id\"",[96,151428,87815],{"class":106},[96,151430,151431,151433,151435],{"class":98,"line":1715},[96,151432,151423],{"class":106},[96,151434,62658],{"class":211},[96,151436,87815],{"class":106},[96,151438,151439,151441,151443],{"class":98,"line":1732},[96,151440,151423],{"class":106},[96,151442,69103],{"class":211},[96,151444,87815],{"class":106},[96,151446,151447,151449,151452],{"class":98,"line":1737},[96,151448,151423],{"class":106},[96,151450,151451],{"class":211},"\"score\"",[96,151453,87815],{"class":106},[96,151455,151456],{"class":98,"line":1742},[96,151457,38105],{"class":106},[96,151459,151460],{"class":98,"line":1747},[96,151461,2383],{"emptyLinePlaceholder":23},[96,151463,151464,151466,151468],{"class":98,"line":1761},[96,151465,30780],{"class":102},[96,151467,149960],{"class":155},[96,151469,30786],{"class":106},[96,151471,151472,151474,151476,151478,151480,151483,151485,151488,151490,151492,151494,151496,151498,151500,151502,151504],{"class":98,"line":1766},[96,151473,14736],{"class":102},[96,151475,149969],{"class":102},[96,151477,358],{"class":211},[96,151479,149431],{"class":155},[96,151481,151482],{"class":106},".student_id",[96,151484,1053],{"class":155},[96,151486,151487],{"class":155}," {self",[96,151489,80280],{"class":106},[96,151491,1053],{"class":155},[96,151493,151487],{"class":155},[96,151495,80292],{"class":106},[96,151497,1053],{"class":155},[96,151499,151487],{"class":155},[96,151501,149841],{"class":106},[96,151503,1053],{"class":155},[96,151505,25112],{"class":211},[96,151507,151508],{"class":98,"line":2560},[96,151509,2383],{"emptyLinePlaceholder":23},[96,151511,151512],{"class":98,"line":2574},[96,151513,2383],{"emptyLinePlaceholder":23},[96,151515,151516,151518,151520,151522,151525,151527,151529,151531,151533,151535,151537],{"class":98,"line":2582},[96,151517,149460],{"class":106},[96,151519,152],{"class":102},[96,151521,149864],{"class":106},[96,151523,151524],{"class":211},"\"001\"",[96,151526,12419],{"class":106},[96,151528,149867],{"class":211},[96,151530,12419],{"class":106},[96,151532,757],{"class":155},[96,151534,12419],{"class":106},[96,151536,1096],{"class":155},[96,151538,113],{"class":106},[96,151540,151541,151543],{"class":98,"line":2587},[96,151542,30394],{"class":155},[96,151544,151545],{"class":106},"(student.is_passed())\n",[96,151547,151548,151550],{"class":98,"line":2593},[96,151549,30394],{"class":155},[96,151551,151552],{"class":106},"(student.to_dict())\n",[14,151554,151555,100997,151558,151561],{},[93,151556,151557],{},"to_dict()",[93,151559,151560],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[38,151563,151565],{"id":151564},"_1116-易错点","11.16 易错点",[50,151567,151568,151574,151580,151585,151588,151591],{},[53,151569,151570,151571,28364],{},"类名推荐使用大驼峰，如 ",[93,151572,151573],{},"StudentManager",[53,151575,151576,151577,151579],{},"方法第一个参数必须写 ",[93,151578,30802],{},"，调用时不用传。",[53,151581,151582,151584],{},[93,151583,30808],{}," 不是普通方法，它在创建对象时自动执行。",[53,151586,151587],{},"私有属性不是绝对安全，只是约定和名称改写。",[53,151589,151590],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[53,151592,151593],{},"类中方法太多时，说明职责可能过重。",[38,151595,151597],{"id":151596},"_1117-本章练习","11.17 本章练习",[50,151599,151600,151606,151612,151617,151630],{},[53,151601,151602,151603,151605],{},"定义 ",[93,151604,149547],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[53,151607,151602,151608,151611],{},[93,151609,151610],{},"Account"," 类，实现存款、取款、查询余额。",[53,151613,151602,151614,151616],{},[93,151615,17210],{}," 类，计算圆的周长和面积。",[53,151618,151602,151619,319,151622,151625,151626,151629],{},[93,151620,151621],{},"Dog",[93,151623,151624],{},"Cat"," 类，并用同一个函数调用它们的 ",[93,151627,151628],{},"speak()"," 方法。",[53,151631,104345,151632,151634,151635,28364],{},[93,151633,151118],{}," 定义一个商品类 ",[93,151636,151637],{},"Product",[5110,151639,151640],{},"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":18,"searchDepth":19,"depth":19,"links":151642},[151643,151644,151645,151646,151647,151648,151650,151651,151652,151653,151654,151655,151656,151660,151661,151662,151663],{"id":149311,"depth":19,"text":149312},{"id":149494,"depth":19,"text":149495},{"id":149558,"depth":19,"text":149559},{"id":149635,"depth":19,"text":149636},{"id":149734,"depth":19,"text":149735},{"id":149898,"depth":19,"text":151649},"11.6 str",{"id":150024,"depth":19,"text":150025},{"id":150290,"depth":19,"text":150291},{"id":150404,"depth":19,"text":150405},{"id":150559,"depth":19,"text":150560},{"id":150683,"depth":19,"text":150684},{"id":150799,"depth":19,"text":150800},{"id":150948,"depth":19,"text":150949,"children":151657},[151658,151659],{"id":150952,"depth":1162,"text":150953},{"id":151034,"depth":1162,"text":151035},{"id":151112,"depth":19,"text":151113},{"id":151227,"depth":19,"text":151228},{"id":151564,"depth":19,"text":151565},{"id":151596,"depth":19,"text":151597},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149303,"description":23361},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151670,"title":151671,"body":151672,"description":23361,"extension":21,"meta":154985,"navigation":23,"path":154986,"seo":154987,"stem":154988,"__hash__":154989},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151673,"toc":154961},[151674,151677,151681,151684,151687,151716,151719,151727,151731,151735,151738,151761,151764,151770,151774,153220,153223,153244,153248,153251,153263,153266,153450,153453,153579,153582,153586,153590,153726,153730,153816,153820,153902,153906,153943,153947,154136,154140,154143,154373,154377,154380,154561,154564,154568,154571,154577,154580,154606,154610,154613,154627,154630,154655,154658,154672,154675,154692,154695,154712,154715,154732,154736,154762,154766,154789,154793,154796,154798,154804,154806,154827,154830,154836,154842,154846,154849,154925,154928,154932,154958],[10,151675,151671],{"id":151676},"_12-综合案例与复习路线",[38,151678,151680],{"id":151679},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[14,151682,151683],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[14,151685,151686],{},"一个合格的入门综合项目最好覆盖：",[50,151688,151689,151692,151695,151698,151701,151704,151707,151710,151713],{},[53,151690,151691],{},"输入输出。",[53,151693,151694],{},"判断和循环。",[53,151696,151697],{},"函数拆分。",[53,151699,151700],{},"列表、字典等容器。",[53,151702,151703],{},"文件持久化。",[53,151705,151706],{},"异常处理。",[53,151708,151709],{},"模块拆分。",[53,151711,151712],{},"可选：面向对象。",[53,151714,151715],{},"可选：数据可视化。",[14,151717,151718],{},"本章整理两个方向：",[50,151720,151721,151724],{},[53,151722,151723],{},"学生管理系统。",[53,151725,151726],{},"销售数据统计和可视化。",[38,151728,151730],{"id":151729},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[67,151732,151734],{"id":151733},"_1221-需求","12.2.1 需求",[14,151736,151737],{},"实现一个命令行学生管理系统：",[50,151739,151740,151743,151746,151749,151752,151755,151758],{},[53,151741,151742],{},"添加学生。",[53,151744,151745],{},"删除学生。",[53,151747,151748],{},"修改学生。",[53,151750,151751],{},"查询学生。",[53,151753,151754],{},"显示所有学生。",[53,151756,151757],{},"保存到 JSON 文件。",[53,151759,151760],{},"程序启动时自动读取 JSON 文件。",[14,151762,151763],{},"学生字段：",[87,151765,151768],{"className":151766,"code":151767,"language":5171,"meta":18},[5169],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[93,151769,151767],{"__ignoreMap":18},[38,151771,151773],{"id":151772},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[87,151775,151777],{"className":30357,"code":151776,"language":30359,"meta":18,"style":18},"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",[93,151778,151779,151785,151795,151799,151813,151817,151821,151830,151842,151848,151852,151858,151889,151899,151906,151917,151923,151927,151931,151941,151972,151998,152002,152006,152015,152026,152037,152048,152059,152070,152081,152092,152096,152100,152110,152122,152138,152145,152152,152156,152160,152170,152178,152185,152198,152208,152219,152223,152227,152236,152244,152250,152262,152270,152281,152285,152289,152298,152314,152318,152325,152336,152341,152345,152361,152376,152391,152395,152400,152408,152416,152424,152432,152436,152441,152452,152456,152460,152469,152484,152494,152498,152510,152521,152525,152529,152534,152538,152549,152553,152557,152566,152581,152589,152593,152605,152615,152619,152623,152638,152651,152664,152668,152681,152693,152705,152709,152713,152724,152728,152732,152741,152756,152764,152768,152780,152790,152794,152798,152803,152807,152811,152821,152827,152849,152868,152887,152906,152911,152915,152919,152928,152936,152947,152951,152955,152981,152991,152996,153000,153004,153012,153022,153026,153034,153039,153055,153059,153073,153078,153092,153097,153110,153115,153128,153133,153146,153151,153164,153175,153179,153185,153196,153200,153204,153216],{"__ignoreMap":18},[96,151780,151781,151783],{"class":98,"line":99},[96,151782,30371],{"class":102},[96,151784,147070],{"class":106},[96,151786,151787,151789,151791,151793],{"class":98,"line":19},[96,151788,30716],{"class":102},[96,151790,108290],{"class":106},[96,151792,30371],{"class":102},[96,151794,108295],{"class":106},[96,151796,151797],{"class":98,"line":1162},[96,151798,2383],{"emptyLinePlaceholder":23},[96,151800,151801,151804,151806,151808,151811],{"class":98,"line":1177},[96,151802,151803],{"class":155},"DATA_FILE",[96,151805,13548],{"class":102},[96,151807,108524],{"class":106},[96,151809,151810],{"class":211},"\"students.json\"",[96,151812,113],{"class":106},[96,151814,151815],{"class":98,"line":1183},[96,151816,2383],{"emptyLinePlaceholder":23},[96,151818,151819],{"class":98,"line":1197},[96,151820,2383],{"emptyLinePlaceholder":23},[96,151822,151823,151825,151828],{"class":98,"line":1203},[96,151824,31926],{"class":102},[96,151826,151827],{"class":1946}," load_students",[96,151829,31932],{"class":106},[96,151831,151832,151834,151836,151839],{"class":98,"line":1294},[96,151833,3084],{"class":102},[96,151835,38909],{"class":102},[96,151837,151838],{"class":155}," DATA_FILE",[96,151840,151841],{"class":106},".exists():\n",[96,151843,151844,151846],{"class":98,"line":1300},[96,151845,14736],{"class":102},[96,151847,51817],{"class":106},[96,151849,151850],{"class":98,"line":1312},[96,151851,2383],{"emptyLinePlaceholder":23},[96,151853,151854,151856],{"class":98,"line":1595},[96,151855,125763],{"class":102},[96,151857,3722],{"class":106},[96,151859,151860,151863,151865,151867,151869,151871,151873,151875,151877,151879,151881,151883,151885,151887],{"class":98,"line":1600},[96,151861,151862],{"class":102},"        with",[96,151864,146770],{"class":155},[96,151866,107],{"class":106},[96,151868,151803],{"class":155},[96,151870,12419],{"class":106},[96,151872,146780],{"class":211},[96,151874,12419],{"class":106},[96,151876,146785],{"class":5200},[96,151878,152],{"class":102},[96,151880,146790],{"class":211},[96,151882,13698],{"class":106},[96,151884,31362],{"class":102},[96,151886,148132],{"class":5200},[96,151888,3722],{"class":106},[96,151890,151891,151893,151895,151897],{"class":98,"line":1606},[96,151892,15716],{"class":102},[96,151894,148143],{"class":106},[96,151896,45333],{"class":5200},[96,151898,113],{"class":106},[96,151900,151901,151903],{"class":98,"line":1611},[96,151902,125791],{"class":102},[96,151904,151905],{"class":106}," json.JSONDecodeError:\n",[96,151907,151908,151910,151912,151915],{"class":98,"line":1625},[96,151909,32430],{"class":155},[96,151911,107],{"class":106},[96,151913,151914],{"class":211},"\"数据文件格式错误，已使用空数据启动\"",[96,151916,113],{"class":106},[96,151918,151919,151921],{"class":98,"line":1630},[96,151920,14736],{"class":102},[96,151922,51817],{"class":106},[96,151924,151925],{"class":98,"line":1636},[96,151926,2383],{"emptyLinePlaceholder":23},[96,151928,151929],{"class":98,"line":1657},[96,151930,2383],{"emptyLinePlaceholder":23},[96,151932,151933,151935,151938],{"class":98,"line":1662},[96,151934,31926],{"class":102},[96,151936,151937],{"class":1946}," save_students",[96,151939,151940],{"class":106},"(students):\n",[96,151942,151943,151945,151947,151949,151951,151953,151956,151958,151960,151962,151964,151966,151968,151970],{"class":98,"line":1676},[96,151944,34157],{"class":102},[96,151946,146770],{"class":155},[96,151948,107],{"class":106},[96,151950,151803],{"class":155},[96,151952,12419],{"class":106},[96,151954,151955],{"class":211},"\"w\"",[96,151957,12419],{"class":106},[96,151959,146785],{"class":5200},[96,151961,152],{"class":102},[96,151963,146790],{"class":211},[96,151965,13698],{"class":106},[96,151967,31362],{"class":102},[96,151969,148132],{"class":5200},[96,151971,3722],{"class":106},[96,151973,151974,151977,151979,151981,151983,151985,151987,151989,151992,151994,151996],{"class":98,"line":1681},[96,151975,151976],{"class":106},"        json.dump(students, ",[96,151978,45333],{"class":5200},[96,151980,12419],{"class":106},[96,151982,147116],{"class":5200},[96,151984,152],{"class":102},[96,151986,33966],{"class":155},[96,151988,12419],{"class":106},[96,151990,151991],{"class":5200},"indent",[96,151993,152],{"class":102},[96,151995,184],{"class":155},[96,151997,113],{"class":106},[96,151999,152000],{"class":98,"line":1710},[96,152001,2383],{"emptyLinePlaceholder":23},[96,152003,152004],{"class":98,"line":1715},[96,152005,2383],{"emptyLinePlaceholder":23},[96,152007,152008,152010,152013],{"class":98,"line":1732},[96,152009,31926],{"class":102},[96,152011,152012],{"class":1946}," show_menu",[96,152014,31932],{"class":106},[96,152016,152017,152019,152021,152024],{"class":98,"line":1737},[96,152018,31278],{"class":155},[96,152020,107],{"class":106},[96,152022,152023],{"class":211},"\"====== 学生管理系统 ======\"",[96,152025,113],{"class":106},[96,152027,152028,152030,152032,152035],{"class":98,"line":1742},[96,152029,31278],{"class":155},[96,152031,107],{"class":106},[96,152033,152034],{"class":211},"\"1. 添加学生\"",[96,152036,113],{"class":106},[96,152038,152039,152041,152043,152046],{"class":98,"line":1747},[96,152040,31278],{"class":155},[96,152042,107],{"class":106},[96,152044,152045],{"class":211},"\"2. 删除学生\"",[96,152047,113],{"class":106},[96,152049,152050,152052,152054,152057],{"class":98,"line":1761},[96,152051,31278],{"class":155},[96,152053,107],{"class":106},[96,152055,152056],{"class":211},"\"3. 修改学生\"",[96,152058,113],{"class":106},[96,152060,152061,152063,152065,152068],{"class":98,"line":1766},[96,152062,31278],{"class":155},[96,152064,107],{"class":106},[96,152066,152067],{"class":211},"\"4. 查询学生\"",[96,152069,113],{"class":106},[96,152071,152072,152074,152076,152079],{"class":98,"line":2560},[96,152073,31278],{"class":155},[96,152075,107],{"class":106},[96,152077,152078],{"class":211},"\"5. 显示所有学生\"",[96,152080,113],{"class":106},[96,152082,152083,152085,152087,152090],{"class":98,"line":2574},[96,152084,31278],{"class":155},[96,152086,107],{"class":106},[96,152088,152089],{"class":211},"\"0. 退出系统\"",[96,152091,113],{"class":106},[96,152093,152094],{"class":98,"line":2582},[96,152095,2383],{"emptyLinePlaceholder":23},[96,152097,152098],{"class":98,"line":2587},[96,152099,2383],{"emptyLinePlaceholder":23},[96,152101,152102,152104,152107],{"class":98,"line":2593},[96,152103,31926],{"class":102},[96,152105,152106],{"class":1946}," find_student",[96,152108,152109],{"class":106},"(students, student_id):\n",[96,152111,152112,152114,152117,152119],{"class":98,"line":2599},[96,152113,3184],{"class":102},[96,152115,152116],{"class":106}," student ",[96,152118,26022],{"class":102},[96,152120,152121],{"class":106}," students:\n",[96,152123,152124,152126,152129,152131,152133,152135],{"class":98,"line":2604},[96,152125,2480],{"class":102},[96,152127,152128],{"class":106}," student[",[96,152130,151426],{"class":211},[96,152132,4426],{"class":106},[96,152134,2932],{"class":102},[96,152136,152137],{"class":106}," student_id:\n",[96,152139,152140,152142],{"class":98,"line":7932},[96,152141,15716],{"class":102},[96,152143,152144],{"class":106}," student\n",[96,152146,152147,152149],{"class":98,"line":7956},[96,152148,4073],{"class":102},[96,152150,152151],{"class":155}," None\n",[96,152153,152154],{"class":98,"line":7961},[96,152155,2383],{"emptyLinePlaceholder":23},[96,152157,152158],{"class":98,"line":7967},[96,152159,2383],{"emptyLinePlaceholder":23},[96,152161,152162,152164,152167],{"class":98,"line":7994},[96,152163,31926],{"class":102},[96,152165,152166],{"class":1946}," input_int",[96,152168,152169],{"class":106},"(prompt):\n",[96,152171,152172,152174,152176],{"class":98,"line":7999},[96,152173,2234],{"class":102},[96,152175,95271],{"class":155},[96,152177,3722],{"class":106},[96,152179,152180,152183],{"class":98,"line":8005},[96,152181,152182],{"class":102},"        try",[96,152184,3722],{"class":106},[96,152186,152187,152189,152191,152193,152195],{"class":98,"line":8017},[96,152188,15716],{"class":102},[96,152190,2365],{"class":155},[96,152192,107],{"class":106},[96,152194,53800],{"class":155},[96,152196,152197],{"class":106},"(prompt))\n",[96,152199,152200,152203,152206],{"class":98,"line":8029},[96,152201,152202],{"class":102},"        except",[96,152204,152205],{"class":155}," ValueError",[96,152207,3722],{"class":106},[96,152209,152210,152212,152214,152217],{"class":98,"line":8041},[96,152211,34629],{"class":155},[96,152213,107],{"class":106},[96,152215,152216],{"class":211},"\"请输入整数\"",[96,152218,113],{"class":106},[96,152220,152221],{"class":98,"line":9700},[96,152222,2383],{"emptyLinePlaceholder":23},[96,152224,152225],{"class":98,"line":9725},[96,152226,2383],{"emptyLinePlaceholder":23},[96,152228,152229,152231,152234],{"class":98,"line":9748},[96,152230,31926],{"class":102},[96,152232,152233],{"class":1946}," input_float",[96,152235,152169],{"class":106},[96,152237,152238,152240,152242],{"class":98,"line":9772},[96,152239,2234],{"class":102},[96,152241,95271],{"class":155},[96,152243,3722],{"class":106},[96,152245,152246,152248],{"class":98,"line":9777},[96,152247,152182],{"class":102},[96,152249,3722],{"class":106},[96,152251,152252,152254,152256,152258,152260],{"class":98,"line":9782},[96,152253,15716],{"class":102},[96,152255,109776],{"class":155},[96,152257,107],{"class":106},[96,152259,53800],{"class":155},[96,152261,152197],{"class":106},[96,152263,152264,152266,152268],{"class":98,"line":9787},[96,152265,152202],{"class":102},[96,152267,152205],{"class":155},[96,152269,3722],{"class":106},[96,152271,152272,152274,152276,152279],{"class":98,"line":9796},[96,152273,34629],{"class":155},[96,152275,107],{"class":106},[96,152277,152278],{"class":211},"\"请输入数字\"",[96,152280,113],{"class":106},[96,152282,152283],{"class":98,"line":9801},[96,152284,2383],{"emptyLinePlaceholder":23},[96,152286,152287],{"class":98,"line":9807},[96,152288,2383],{"emptyLinePlaceholder":23},[96,152290,152291,152293,152296],{"class":98,"line":9828},[96,152292,31926],{"class":102},[96,152294,152295],{"class":1946}," add_student",[96,152297,151940],{"class":106},[96,152299,152300,152303,152305,152307,152309,152312],{"class":98,"line":9834},[96,152301,152302],{"class":106},"    student_id ",[96,152304,152],{"class":102},[96,152306,60584],{"class":155},[96,152308,107],{"class":106},[96,152310,152311],{"class":211},"\"请输入学号:\"",[96,152313,113],{"class":106},[96,152315,152316],{"class":98,"line":9848},[96,152317,2383],{"emptyLinePlaceholder":23},[96,152319,152320,152322],{"class":98,"line":9854},[96,152321,3084],{"class":102},[96,152323,152324],{"class":106}," find_student(students, student_id):\n",[96,152326,152327,152329,152331,152334],{"class":98,"line":9881},[96,152328,32430],{"class":155},[96,152330,107],{"class":106},[96,152332,152333],{"class":211},"\"学号已存在\"",[96,152335,113],{"class":106},[96,152337,152338],{"class":98,"line":9890},[96,152339,152340],{"class":102},"        return\n",[96,152342,152343],{"class":98,"line":9896},[96,152344,2383],{"emptyLinePlaceholder":23},[96,152346,152347,152350,152352,152354,152356,152359],{"class":98,"line":9904},[96,152348,152349],{"class":106},"    name ",[96,152351,152],{"class":102},[96,152353,60584],{"class":155},[96,152355,107],{"class":106},[96,152357,152358],{"class":211},"\"请输入姓名:\"",[96,152360,113],{"class":106},[96,152362,152363,152366,152368,152371,152374],{"class":98,"line":9909},[96,152364,152365],{"class":106},"    age ",[96,152367,152],{"class":102},[96,152369,152370],{"class":106}," input_int(",[96,152372,152373],{"class":211},"\"请输入年龄:\"",[96,152375,113],{"class":106},[96,152377,152378,152381,152383,152386,152389],{"class":98,"line":16588},[96,152379,152380],{"class":106},"    score ",[96,152382,152],{"class":102},[96,152384,152385],{"class":106}," input_float(",[96,152387,152388],{"class":211},"\"请输入成绩:\"",[96,152390,113],{"class":106},[96,152392,152393],{"class":98,"line":16594},[96,152394,2383],{"emptyLinePlaceholder":23},[96,152396,152397],{"class":98,"line":16617},[96,152398,152399],{"class":106},"    students.append({\n",[96,152401,152402,152405],{"class":98,"line":16623},[96,152403,152404],{"class":211},"        \"student_id\"",[96,152406,152407],{"class":106},": student_id,\n",[96,152409,152410,152413],{"class":98,"line":16646},[96,152411,152412],{"class":211},"        \"name\"",[96,152414,152415],{"class":106},": name,\n",[96,152417,152418,152421],{"class":98,"line":16660},[96,152419,152420],{"class":211},"        \"age\"",[96,152422,152423],{"class":106},": age,\n",[96,152425,152426,152429],{"class":98,"line":16680},[96,152427,152428],{"class":211},"        \"score\"",[96,152430,152431],{"class":106},": score,\n",[96,152433,152434],{"class":98,"line":16686},[96,152435,33440],{"class":106},[96,152437,152438],{"class":98,"line":16697},[96,152439,152440],{"class":106},"    save_students(students)\n",[96,152442,152443,152445,152447,152450],{"class":98,"line":16720},[96,152444,31278],{"class":155},[96,152446,107],{"class":106},[96,152448,152449],{"class":211},"\"添加成功\"",[96,152451,113],{"class":106},[96,152453,152454],{"class":98,"line":16742},[96,152455,2383],{"emptyLinePlaceholder":23},[96,152457,152458],{"class":98,"line":16747},[96,152459,2383],{"emptyLinePlaceholder":23},[96,152461,152462,152464,152467],{"class":98,"line":16753},[96,152463,31926],{"class":102},[96,152465,152466],{"class":1946}," delete_student",[96,152468,151940],{"class":106},[96,152470,152471,152473,152475,152477,152479,152482],{"class":98,"line":16767},[96,152472,152302],{"class":106},[96,152474,152],{"class":102},[96,152476,60584],{"class":155},[96,152478,107],{"class":106},[96,152480,152481],{"class":211},"\"请输入要删除的学号:\"",[96,152483,113],{"class":106},[96,152485,152486,152489,152491],{"class":98,"line":16780},[96,152487,152488],{"class":106},"    student ",[96,152490,152],{"class":102},[96,152492,152493],{"class":106}," find_student(students, student_id)\n",[96,152495,152496],{"class":98,"line":16785},[96,152497,2383],{"emptyLinePlaceholder":23},[96,152499,152500,152502,152504,152506,152508],{"class":98,"line":16799},[96,152501,3084],{"class":102},[96,152503,152116],{"class":106},[96,152505,38906],{"class":102},[96,152507,38912],{"class":155},[96,152509,3722],{"class":106},[96,152511,152512,152514,152516,152519],{"class":98,"line":16804},[96,152513,32430],{"class":155},[96,152515,107],{"class":106},[96,152517,152518],{"class":211},"\"学生不存在\"",[96,152520,113],{"class":106},[96,152522,152523],{"class":98,"line":16810},[96,152524,152340],{"class":102},[96,152526,152527],{"class":98,"line":16815},[96,152528,2383],{"emptyLinePlaceholder":23},[96,152530,152531],{"class":98,"line":16829},[96,152532,152533],{"class":106},"    students.remove(student)\n",[96,152535,152536],{"class":98,"line":16834},[96,152537,152440],{"class":106},[96,152539,152540,152542,152544,152547],{"class":98,"line":16839},[96,152541,31278],{"class":155},[96,152543,107],{"class":106},[96,152545,152546],{"class":211},"\"删除成功\"",[96,152548,113],{"class":106},[96,152550,152551],{"class":98,"line":16853},[96,152552,2383],{"emptyLinePlaceholder":23},[96,152554,152555],{"class":98,"line":16865},[96,152556,2383],{"emptyLinePlaceholder":23},[96,152558,152559,152561,152564],{"class":98,"line":16870},[96,152560,31926],{"class":102},[96,152562,152563],{"class":1946}," update_student",[96,152565,151940],{"class":106},[96,152567,152568,152570,152572,152574,152576,152579],{"class":98,"line":16883},[96,152569,152302],{"class":106},[96,152571,152],{"class":102},[96,152573,60584],{"class":155},[96,152575,107],{"class":106},[96,152577,152578],{"class":211},"\"请输入要修改的学号:\"",[96,152580,113],{"class":106},[96,152582,152583,152585,152587],{"class":98,"line":16888},[96,152584,152488],{"class":106},[96,152586,152],{"class":102},[96,152588,152493],{"class":106},[96,152590,152591],{"class":98,"line":16893},[96,152592,2383],{"emptyLinePlaceholder":23},[96,152594,152595,152597,152599,152601,152603],{"class":98,"line":16898},[96,152596,3084],{"class":102},[96,152598,152116],{"class":106},[96,152600,38906],{"class":102},[96,152602,38912],{"class":155},[96,152604,3722],{"class":106},[96,152606,152607,152609,152611,152613],{"class":98,"line":16911},[96,152608,32430],{"class":155},[96,152610,107],{"class":106},[96,152612,152518],{"class":211},[96,152614,113],{"class":106},[96,152616,152617],{"class":98,"line":16916},[96,152618,152340],{"class":102},[96,152620,152621],{"class":98,"line":32612},[96,152622,2383],{"emptyLinePlaceholder":23},[96,152624,152625,152627,152629,152631,152633,152636],{"class":98,"line":32618},[96,152626,152349],{"class":106},[96,152628,152],{"class":102},[96,152630,60584],{"class":155},[96,152632,107],{"class":106},[96,152634,152635],{"class":211},"\"请输入新姓名:\"",[96,152637,113],{"class":106},[96,152639,152640,152642,152644,152646,152649],{"class":98,"line":32624},[96,152641,152365],{"class":106},[96,152643,152],{"class":102},[96,152645,152370],{"class":106},[96,152647,152648],{"class":211},"\"请输入新年龄:\"",[96,152650,113],{"class":106},[96,152652,152653,152655,152657,152659,152662],{"class":98,"line":32630},[96,152654,152380],{"class":106},[96,152656,152],{"class":102},[96,152658,152385],{"class":106},[96,152660,152661],{"class":211},"\"请输入新成绩:\"",[96,152663,113],{"class":106},[96,152665,152666],{"class":98,"line":32636},[96,152667,2383],{"emptyLinePlaceholder":23},[96,152669,152670,152673,152675,152677,152679],{"class":98,"line":32647},[96,152671,152672],{"class":106},"    student[",[96,152674,62658],{"class":211},[96,152676,4426],{"class":106},[96,152678,152],{"class":102},[96,152680,149774],{"class":106},[96,152682,152683,152685,152687,152689,152691],{"class":98,"line":32653},[96,152684,152672],{"class":106},[96,152686,69103],{"class":211},[96,152688,4426],{"class":106},[96,152690,152],{"class":102},[96,152692,149786],{"class":106},[96,152694,152695,152697,152699,152701,152703],{"class":98,"line":32673},[96,152696,152672],{"class":106},[96,152698,151451],{"class":211},[96,152700,4426],{"class":106},[96,152702,152],{"class":102},[96,152704,1562],{"class":106},[96,152706,152707],{"class":98,"line":32679},[96,152708,2383],{"emptyLinePlaceholder":23},[96,152710,152711],{"class":98,"line":32690},[96,152712,152440],{"class":106},[96,152714,152715,152717,152719,152722],{"class":98,"line":32696},[96,152716,31278],{"class":155},[96,152718,107],{"class":106},[96,152720,152721],{"class":211},"\"修改成功\"",[96,152723,113],{"class":106},[96,152725,152726],{"class":98,"line":32702},[96,152727,2383],{"emptyLinePlaceholder":23},[96,152729,152730],{"class":98,"line":32708},[96,152731,2383],{"emptyLinePlaceholder":23},[96,152733,152734,152736,152739],{"class":98,"line":32714},[96,152735,31926],{"class":102},[96,152737,152738],{"class":1946}," query_student",[96,152740,151940],{"class":106},[96,152742,152743,152745,152747,152749,152751,152754],{"class":98,"line":32720},[96,152744,152302],{"class":106},[96,152746,152],{"class":102},[96,152748,60584],{"class":155},[96,152750,107],{"class":106},[96,152752,152753],{"class":211},"\"请输入要查询的学号:\"",[96,152755,113],{"class":106},[96,152757,152758,152760,152762],{"class":98,"line":32726},[96,152759,152488],{"class":106},[96,152761,152],{"class":102},[96,152763,152493],{"class":106},[96,152765,152766],{"class":98,"line":32732},[96,152767,2383],{"emptyLinePlaceholder":23},[96,152769,152770,152772,152774,152776,152778],{"class":98,"line":32752},[96,152771,3084],{"class":102},[96,152773,152116],{"class":106},[96,152775,38906],{"class":102},[96,152777,38912],{"class":155},[96,152779,3722],{"class":106},[96,152781,152782,152784,152786,152788],{"class":98,"line":32758},[96,152783,32430],{"class":155},[96,152785,107],{"class":106},[96,152787,152518],{"class":211},[96,152789,113],{"class":106},[96,152791,152792],{"class":98,"line":32774},[96,152793,152340],{"class":102},[96,152795,152796],{"class":98,"line":32780},[96,152797,2383],{"emptyLinePlaceholder":23},[96,152799,152800],{"class":98,"line":32794},[96,152801,152802],{"class":106},"    print_student(student)\n",[96,152804,152805],{"class":98,"line":32800},[96,152806,2383],{"emptyLinePlaceholder":23},[96,152808,152809],{"class":98,"line":32815},[96,152810,2383],{"emptyLinePlaceholder":23},[96,152812,152813,152815,152818],{"class":98,"line":32821},[96,152814,31926],{"class":102},[96,152816,152817],{"class":1946}," print_student",[96,152819,152820],{"class":106},"(student):\n",[96,152822,152823,152825],{"class":98,"line":32830},[96,152824,31278],{"class":155},[96,152826,151418],{"class":106},[96,152828,152829,152832,152834,152836,152839,152842,152844,152847],{"class":98,"line":32836},[96,152830,152831],{"class":102},"        f",[96,152833,358],{"class":211},[96,152835,1003],{"class":155},[96,152837,152838],{"class":106},"student[",[96,152840,152841],{"class":211},"'student_id'",[96,152843,1047],{"class":106},[96,152845,152846],{"class":155},"}\\t",[96,152848,25112],{"class":211},[96,152850,152851,152853,152855,152857,152859,152862,152864,152866],{"class":98,"line":32845},[96,152852,152831],{"class":102},[96,152854,358],{"class":211},[96,152856,1003],{"class":155},[96,152858,152838],{"class":106},[96,152860,152861],{"class":211},"'name'",[96,152863,1047],{"class":106},[96,152865,152846],{"class":155},[96,152867,25112],{"class":211},[96,152869,152870,152872,152874,152876,152878,152881,152883,152885],{"class":98,"line":32851},[96,152871,152831],{"class":102},[96,152873,358],{"class":211},[96,152875,1003],{"class":155},[96,152877,152838],{"class":106},[96,152879,152880],{"class":211},"'age'",[96,152882,1047],{"class":106},[96,152884,152846],{"class":155},[96,152886,25112],{"class":211},[96,152888,152889,152891,152893,152895,152897,152900,152902,152904],{"class":98,"line":32857},[96,152890,152831],{"class":102},[96,152892,358],{"class":211},[96,152894,1003],{"class":155},[96,152896,152838],{"class":106},[96,152898,152899],{"class":211},"'score'",[96,152901,1047],{"class":106},[96,152903,1053],{"class":155},[96,152905,25112],{"class":211},[96,152907,152908],{"class":98,"line":32866},[96,152909,152910],{"class":106},"    )\n",[96,152912,152913],{"class":98,"line":32872},[96,152914,2383],{"emptyLinePlaceholder":23},[96,152916,152917],{"class":98,"line":32883},[96,152918,2383],{"emptyLinePlaceholder":23},[96,152920,152921,152923,152926],{"class":98,"line":32889},[96,152922,31926],{"class":102},[96,152924,152925],{"class":1946}," show_all_students",[96,152927,151940],{"class":106},[96,152929,152930,152932,152934],{"class":98,"line":32908},[96,152931,3084],{"class":102},[96,152933,38909],{"class":102},[96,152935,152121],{"class":106},[96,152937,152938,152940,152942,152945],{"class":98,"line":32914},[96,152939,32430],{"class":155},[96,152941,107],{"class":106},[96,152943,152944],{"class":211},"\"暂无学生\"",[96,152946,113],{"class":106},[96,152948,152949],{"class":98,"line":32925},[96,152950,152340],{"class":102},[96,152952,152953],{"class":98,"line":32931},[96,152954,2383],{"emptyLinePlaceholder":23},[96,152956,152957,152959,152961,152964,152966,152969,152971,152974,152976,152979],{"class":98,"line":32951},[96,152958,31278],{"class":155},[96,152960,107],{"class":106},[96,152962,152963],{"class":211},"\"学号",[96,152965,1213],{"class":155},[96,152967,152968],{"class":211},"姓名",[96,152970,1213],{"class":155},[96,152972,152973],{"class":211},"年龄",[96,152975,1213],{"class":155},[96,152977,152978],{"class":211},"成绩\"",[96,152980,113],{"class":106},[96,152982,152983,152985,152987,152989],{"class":98,"line":32967},[96,152984,3184],{"class":102},[96,152986,152116],{"class":106},[96,152988,26022],{"class":102},[96,152990,152121],{"class":106},[96,152992,152993],{"class":98,"line":32973},[96,152994,152995],{"class":106},"        print_student(student)\n",[96,152997,152998],{"class":98,"line":32987},[96,152999,2383],{"emptyLinePlaceholder":23},[96,153001,153002],{"class":98,"line":32993},[96,153003,2383],{"emptyLinePlaceholder":23},[96,153005,153006,153008,153010],{"class":98,"line":32999},[96,153007,31926],{"class":102},[96,153009,1956],{"class":1946},[96,153011,31932],{"class":106},[96,153013,153014,153017,153019],{"class":98,"line":33010},[96,153015,153016],{"class":106},"    students ",[96,153018,152],{"class":102},[96,153020,153021],{"class":106}," load_students()\n",[96,153023,153024],{"class":98,"line":33016},[96,153025,2383],{"emptyLinePlaceholder":23},[96,153027,153028,153030,153032],{"class":98,"line":33022},[96,153029,2234],{"class":102},[96,153031,95271],{"class":155},[96,153033,3722],{"class":106},[96,153035,153036],{"class":98,"line":33032},[96,153037,153038],{"class":106},"        show_menu()\n",[96,153040,153041,153044,153046,153048,153050,153053],{"class":98,"line":33038},[96,153042,153043],{"class":106},"        choice ",[96,153045,152],{"class":102},[96,153047,60584],{"class":155},[96,153049,107],{"class":106},[96,153051,153052],{"class":211},"\"请输入操作:\"",[96,153054,113],{"class":106},[96,153056,153057],{"class":98,"line":33049},[96,153058,2383],{"emptyLinePlaceholder":23},[96,153060,153061,153063,153066,153068,153071],{"class":98,"line":33055},[96,153062,2480],{"class":102},[96,153064,153065],{"class":106}," choice ",[96,153067,2932],{"class":102},[96,153069,153070],{"class":211}," \"1\"",[96,153072,3722],{"class":106},[96,153074,153075],{"class":98,"line":33065},[96,153076,153077],{"class":106},"            add_student(students)\n",[96,153079,153080,153083,153085,153087,153090],{"class":98,"line":33070},[96,153081,153082],{"class":102},"        elif",[96,153084,153065],{"class":106},[96,153086,2932],{"class":102},[96,153088,153089],{"class":211}," \"2\"",[96,153091,3722],{"class":106},[96,153093,153094],{"class":98,"line":33076},[96,153095,153096],{"class":106},"            delete_student(students)\n",[96,153098,153099,153101,153103,153105,153108],{"class":98,"line":33125},[96,153100,153082],{"class":102},[96,153102,153065],{"class":106},[96,153104,2932],{"class":102},[96,153106,153107],{"class":211}," \"3\"",[96,153109,3722],{"class":106},[96,153111,153112],{"class":98,"line":33172},[96,153113,153114],{"class":106},"            update_student(students)\n",[96,153116,153117,153119,153121,153123,153126],{"class":98,"line":33177},[96,153118,153082],{"class":102},[96,153120,153065],{"class":106},[96,153122,2932],{"class":102},[96,153124,153125],{"class":211}," \"4\"",[96,153127,3722],{"class":106},[96,153129,153130],{"class":98,"line":33183},[96,153131,153132],{"class":106},"            query_student(students)\n",[96,153134,153135,153137,153139,153141,153144],{"class":98,"line":33202},[96,153136,153082],{"class":102},[96,153138,153065],{"class":106},[96,153140,2932],{"class":102},[96,153142,153143],{"class":211}," \"5\"",[96,153145,3722],{"class":106},[96,153147,153148],{"class":98,"line":33208},[96,153149,153150],{"class":106},"            show_all_students(students)\n",[96,153152,153153,153155,153157,153159,153162],{"class":98,"line":33228},[96,153154,153082],{"class":102},[96,153156,153065],{"class":106},[96,153158,2932],{"class":102},[96,153160,153161],{"class":211}," \"0\"",[96,153163,3722],{"class":106},[96,153165,153166,153168,153170,153173],{"class":98,"line":33234},[96,153167,34629],{"class":155},[96,153169,107],{"class":106},[96,153171,153172],{"class":211},"\"退出系统\"",[96,153174,113],{"class":106},[96,153176,153177],{"class":98,"line":33240},[96,153178,115077],{"class":102},[96,153180,153181,153183],{"class":98,"line":33250},[96,153182,2517],{"class":102},[96,153184,3722],{"class":106},[96,153186,153187,153189,153191,153194],{"class":98,"line":33255},[96,153188,34629],{"class":155},[96,153190,107],{"class":106},[96,153192,153193],{"class":211},"\"输入错误\"",[96,153195,113],{"class":106},[96,153197,153198],{"class":98,"line":33261},[96,153199,2383],{"emptyLinePlaceholder":23},[96,153201,153202],{"class":98,"line":33277},[96,153203,2383],{"emptyLinePlaceholder":23},[96,153205,153206,153208,153210,153212,153214],{"class":98,"line":33322},[96,153207,1514],{"class":102},[96,153209,31199],{"class":155},[96,153211,101538],{"class":102},[96,153213,101541],{"class":211},[96,153215,3722],{"class":106},[96,153217,153218],{"class":98,"line":33328},[96,153219,101548],{"class":106},[14,153221,153222],{},"这个项目串联了：",[50,153224,153225,153228,153231,153234,153237,153239],{},[53,153226,153227],{},"菜单循环。",[53,153229,153230],{},"函数封装。",[53,153232,153233],{},"列表字典。",[53,153235,153236],{},"JSON 读写。",[53,153238,151706],{},[53,153240,153241,28364],{},[93,153242,153243],{},"if __name__ == \"__main__\"",[38,153245,153247],{"id":153246},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[14,153249,153250],{},"可以进一步拆成两个类：",[50,153252,153253,153258],{},[53,153254,153255,153257],{},[93,153256,149547],{},"：表示单个学生。",[53,153259,153260,153262],{},[93,153261,151573],{},"：负责学生增删改查和文件保存。",[14,153264,153265],{},"示意代码：",[87,153267,153269],{"className":30357,"code":153268,"language":30359,"meta":18,"style":18},"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",[93,153270,153271,153281,153285,153289,153293,153301,153308,153314,153320,153326,153330,153338,153344,153354,153364,153374,153384,153388,153392,153398,153406,153414,153422,153430,153438,153446],{"__ignoreMap":18},[96,153272,153273,153275,153277,153279],{"class":98,"line":99},[96,153274,30716],{"class":102},[96,153276,151131],{"class":106},[96,153278,30371],{"class":102},[96,153280,151136],{"class":106},[96,153282,153283],{"class":98,"line":19},[96,153284,2383],{"emptyLinePlaceholder":23},[96,153286,153287],{"class":98,"line":1162},[96,153288,2383],{"emptyLinePlaceholder":23},[96,153290,153291],{"class":98,"line":1177},[96,153292,151149],{"class":1946},[96,153294,153295,153297,153299],{"class":98,"line":1183},[96,153296,14678],{"class":102},[96,153298,7882],{"class":1946},[96,153300,3722],{"class":106},[96,153302,153303,153306],{"class":98,"line":1197},[96,153304,153305],{"class":106},"    student_id: ",[96,153307,151165],{"class":155},[96,153309,153310,153312],{"class":98,"line":1203},[96,153311,151162],{"class":106},[96,153313,151165],{"class":155},[96,153315,153316,153318],{"class":98,"line":1294},[96,153317,151170],{"class":106},[96,153319,151173],{"class":155},[96,153321,153322,153324],{"class":98,"line":1300},[96,153323,151178],{"class":106},[96,153325,151181],{"class":155},[96,153327,153328],{"class":98,"line":1312},[96,153329,2383],{"emptyLinePlaceholder":23},[96,153331,153332,153334,153336],{"class":98,"line":1595},[96,153333,30780],{"class":102},[96,153335,151329],{"class":1946},[96,153337,30786],{"class":106},[96,153339,153340,153342],{"class":98,"line":1600},[96,153341,14736],{"class":102},[96,153343,15556],{"class":106},[96,153345,153346,153348,153350,153352],{"class":98,"line":1606},[96,153347,151342],{"class":211},[96,153349,51416],{"class":106},[96,153351,30802],{"class":155},[96,153353,151349],{"class":106},[96,153355,153356,153358,153360,153362],{"class":98,"line":1611},[96,153357,151354],{"class":211},[96,153359,51416],{"class":106},[96,153361,30802],{"class":155},[96,153363,151361],{"class":106},[96,153365,153366,153368,153370,153372],{"class":98,"line":1625},[96,153367,151366],{"class":211},[96,153369,51416],{"class":106},[96,153371,30802],{"class":155},[96,153373,151373],{"class":106},[96,153375,153376,153378,153380,153382],{"class":98,"line":1630},[96,153377,151378],{"class":211},[96,153379,51416],{"class":106},[96,153381,30802],{"class":155},[96,153383,151385],{"class":106},[96,153385,153386],{"class":98,"line":1636},[96,153387,2512],{"class":106},[96,153389,153390],{"class":98,"line":1657},[96,153391,2383],{"emptyLinePlaceholder":23},[96,153393,153394,153396],{"class":98,"line":1662},[96,153395,150993],{"class":1946},[96,153397,150996],{"class":155},[96,153399,153400,153402,153404],{"class":98,"line":1676},[96,153401,30780],{"class":102},[96,153403,151406],{"class":1946},[96,153405,151409],{"class":106},[96,153407,153408,153410,153412],{"class":98,"line":1681},[96,153409,14736],{"class":102},[96,153411,151013],{"class":155},[96,153413,151418],{"class":106},[96,153415,153416,153418,153420],{"class":98,"line":1710},[96,153417,151423],{"class":106},[96,153419,151426],{"class":211},[96,153421,87815],{"class":106},[96,153423,153424,153426,153428],{"class":98,"line":1715},[96,153425,151423],{"class":106},[96,153427,62658],{"class":211},[96,153429,87815],{"class":106},[96,153431,153432,153434,153436],{"class":98,"line":1732},[96,153433,151423],{"class":106},[96,153435,69103],{"class":211},[96,153437,87815],{"class":106},[96,153439,153440,153442,153444],{"class":98,"line":1737},[96,153441,151423],{"class":106},[96,153443,151451],{"class":211},[96,153445,87815],{"class":106},[96,153447,153448],{"class":98,"line":1742},[96,153449,38105],{"class":106},[14,153451,153452],{},"管理器示意：",[87,153454,153456],{"className":30357,"code":153455,"language":30359,"meta":18,"style":18},"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",[93,153457,153458,153467,153475,153486,153490,153500,153513,153524,153531,153537,153541,153550,153559,153565,153572],{"__ignoreMap":18},[96,153459,153460,153462,153465],{"class":98,"line":99},[96,153461,14678],{"class":102},[96,153463,153464],{"class":1946}," StudentManager",[96,153466,3722],{"class":106},[96,153468,153469,153471,153473],{"class":98,"line":19},[96,153470,30780],{"class":102},[96,153472,30783],{"class":155},[96,153474,30786],{"class":106},[96,153476,153477,153479,153482,153484],{"class":98,"line":1162},[96,153478,30824],{"class":155},[96,153480,153481],{"class":106},".students ",[96,153483,152],{"class":102},[96,153485,51817],{"class":106},[96,153487,153488],{"class":98,"line":1177},[96,153489,2383],{"emptyLinePlaceholder":23},[96,153491,153492,153494,153497],{"class":98,"line":1183},[96,153493,30780],{"class":102},[96,153495,153496],{"class":1946}," find_by_id",[96,153498,153499],{"class":106},"(self, student_id):\n",[96,153501,153502,153504,153506,153508,153510],{"class":98,"line":1197},[96,153503,3386],{"class":102},[96,153505,152116],{"class":106},[96,153507,26022],{"class":102},[96,153509,38852],{"class":155},[96,153511,153512],{"class":106},".students:\n",[96,153514,153515,153517,153520,153522],{"class":98,"line":1203},[96,153516,4625],{"class":102},[96,153518,153519],{"class":106}," student.student_id ",[96,153521,2932],{"class":102},[96,153523,152137],{"class":106},[96,153525,153526,153529],{"class":98,"line":1294},[96,153527,153528],{"class":102},"                return",[96,153530,152144],{"class":106},[96,153532,153533,153535],{"class":98,"line":1300},[96,153534,14736],{"class":102},[96,153536,152151],{"class":155},[96,153538,153539],{"class":98,"line":1312},[96,153540,2383],{"emptyLinePlaceholder":23},[96,153542,153543,153545,153547],{"class":98,"line":1595},[96,153544,30780],{"class":102},[96,153546,5193],{"class":1946},[96,153548,153549],{"class":106},"(self, student):\n",[96,153551,153552,153554,153556],{"class":98,"line":1600},[96,153553,2480],{"class":102},[96,153555,38852],{"class":155},[96,153557,153558],{"class":106},".find_by_id(student.student_id):\n",[96,153560,153561,153563],{"class":98,"line":1606},[96,153562,15716],{"class":102},[96,153564,125786],{"class":155},[96,153566,153567,153569],{"class":98,"line":1611},[96,153568,30824],{"class":155},[96,153570,153571],{"class":106},".students.append(student)\n",[96,153573,153574,153576],{"class":98,"line":1625},[96,153575,14736],{"class":102},[96,153577,153578],{"class":155}," True\n",[14,153580,153581],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[38,153583,153585],{"id":153584},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[67,153587,153589],{"id":153588},"_1251-数据结构","12.5.1 数据结构",[87,153591,153593],{"className":30357,"code":153592,"language":30359,"meta":18,"style":18},"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",[93,153594,153595,153603,153634,153664,153693,153722],{"__ignoreMap":18},[96,153596,153597,153599,153601],{"class":98,"line":99},[96,153598,148444],{"class":106},[96,153600,152],{"class":102},[96,153602,55426],{"class":106},[96,153604,153605,153607,153609,153611,153613,153615,153618,153620,153623,153625,153627,153629,153632],{"class":98,"line":19},[96,153606,148364],{"class":106},[96,153608,147976],{"class":211},[96,153610,51416],{"class":106},[96,153612,148587],{"class":211},[96,153614,12419],{"class":106},[96,153616,153617],{"class":211},"\"category\"",[96,153619,51416],{"class":106},[96,153621,153622],{"class":211},"\"手机\"",[96,153624,12419],{"class":106},[96,153626,84063],{"class":211},[96,153628,51416],{"class":106},[96,153630,153631],{"class":155},"12000",[96,153633,4913],{"class":106},[96,153635,153636,153638,153640,153642,153644,153646,153648,153650,153653,153655,153657,153659,153662],{"class":98,"line":1162},[96,153637,148364],{"class":106},[96,153639,147976],{"class":211},[96,153641,51416],{"class":106},[96,153643,148587],{"class":211},[96,153645,12419],{"class":106},[96,153647,153617],{"class":211},[96,153649,51416],{"class":106},[96,153651,153652],{"class":211},"\"电脑\"",[96,153654,12419],{"class":106},[96,153656,84063],{"class":211},[96,153658,51416],{"class":106},[96,153660,153661],{"class":155},"18000",[96,153663,4913],{"class":106},[96,153665,153666,153668,153670,153672,153674,153676,153678,153680,153682,153684,153686,153688,153691],{"class":98,"line":1177},[96,153667,148364],{"class":106},[96,153669,147976],{"class":211},[96,153671,51416],{"class":106},[96,153673,148608],{"class":211},[96,153675,12419],{"class":106},[96,153677,153617],{"class":211},[96,153679,51416],{"class":106},[96,153681,153622],{"class":211},[96,153683,12419],{"class":106},[96,153685,84063],{"class":211},[96,153687,51416],{"class":106},[96,153689,153690],{"class":155},"15000",[96,153692,4913],{"class":106},[96,153694,153695,153697,153699,153701,153703,153705,153707,153709,153711,153713,153715,153717,153720],{"class":98,"line":1183},[96,153696,148364],{"class":106},[96,153698,147976],{"class":211},[96,153700,51416],{"class":106},[96,153702,148608],{"class":211},[96,153704,12419],{"class":106},[96,153706,153617],{"class":211},[96,153708,51416],{"class":106},[96,153710,153652],{"class":211},[96,153712,12419],{"class":106},[96,153714,84063],{"class":211},[96,153716,51416],{"class":106},[96,153718,153719],{"class":155},"16000",[96,153721,4913],{"class":106},[96,153723,153724],{"class":98,"line":1197},[96,153725,33225],{"class":106},[67,153727,153729],{"id":153728},"_1252-按日期统计","12.5.2 按日期统计",[87,153731,153733],{"className":30357,"code":153732,"language":30359,"meta":18,"style":18},"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",[93,153734,153735,153744,153748,153759,153773,153786,153805,153809],{"__ignoreMap":18},[96,153736,153737,153740,153742],{"class":98,"line":99},[96,153738,153739],{"class":106},"daily_total ",[96,153741,152],{"class":102},[96,153743,87847],{"class":106},[96,153745,153746],{"class":98,"line":19},[96,153747,2383],{"emptyLinePlaceholder":23},[96,153749,153750,153752,153754,153756],{"class":98,"line":1162},[96,153751,3008],{"class":102},[96,153753,148188],{"class":106},[96,153755,26022],{"class":102},[96,153757,153758],{"class":106}," sales:\n",[96,153760,153761,153764,153766,153769,153771],{"class":98,"line":1177},[96,153762,153763],{"class":106},"    date ",[96,153765,152],{"class":102},[96,153767,153768],{"class":106}," item[",[96,153770,147976],{"class":211},[96,153772,33225],{"class":106},[96,153774,153775,153778,153780,153782,153784],{"class":98,"line":1183},[96,153776,153777],{"class":106},"    amount ",[96,153779,152],{"class":102},[96,153781,153768],{"class":106},[96,153783,84063],{"class":211},[96,153785,33225],{"class":106},[96,153787,153788,153791,153793,153796,153798,153800,153802],{"class":98,"line":1197},[96,153789,153790],{"class":106},"    daily_total[date] ",[96,153792,152],{"class":102},[96,153794,153795],{"class":106}," daily_total.get(date, ",[96,153797,298],{"class":155},[96,153799,13698],{"class":106},[96,153801,588],{"class":102},[96,153803,153804],{"class":106}," amount\n",[96,153806,153807],{"class":98,"line":1203},[96,153808,2383],{"emptyLinePlaceholder":23},[96,153810,153811,153813],{"class":98,"line":1294},[96,153812,30394],{"class":155},[96,153814,153815],{"class":106},"(daily_total)\n",[67,153817,153819],{"id":153818},"_1253-按类别统计","12.5.3 按类别统计",[87,153821,153823],{"className":30357,"code":153822,"language":30359,"meta":18,"style":18},"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",[93,153824,153825,153834,153838,153848,153861,153873,153891,153895],{"__ignoreMap":18},[96,153826,153827,153830,153832],{"class":98,"line":99},[96,153828,153829],{"class":106},"category_total ",[96,153831,152],{"class":102},[96,153833,87847],{"class":106},[96,153835,153836],{"class":98,"line":19},[96,153837,2383],{"emptyLinePlaceholder":23},[96,153839,153840,153842,153844,153846],{"class":98,"line":1162},[96,153841,3008],{"class":102},[96,153843,148188],{"class":106},[96,153845,26022],{"class":102},[96,153847,153758],{"class":106},[96,153849,153850,153853,153855,153857,153859],{"class":98,"line":1177},[96,153851,153852],{"class":106},"    category ",[96,153854,152],{"class":102},[96,153856,153768],{"class":106},[96,153858,153617],{"class":211},[96,153860,33225],{"class":106},[96,153862,153863,153865,153867,153869,153871],{"class":98,"line":1183},[96,153864,153777],{"class":106},[96,153866,152],{"class":102},[96,153868,153768],{"class":106},[96,153870,84063],{"class":211},[96,153872,33225],{"class":106},[96,153874,153875,153878,153880,153883,153885,153887,153889],{"class":98,"line":1197},[96,153876,153877],{"class":106},"    category_total[category] ",[96,153879,152],{"class":102},[96,153881,153882],{"class":106}," category_total.get(category, ",[96,153884,298],{"class":155},[96,153886,13698],{"class":106},[96,153888,588],{"class":102},[96,153890,153804],{"class":106},[96,153892,153893],{"class":98,"line":1203},[96,153894,2383],{"emptyLinePlaceholder":23},[96,153896,153897,153899],{"class":98,"line":1294},[96,153898,30394],{"class":155},[96,153900,153901],{"class":106},"(category_total)\n",[67,153903,153905],{"id":153904},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[87,153907,153909],{"className":30357,"code":153908,"language":30359,"meta":18,"style":18},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[93,153910,153911,153936],{"__ignoreMap":18},[96,153912,153913,153916,153918,153920,153923,153926,153929,153932,153934],{"class":98,"line":99},[96,153914,153915],{"class":106},"top_date, top_amount ",[96,153917,152],{"class":102},[96,153919,5935],{"class":155},[96,153921,153922],{"class":106},"(daily_total.items(), ",[96,153924,153925],{"class":5200},"key",[96,153927,153928],{"class":102},"=lambda",[96,153930,153931],{"class":106}," item: item[",[96,153933,324],{"class":155},[96,153935,4640],{"class":106},[96,153937,153938,153940],{"class":98,"line":19},[96,153939,30394],{"class":155},[96,153941,153942],{"class":106},"(top_date, top_amount)\n",[38,153944,153946],{"id":153945},"_126-绘制柱状图","12.6 绘制柱状图",[87,153948,153950],{"className":30357,"code":153949,"language":30359,"meta":18,"style":18},"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",[93,153951,153952,153966,153977,153981,153989,154001,154013,154024,154028,154032,154042,154053,154067,154072,154089,154106,154122,154126],{"__ignoreMap":18},[96,153953,153954,153956,153958,153960,153962,153964],{"class":98,"line":99},[96,153955,30716],{"class":102},[96,153957,147358],{"class":106},[96,153959,30371],{"class":102},[96,153961,147363],{"class":106},[96,153963,31362],{"class":102},[96,153965,147368],{"class":106},[96,153967,153968,153970,153972,153974],{"class":98,"line":19},[96,153969,30716],{"class":102},[96,153971,147217],{"class":106},[96,153973,30371],{"class":102},[96,153975,153976],{"class":106}," Bar\n",[96,153978,153979],{"class":98,"line":1162},[96,153980,2383],{"emptyLinePlaceholder":23},[96,153982,153983,153985,153987],{"class":98,"line":1177},[96,153984,153829],{"class":106},[96,153986,152],{"class":102},[96,153988,15556],{"class":106},[96,153990,153991,153994,153996,153999],{"class":98,"line":1183},[96,153992,153993],{"class":211},"    \"手机\"",[96,153995,51416],{"class":106},[96,153997,153998],{"class":155},"27000",[96,154000,31445],{"class":106},[96,154002,154003,154006,154008,154011],{"class":98,"line":1197},[96,154004,154005],{"class":211},"    \"电脑\"",[96,154007,51416],{"class":106},[96,154009,154010],{"class":155},"34000",[96,154012,31445],{"class":106},[96,154014,154015,154018,154020,154022],{"class":98,"line":1203},[96,154016,154017],{"class":211},"    \"耳机\"",[96,154019,51416],{"class":106},[96,154021,124378],{"class":155},[96,154023,31445],{"class":106},[96,154025,154026],{"class":98,"line":1294},[96,154027,1548],{"class":106},[96,154029,154030],{"class":98,"line":1300},[96,154031,2383],{"emptyLinePlaceholder":23},[96,154033,154034,154037,154039],{"class":98,"line":1312},[96,154035,154036],{"class":106},"bar ",[96,154038,152],{"class":102},[96,154040,154041],{"class":106}," Bar()\n",[96,154043,154044,154047,154050],{"class":98,"line":1595},[96,154045,154046],{"class":106},"bar.add_xaxis(",[96,154048,154049],{"class":155},"list",[96,154051,154052],{"class":106},"(category_total.keys()))\n",[96,154054,154055,154058,154060,154062,154064],{"class":98,"line":1600},[96,154056,154057],{"class":106},"bar.add_yaxis(",[96,154059,147274],{"class":211},[96,154061,12419],{"class":106},[96,154063,154049],{"class":155},[96,154065,154066],{"class":106},"(category_total.values()))\n",[96,154068,154069],{"class":98,"line":1606},[96,154070,154071],{"class":106},"bar.set_global_opts(\n",[96,154073,154074,154076,154078,154080,154082,154084,154087],{"class":98,"line":1611},[96,154075,147452],{"class":5200},[96,154077,152],{"class":102},[96,154079,147457],{"class":106},[96,154081,51386],{"class":5200},[96,154083,152],{"class":102},[96,154085,154086],{"class":211},"\"品类销售额\"",[96,154088,38026],{"class":106},[96,154090,154091,154093,154095,154097,154099,154101,154104],{"class":98,"line":1625},[96,154092,147471],{"class":5200},[96,154094,152],{"class":102},[96,154096,147476],{"class":106},[96,154098,79789],{"class":5200},[96,154100,152],{"class":102},[96,154102,154103],{"class":211},"\"品类\"",[96,154105,38026],{"class":106},[96,154107,154108,154110,154112,154114,154116,154118,154120],{"class":98,"line":1630},[96,154109,147490],{"class":5200},[96,154111,152],{"class":102},[96,154113,147476],{"class":106},[96,154115,79789],{"class":5200},[96,154117,152],{"class":102},[96,154119,147274],{"class":211},[96,154121,38026],{"class":106},[96,154123,154124],{"class":98,"line":1636},[96,154125,113],{"class":106},[96,154127,154128,154131,154134],{"class":98,"line":1657},[96,154129,154130],{"class":106},"bar.render(",[96,154132,154133],{"class":211},"\"category_sales.html\"",[96,154135,113],{"class":106},[38,154137,154139],{"id":154138},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[14,154141,154142],{},"时间线适合展示不同日期、月份、年份的数据变化。",[87,154144,154146],{"className":30357,"code":154145,"language":30359,"meta":18,"style":18},"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",[93,154147,154148,154162,154173,154177,154185,154209,154232,154257,154261,154265,154275,154279,154290,154299,154309,154323,154354,154359,154363],{"__ignoreMap":18},[96,154149,154150,154152,154154,154156,154158,154160],{"class":98,"line":99},[96,154151,30716],{"class":102},[96,154153,147358],{"class":106},[96,154155,30371],{"class":102},[96,154157,147363],{"class":106},[96,154159,31362],{"class":102},[96,154161,147368],{"class":106},[96,154163,154164,154166,154168,154170],{"class":98,"line":19},[96,154165,30716],{"class":102},[96,154167,147217],{"class":106},[96,154169,30371],{"class":102},[96,154171,154172],{"class":106}," Bar, Timeline\n",[96,154174,154175],{"class":98,"line":1162},[96,154176,2383],{"emptyLinePlaceholder":23},[96,154178,154179,154181,154183],{"class":98,"line":1177},[96,154180,101637],{"class":106},[96,154182,152],{"class":102},[96,154184,15556],{"class":106},[96,154186,154187,154190,154193,154195,154197,154199,154201,154203,154205,154207],{"class":98,"line":1183},[96,154188,154189],{"class":211},"    \"2024-10-01\"",[96,154191,154192],{"class":106},": {",[96,154194,153622],{"class":211},[96,154196,51416],{"class":106},[96,154198,153631],{"class":155},[96,154200,12419],{"class":106},[96,154202,153652],{"class":211},[96,154204,51416],{"class":106},[96,154206,153661],{"class":155},[96,154208,4913],{"class":106},[96,154210,154211,154214,154216,154218,154220,154222,154224,154226,154228,154230],{"class":98,"line":1197},[96,154212,154213],{"class":211},"    \"2024-10-02\"",[96,154215,154192],{"class":106},[96,154217,153622],{"class":211},[96,154219,51416],{"class":106},[96,154221,153690],{"class":155},[96,154223,12419],{"class":106},[96,154225,153652],{"class":211},[96,154227,51416],{"class":106},[96,154229,153719],{"class":155},[96,154231,4913],{"class":106},[96,154233,154234,154237,154239,154241,154243,154246,154248,154250,154252,154255],{"class":98,"line":1203},[96,154235,154236],{"class":211},"    \"2024-10-03\"",[96,154238,154192],{"class":106},[96,154240,153622],{"class":211},[96,154242,51416],{"class":106},[96,154244,154245],{"class":155},"17000",[96,154247,12419],{"class":106},[96,154249,153652],{"class":211},[96,154251,51416],{"class":106},[96,154253,154254],{"class":155},"19000",[96,154256,4913],{"class":106},[96,154258,154259],{"class":98,"line":1294},[96,154260,1548],{"class":106},[96,154262,154263],{"class":98,"line":1300},[96,154264,2383],{"emptyLinePlaceholder":23},[96,154266,154267,154270,154272],{"class":98,"line":1312},[96,154268,154269],{"class":106},"timeline ",[96,154271,152],{"class":102},[96,154273,154274],{"class":106}," Timeline()\n",[96,154276,154277],{"class":98,"line":1595},[96,154278,2383],{"emptyLinePlaceholder":23},[96,154280,154281,154283,154286,154288],{"class":98,"line":1600},[96,154282,3008],{"class":102},[96,154284,154285],{"class":106}," date, category_data ",[96,154287,26022],{"class":102},[96,154289,149127],{"class":106},[96,154291,154292,154295,154297],{"class":98,"line":1606},[96,154293,154294],{"class":106},"    bar ",[96,154296,152],{"class":102},[96,154298,154041],{"class":106},[96,154300,154301,154304,154306],{"class":98,"line":1611},[96,154302,154303],{"class":106},"    bar.add_xaxis(",[96,154305,154049],{"class":155},[96,154307,154308],{"class":106},"(category_data.keys()))\n",[96,154310,154311,154314,154316,154318,154320],{"class":98,"line":1625},[96,154312,154313],{"class":106},"    bar.add_yaxis(",[96,154315,147274],{"class":211},[96,154317,12419],{"class":106},[96,154319,154049],{"class":155},[96,154321,154322],{"class":106},"(category_data.values()))\n",[96,154324,154325,154328,154331,154333,154335,154337,154339,154341,154343,154345,154347,154349,154352],{"class":98,"line":1630},[96,154326,154327],{"class":106},"    bar.set_global_opts(",[96,154329,154330],{"class":5200},"title_opts",[96,154332,152],{"class":102},[96,154334,147457],{"class":106},[96,154336,51386],{"class":5200},[96,154338,152],{"class":102},[96,154340,159],{"class":102},[96,154342,358],{"class":211},[96,154344,1003],{"class":155},[96,154346,73905],{"class":106},[96,154348,1053],{"class":155},[96,154350,154351],{"class":211},"销售额\"",[96,154353,30476],{"class":106},[96,154355,154356],{"class":98,"line":1636},[96,154357,154358],{"class":106},"    timeline.add(bar, date)\n",[96,154360,154361],{"class":98,"line":1657},[96,154362,2383],{"emptyLinePlaceholder":23},[96,154364,154365,154368,154371],{"class":98,"line":1662},[96,154366,154367],{"class":106},"timeline.render(",[96,154369,154370],{"class":211},"\"timeline_sales.html\"",[96,154372,113],{"class":106},[38,154374,154376],{"id":154375},"_128-绘制地图","12.8 绘制地图",[14,154378,154379],{},"地图适合展示地区数据。",[87,154381,154383],{"className":30357,"code":154382,"language":30359,"meta":18,"style":18},"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",[93,154384,154385,154399,154410,154414,154422,154435,154447,154460,154473,154477,154481,154491,154506,154511,154528,154547,154551],{"__ignoreMap":18},[96,154386,154387,154389,154391,154393,154395,154397],{"class":98,"line":99},[96,154388,30716],{"class":102},[96,154390,147358],{"class":106},[96,154392,30371],{"class":102},[96,154394,147363],{"class":106},[96,154396,31362],{"class":102},[96,154398,147368],{"class":106},[96,154400,154401,154403,154405,154407],{"class":98,"line":19},[96,154402,30716],{"class":102},[96,154404,147217],{"class":106},[96,154406,30371],{"class":102},[96,154408,154409],{"class":106}," Map\n",[96,154411,154412],{"class":98,"line":1162},[96,154413,2383],{"emptyLinePlaceholder":23},[96,154415,154416,154418,154420],{"class":98,"line":1177},[96,154417,101637],{"class":106},[96,154419,152],{"class":102},[96,154421,55426],{"class":106},[96,154423,154424,154427,154429,154431,154433],{"class":98,"line":1183},[96,154425,154426],{"class":106},"    (",[96,154428,69248],{"class":211},[96,154430,12419],{"class":106},[96,154432,924],{"class":155},[96,154434,38026],{"class":106},[96,154436,154437,154439,154441,154443,154445],{"class":98,"line":1197},[96,154438,154426],{"class":106},[96,154440,69268],{"class":211},[96,154442,12419],{"class":106},[96,154444,147291],{"class":155},[96,154446,38026],{"class":106},[96,154448,154449,154451,154454,154456,154458],{"class":98,"line":1203},[96,154450,154426],{"class":106},[96,154452,154453],{"class":211},"\"广东\"",[96,154455,12419],{"class":106},[96,154457,1705],{"class":155},[96,154459,38026],{"class":106},[96,154461,154462,154464,154467,154469,154471],{"class":98,"line":1294},[96,154463,154426],{"class":106},[96,154465,154466],{"class":211},"\"浙江\"",[96,154468,12419],{"class":106},[96,154470,147296],{"class":155},[96,154472,38026],{"class":106},[96,154474,154475],{"class":98,"line":1300},[96,154476,33225],{"class":106},[96,154478,154479],{"class":98,"line":1312},[96,154480,2383],{"emptyLinePlaceholder":23},[96,154482,154483,154486,154488],{"class":98,"line":1595},[96,154484,154485],{"class":106},"map_chart ",[96,154487,152],{"class":102},[96,154489,154490],{"class":106}," Map()\n",[96,154492,154493,154496,154498,154501,154504],{"class":98,"line":1600},[96,154494,154495],{"class":106},"map_chart.add(",[96,154497,147274],{"class":211},[96,154499,154500],{"class":106},", data, ",[96,154502,154503],{"class":211},"\"china\"",[96,154505,113],{"class":106},[96,154507,154508],{"class":98,"line":1606},[96,154509,154510],{"class":106},"map_chart.set_global_opts(\n",[96,154512,154513,154515,154517,154519,154521,154523,154526],{"class":98,"line":1611},[96,154514,147452],{"class":5200},[96,154516,152],{"class":102},[96,154518,147457],{"class":106},[96,154520,51386],{"class":5200},[96,154522,152],{"class":102},[96,154524,154525],{"class":211},"\"地区销售额\"",[96,154527,38026],{"class":106},[96,154529,154530,154533,154535,154538,154541,154543,154545],{"class":98,"line":1625},[96,154531,154532],{"class":5200},"    visualmap_opts",[96,154534,152],{"class":102},[96,154536,154537],{"class":106},"opts.VisualMapOpts(",[96,154539,154540],{"class":5200},"max_",[96,154542,152],{"class":102},[96,154544,1705],{"class":155},[96,154546,38026],{"class":106},[96,154548,154549],{"class":98,"line":1630},[96,154550,113],{"class":106},[96,154552,154553,154556,154559],{"class":98,"line":1636},[96,154554,154555],{"class":106},"map_chart.render(",[96,154557,154558],{"class":211},"\"map_sales.html\"",[96,154560,113],{"class":106},[14,154562,154563],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[38,154565,154567],{"id":154566},"_129-项目拆分建议","12.9 项目拆分建议",[14,154569,154570],{},"当代码超过一个文件时，可以这样组织：",[87,154572,154575],{"className":154573,"code":154574,"language":5171,"meta":18},[5169],"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",[93,154576,154574],{"__ignoreMap":18},[14,154578,154579],{},"职责：",[50,154581,154582,154588,154594,154600],{},[53,154583,154584,154587],{},[93,154585,154586],{},"main.py","：程序入口。",[53,154589,154590,154593],{},[93,154591,154592],{},"file_utils.py","：读写 JSON。",[53,154595,154596,154599],{},[93,154597,154598],{},"sales_service.py","：统计销售数据。",[53,154601,154602,154605],{},[93,154603,154604],{},"chart_builder.py","：生成图表。",[38,154607,154609],{"id":154608},"_1210-python基础复习清单","12.10 Python基础复习清单",[14,154611,154612],{},"语法基础：",[50,154614,154615,154618,154621,154624],{},[53,154616,154617],{},"会写变量、注释、输入输出。",[53,154619,154620],{},"会使用 int、float、str、bool。",[53,154622,154623],{},"会做类型转换。",[53,154625,154626],{},"会使用 f-string 格式化输出。",[14,154628,154629],{},"流程控制：",[50,154631,154632,154638,154644,154652],{},[53,154633,154634,154635,28364],{},"会写 ",[93,154636,154637],{},"if elif else",[53,154639,154634,154640,100997,154642,28364],{},[93,154641,108642],{},[93,154643,3008],{},[53,154645,154646,154647,100997,154649,28364],{},"理解 ",[93,154648,2036],{},[93,154650,154651],{},"continue",[53,154653,154654],{},"能写嵌套循环。",[14,154656,154657],{},"函数：",[50,154659,154660,154663,154666,154669],{},[53,154661,154662],{},"会定义和调用函数。",[53,154664,154665],{},"理解参数和返回值。",[53,154667,154668],{},"知道局部变量和全局变量。",[53,154670,154671],{},"会使用默认参数、关键字参数、不定长参数。",[14,154673,154674],{},"容器：",[50,154676,154677,154680,154683,154686,154689],{},[53,154678,154679],{},"会使用列表增删改查。",[53,154681,154682],{},"会遍历列表、字典。",[53,154684,154685],{},"会使用切片。",[53,154687,154688],{},"会用集合去重。",[53,154690,154691],{},"会处理列表嵌套字典。",[14,154693,154694],{},"文件和模块：",[50,154696,154697,154700,154703,154706,154709],{},[53,154698,154699],{},"会读写文本文件。",[53,154701,154702],{},"会读写 JSON。",[53,154704,154705],{},"会捕获常见异常。",[53,154707,154708],{},"会导入模块和第三方包。",[53,154710,154711],{},"会创建简单包结构。",[14,154713,154714],{},"项目能力：",[50,154716,154717,154720,154723,154726,154729],{},[53,154718,154719],{},"能把代码拆成函数。",[53,154721,154722],{},"能把数据保存到文件。",[53,154724,154725],{},"能处理用户输入错误。",[53,154727,154728],{},"能写一个完整菜单程序。",[53,154730,154731],{},"能用 pyecharts 生成图表。",[38,154733,154735],{"id":154734},"_1211-推荐练习顺序","12.11 推荐练习顺序",[50,154737,154738,154741,154744,154747,154750,154753,154756,154759],{},[53,154739,154740],{},"猜数字游戏。",[53,154742,154743],{},"ATM 菜单程序。",[53,154745,154746],{},"学生成绩统计。",[53,154748,154749],{},"学生管理系统函数版。",[53,154751,154752],{},"学生管理系统文件持久化版。",[53,154754,154755],{},"学生管理系统面向对象版。",[53,154757,154758],{},"销售数据统计。",[53,154760,154761],{},"销售数据可视化。",[38,154763,154765],{"id":154764},"_1212-常见学习误区","12.12 常见学习误区",[50,154767,154768,154771,154774,154777,154780,154783,154786],{},[53,154769,154770],{},"只看视频不敲代码。",[53,154772,154773],{},"一报错就复制错误去搜，不先读报错位置。",[53,154775,154776],{},"变量名随便写，后续自己看不懂。",[53,154778,154779],{},"所有代码都写在一个文件一个函数里。",[53,154781,154782],{},"不保存练习代码，复习时没有材料。",[53,154784,154785],{},"还没掌握列表字典就急着学框架。",[53,154787,154788],{},"不会读官方文档，只依赖教程。",[38,154790,154792],{"id":154791},"_1213-如何读报错","12.13 如何读报错",[14,154794,154795],{},"报错通常从下往上看最后几行。",[14,154797,15119],{},[87,154799,154802],{"className":154800,"code":154801,"language":5171,"meta":18},[5169],"ValueError: invalid literal for int() with base 10: 'abc'\n",[93,154803,154801],{"__ignoreMap":18},[14,154805,24578],{},[50,154807,154808,154814,154824],{},[53,154809,154810,154811,28364],{},"异常类型是 ",[93,154812,154813],{},"ValueError",[53,154815,107324,154816,154819,154820,154823],{},[93,154817,154818],{},"int()"," 无法把 ",[93,154821,154822],{},"'abc'"," 转成整数。",[53,154825,154826],{},"应该检查输入内容或增加异常处理。",[14,154828,154829],{},"再看文件名和行号：",[87,154831,154834],{"className":154832,"code":154833,"language":5171,"meta":18},[5169],"File \"main.py\", line 10, in \u003Cmodule>\n",[93,154835,154833],{"__ignoreMap":18},[14,154837,154838,154839,154841],{},"表示错误发生在 ",[93,154840,154586],{}," 第 10 行。",[38,154843,154845],{"id":154844},"_1214-后续学习方向","12.14 后续学习方向",[14,154847,154848],{},"Python 基础完成后，可以按兴趣选择方向：",[50,154850,154851,154863,154872,154884,154895,154904,154914],{},[53,154852,154853,154854,319,154857,319,154860,28364],{},"自动化办公：",[93,154855,154856],{},"openpyxl",[93,154858,154859],{},"python-docx",[93,154861,154862],{},"pdfplumber",[53,154864,154865,154866,319,154868,319,154870,28364],{},"数据分析：",[93,154867,100605],{},[93,154869,146164],{},[93,154871,146172],{},[53,154873,154874,154875,319,154878,319,154881,28364],{},"Web 后端：",[93,154876,154877],{},"Flask",[93,154879,154880],{},"FastAPI",[93,154882,154883],{},"Django",[53,154885,154886,154887,319,154889,319,154892,28364],{},"爬虫：",[93,154888,146149],{},[93,154890,154891],{},"BeautifulSoup",[93,154893,154894],{},"Scrapy",[53,154896,154897,154898,319,154900,154903],{},"测试开发：",[93,154899,146196],{},[93,154901,154902],{},"selenium","、接口测试。",[53,154905,154906,154907,319,154909,319,154911,28364],{},"人工智能：",[93,154908,100605],{},[93,154910,146164],{},[93,154912,154913],{},"pytorch",[53,154915,154916,154917,319,154919,319,154922,28364],{},"运维脚本：",[93,154918,145765],{},[93,154920,154921],{},"subprocess",[93,154923,154924],{},"paramiko",[14,154926,154927],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[38,154929,154931],{"id":154930},"_1215-结课练习","12.15 结课练习",[50,154933,154934,154937,154940,154943,154946,154949,154952,154955],{},[53,154935,154936],{},"完成函数版学生管理系统。",[53,154938,154939],{},"给学生管理系统增加 JSON 持久化。",[53,154941,154942],{},"给学生管理系统增加异常处理。",[53,154944,154945],{},"把学生管理系统改成面向对象版。",[53,154947,154948],{},"使用 pyecharts 绘制学生成绩柱状图。",[53,154950,154951],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[53,154953,154954],{},"按品类统计销售额并绘制柱状图。",[53,154956,154957],{},"写一份自己的 Python 学习路线图。",[5110,154959,154960],{},"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":18,"searchDepth":19,"depth":19,"links":154962},[154963,154964,154967,154968,154969,154975,154976,154977,154978,154979,154980,154981,154982,154983,154984],{"id":151679,"depth":19,"text":151680},{"id":151729,"depth":19,"text":151730,"children":154965},[154966],{"id":151733,"depth":1162,"text":151734},{"id":151772,"depth":19,"text":151773},{"id":153246,"depth":19,"text":153247},{"id":153584,"depth":19,"text":153585,"children":154970},[154971,154972,154973,154974],{"id":153588,"depth":1162,"text":153589},{"id":153728,"depth":1162,"text":153729},{"id":153818,"depth":1162,"text":153819},{"id":153904,"depth":1162,"text":153905},{"id":153945,"depth":19,"text":153946},{"id":154138,"depth":19,"text":154139},{"id":154375,"depth":19,"text":154376},{"id":154566,"depth":19,"text":154567},{"id":154608,"depth":19,"text":154609},{"id":154734,"depth":19,"text":154735},{"id":154764,"depth":19,"text":154765},{"id":154791,"depth":19,"text":154792},{"id":154844,"depth":19,"text":154845},{"id":154930,"depth":19,"text":154931},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151671,"description":23361},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":154991,"title":154992,"body":154993,"description":23361,"extension":21,"meta":157462,"navigation":23,"path":157463,"seo":157464,"stem":157465,"__hash__":157466},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":154994,"toc":157437},[154995,154998,155002,155005,155008,155028,155031,155054,155057,155060,155082,155085,155107,155111,155114,155154,155157,155278,155282,155285,155325,155328,155352,155355,155359,155362,155376,155409,155412,155447,155450,155473,155476,155509,155512,155514,155520,155595,155598,155604,155621,155661,155665,155668,155714,155716,155754,155757,155792,155795,155830,155833,155865,155868,155887,155891,155895,156008,156010,156085,156089,156135,156138,156164,156173,156177,156180,156243,156251,156279,156283,156323,156388,156392,156395,156434,156437,156482,156485,156546,156550,156577,156580,156608,156611,156615,156619,156684,156687,156725,156728,156760,156764,156863,156867,156870,156943,156946,156994,156998,157004,157044,157047,157094,157097,157146,157150,157152,157166,157168,157349,157353,157380,157400,157407,157411,157428,157434],[10,154996,154992],{"id":154997},"_2-基础语法变量与字符串",[38,154999,155001],{"id":155000},"_21-注释","2.1 注释",[14,155003,155004],{},"注释是给人看的说明文字，不会被 Python 执行。",[14,155006,155007],{},"单行注释：",[87,155009,155011],{"className":30357,"code":155010,"language":30359,"meta":18,"style":18},"# 这是单行注释\nprint(\"hello\")\n",[93,155012,155013,155018],{"__ignoreMap":18},[96,155014,155015],{"class":98,"line":99},[96,155016,155017],{"class":165},"# 这是单行注释\n",[96,155019,155020,155022,155024,155026],{"class":98,"line":19},[96,155021,30394],{"class":155},[96,155023,107],{"class":106},[96,155025,5828],{"class":211},[96,155027,113],{"class":106},[14,155029,155030],{},"多行说明常用三引号：",[87,155032,155034],{"className":30357,"code":155033,"language":30359,"meta":18,"style":18},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[93,155035,155036,155040,155045,155050],{"__ignoreMap":18},[96,155037,155038],{"class":98,"line":99},[96,155039,95677],{"class":211},[96,155041,155042],{"class":98,"line":19},[96,155043,155044],{"class":211},"这是多行说明。\n",[96,155046,155047],{"class":98,"line":1162},[96,155048,155049],{"class":211},"常用于文件顶部说明、函数说明等。\n",[96,155051,155052],{"class":98,"line":1177},[96,155053,95677],{"class":211},[14,155055,155056],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[14,155058,155059],{},"不好：",[87,155061,155063],{"className":30357,"code":155062,"language":30359,"meta":18,"style":18},"# age 加 1\nage = age + 1\n",[93,155064,155065,155070],{"__ignoreMap":18},[96,155066,155067],{"class":98,"line":99},[96,155068,155069],{"class":165},"# age 加 1\n",[96,155071,155072,155074,155076,155078,155080],{"class":98,"line":19},[96,155073,146525],{"class":106},[96,155075,152],{"class":102},[96,155077,15691],{"class":106},[96,155079,588],{"class":102},[96,155081,55678],{"class":155},[14,155083,155084],{},"较好：",[87,155086,155088],{"className":30357,"code":155087,"language":30359,"meta":18,"style":18},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[93,155089,155090,155095],{"__ignoreMap":18},[96,155091,155092],{"class":98,"line":99},[96,155093,155094],{"class":165},"# 用户过完生日后，年龄增加一岁\n",[96,155096,155097,155099,155101,155103,155105],{"class":98,"line":19},[96,155098,146525],{"class":106},[96,155100,152],{"class":102},[96,155102,15691],{"class":106},[96,155104,588],{"class":102},[96,155106,55678],{"class":155},[38,155108,155110],{"id":155109},"_22-字面量","2.2 字面量",[14,155112,155113],{},"字面量就是代码中直接写出来的数据。",[87,155115,155117],{"className":30357,"code":155116,"language":30359,"meta":18,"style":18},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[93,155118,155119,155126,155133,155140,155147],{"__ignoreMap":18},[96,155120,155121,155123],{"class":98,"line":99},[96,155122,418],{"class":155},[96,155124,155125],{"class":165},"          # 整数\n",[96,155127,155128,155130],{"class":98,"line":19},[96,155129,156],{"class":155},[96,155131,155132],{"class":165},"         # 小数\n",[96,155134,155135,155137],{"class":98,"line":1162},[96,155136,5828],{"class":211},[96,155138,155139],{"class":165},"      # 字符串\n",[96,155141,155142,155144],{"class":98,"line":1177},[96,155143,31455],{"class":155},[96,155145,155146],{"class":165},"         # 布尔值\n",[96,155148,155149,155151],{"class":98,"line":1183},[96,155150,95665],{"class":155},[96,155152,155153],{"class":165},"         # 空值\n",[14,155155,155156],{},"常见字面量类型：",[244,155158,155159,155169],{},[247,155160,155161],{},[250,155162,155163,155165,155167],{},[253,155164,23722],{},[253,155166,27471],{},[253,155168,25848],{},[291,155170,155171,155182,155193,155204,155216,155228,155240,155253,155265],{},[250,155172,155173,155175,155179],{},[296,155174,110],{},[296,155176,155177],{},[93,155178,418],{},[296,155180,155181],{},"整数",[250,155183,155184,155186,155190],{},[296,155185,146],{},[296,155187,155188],{},[93,155189,156],{},[296,155191,155192],{},"浮点数",[250,155194,155195,155197,155201],{},[296,155196,1282],{},[296,155198,155199],{},[93,155200,5828],{},[296,155202,155203],{},"字符串",[250,155205,155206,155208,155214],{},[296,155207,1337],{},[296,155209,155210,319,155212],{},[93,155211,31455],{},[93,155213,33966],{},[296,155215,65994],{},[250,155217,155218,155221,155225],{},[296,155219,155220],{},"NoneType",[296,155222,155223],{},[93,155224,95665],{},[296,155226,155227],{},"空值",[250,155229,155230,155232,155237],{},[296,155231,154049],{},[296,155233,155234],{},[93,155235,155236],{},"[1, 2, 3]",[296,155238,155239],{},"列表",[250,155241,155242,155245,155250],{},[296,155243,155244],{},"tuple",[296,155246,155247],{},[93,155248,155249],{},"(1, 2, 3)",[296,155251,155252],{},"元组",[250,155254,155255,155257,155262],{},[296,155256,114525],{},[296,155258,155259],{},[93,155260,155261],{},"{\"name\": \"张三\"}",[296,155263,155264],{},"字典",[250,155266,155267,155270,155275],{},[296,155268,155269],{},"set",[296,155271,155272],{},[93,155273,155274],{},"{1, 2, 3}",[296,155276,155277],{},"集合",[38,155279,155281],{"id":155280},"_23-变量","2.3 变量",[14,155283,155284],{},"变量是保存数据的名字。",[87,155286,155288],{"className":30357,"code":155287,"language":30359,"meta":18,"style":18},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[93,155289,155290,155298,155306,155316],{"__ignoreMap":18},[96,155291,155292,155294,155296],{"class":98,"line":99},[96,155293,146515],{"class":106},[96,155295,152],{"class":102},[96,155297,149332],{"class":211},[96,155299,155300,155302,155304],{"class":98,"line":19},[96,155301,146525],{"class":106},[96,155303,152],{"class":102},[96,155305,146530],{"class":155},[96,155307,155308,155311,155313],{"class":98,"line":1162},[96,155309,155310],{"class":106},"height ",[96,155312,152],{"class":102},[96,155314,155315],{"class":155}," 1.75\n",[96,155317,155318,155321,155323],{"class":98,"line":1177},[96,155319,155320],{"class":106},"is_student ",[96,155322,152],{"class":102},[96,155324,153578],{"class":155},[14,155326,155327],{},"Python 的变量不需要提前声明类型：",[87,155329,155331],{"className":30357,"code":155330,"language":30359,"meta":18,"style":18},"score = 100\nscore = \"满分\"\n",[93,155332,155333,155343],{"__ignoreMap":18},[96,155334,155335,155338,155340],{"class":98,"line":99},[96,155336,155337],{"class":106},"score ",[96,155339,152],{"class":102},[96,155341,155342],{"class":155}," 100\n",[96,155344,155345,155347,155349],{"class":98,"line":19},[96,155346,155337],{"class":106},[96,155348,152],{"class":102},[96,155350,155351],{"class":211}," \"满分\"\n",[14,155353,155354],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[38,155356,155358],{"id":155357},"_24-变量命名规则","2.4 变量命名规则",[14,155360,155361],{},"硬性规则：",[50,155363,155364,155367,155370,155373],{},[53,155365,155366],{},"只能由字母、数字、下划线组成。",[53,155368,155369],{},"不能以数字开头。",[53,155371,155372],{},"不能使用 Python 关键字。",[53,155374,155375],{},"区分大小写。",[87,155377,155379],{"className":30357,"code":155378,"language":30359,"meta":18,"style":18},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[93,155380,155381,155390,155399],{"__ignoreMap":18},[96,155382,155383,155386,155388],{"class":98,"line":99},[96,155384,155385],{"class":106},"user_name ",[96,155387,152],{"class":102},[96,155389,146520],{"class":211},[96,155391,155392,155395,155397],{"class":98,"line":19},[96,155393,155394],{"class":106},"age2 ",[96,155396,152],{"class":102},[96,155398,146530],{"class":155},[96,155400,155401,155404,155406],{"class":98,"line":1162},[96,155402,155403],{"class":106},"_token ",[96,155405,152],{"class":102},[96,155407,155408],{"class":211}," \"abc\"\n",[14,155410,155411],{},"错误写法：",[87,155413,155415],{"className":30357,"code":155414,"language":30359,"meta":18,"style":18},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[93,155416,155417,155426,155438],{"__ignoreMap":18},[96,155418,155419,155422,155424],{"class":98,"line":99},[96,155420,155421],{"class":77382},"2age",[96,155423,13548],{"class":102},[96,155425,146530],{"class":155},[96,155427,155428,155430,155432,155434,155436],{"class":98,"line":19},[96,155429,131563],{"class":106},[96,155431,639],{"class":102},[96,155433,146515],{"class":106},[96,155435,152],{"class":102},[96,155437,146520],{"class":211},[96,155439,155440,155442,155444],{"class":98,"line":1162},[96,155441,14678],{"class":102},[96,155443,13548],{"class":102},[96,155445,155446],{"class":211}," \"一班\"\n",[14,155448,155449],{},"查看关键字：",[87,155451,155453],{"className":30357,"code":155452,"language":30359,"meta":18,"style":18},"import keyword\n\nprint(keyword.kwlist)\n",[93,155454,155455,155462,155466],{"__ignoreMap":18},[96,155456,155457,155459],{"class":98,"line":99},[96,155458,30371],{"class":102},[96,155460,155461],{"class":106}," keyword\n",[96,155463,155464],{"class":98,"line":19},[96,155465,2383],{"emptyLinePlaceholder":23},[96,155467,155468,155470],{"class":98,"line":1162},[96,155469,30394],{"class":155},[96,155471,155472],{"class":106},"(keyword.kwlist)\n",[14,155474,155475],{},"推荐命名风格：",[87,155477,155479],{"className":30357,"code":155478,"language":30359,"meta":18,"style":18},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[93,155480,155481,155490,155500],{"__ignoreMap":18},[96,155482,155483,155486,155488],{"class":98,"line":99},[96,155484,155485],{"class":106},"student_name ",[96,155487,152],{"class":102},[96,155489,149332],{"class":211},[96,155491,155492,155495,155497],{"class":98,"line":19},[96,155493,155494],{"class":106},"total_price ",[96,155496,152],{"class":102},[96,155498,155499],{"class":155}," 99.8\n",[96,155501,155502,155505,155507],{"class":98,"line":1162},[96,155503,155504],{"class":106},"is_finished ",[96,155506,152],{"class":102},[96,155508,125786],{"class":155},[14,155510,155511],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[38,155513,50711],{"id":50710},[14,155515,104345,155516,155519],{},[93,155517,155518],{},"type()"," 查看数据类型：",[87,155521,155523],{"className":30357,"code":155522,"language":30359,"meta":18,"style":18},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[93,155524,155525,155539,155553,155567,155581],{"__ignoreMap":18},[96,155526,155527,155529,155531,155533,155535,155537],{"class":98,"line":99},[96,155528,30394],{"class":155},[96,155530,107],{"class":106},[96,155532,103086],{"class":155},[96,155534,107],{"class":106},[96,155536,418],{"class":155},[96,155538,30476],{"class":106},[96,155540,155541,155543,155545,155547,155549,155551],{"class":98,"line":19},[96,155542,30394],{"class":155},[96,155544,107],{"class":106},[96,155546,103086],{"class":155},[96,155548,107],{"class":106},[96,155550,156],{"class":155},[96,155552,30476],{"class":106},[96,155554,155555,155557,155559,155561,155563,155565],{"class":98,"line":1162},[96,155556,30394],{"class":155},[96,155558,107],{"class":106},[96,155560,103086],{"class":155},[96,155562,107],{"class":106},[96,155564,5828],{"class":211},[96,155566,30476],{"class":106},[96,155568,155569,155571,155573,155575,155577,155579],{"class":98,"line":1177},[96,155570,30394],{"class":155},[96,155572,107],{"class":106},[96,155574,103086],{"class":155},[96,155576,107],{"class":106},[96,155578,31455],{"class":155},[96,155580,30476],{"class":106},[96,155582,155583,155585,155587,155589,155591,155593],{"class":98,"line":1183},[96,155584,30394],{"class":155},[96,155586,107],{"class":106},[96,155588,103086],{"class":155},[96,155590,107],{"class":106},[96,155592,95665],{"class":155},[96,155594,30476],{"class":106},[14,155596,155597],{},"输出类似：",[87,155599,155602],{"className":155600,"code":155601,"language":5171,"meta":18},[5169],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[93,155603,155601],{"__ignoreMap":18},[14,155605,9009,155606,107262,155608,155610,155611,155613,155614,21484,155616,155613,155618,155620],{},[93,155607,1337],{},[93,155609,110],{}," 的子类，",[93,155612,31455],{}," 可以当作 ",[93,155615,324],{},[93,155617,33966],{},[93,155619,298],{},"，但业务代码中不要滥用。",[87,155622,155624],{"className":30357,"code":155623,"language":30359,"meta":18,"style":18},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[93,155625,155626,155644],{"__ignoreMap":18},[96,155627,155628,155630,155632,155634,155636,155638,155641],{"class":98,"line":99},[96,155629,30394],{"class":155},[96,155631,107],{"class":106},[96,155633,31455],{"class":155},[96,155635,45545],{"class":102},[96,155637,25097],{"class":155},[96,155639,155640],{"class":106},")   ",[96,155642,155643],{"class":165},"# 2\n",[96,155645,155646,155648,155650,155652,155654,155656,155658],{"class":98,"line":19},[96,155647,30394],{"class":155},[96,155649,107],{"class":106},[96,155651,33966],{"class":155},[96,155653,45545],{"class":102},[96,155655,25097],{"class":155},[96,155657,45787],{"class":106},[96,155659,155660],{"class":165},"# 1\n",[38,155662,155664],{"id":155663},"_26-类型转换","2.6 类型转换",[14,155666,155667],{},"常用转换函数：",[87,155669,155671],{"className":30357,"code":155670,"language":30359,"meta":18,"style":18},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[93,155672,155673,155683,155694,155704],{"__ignoreMap":18},[96,155674,155675,155677,155679,155681],{"class":98,"line":99},[96,155676,110],{"class":155},[96,155678,107],{"class":106},[96,155680,54295],{"class":211},[96,155682,113],{"class":106},[96,155684,155685,155687,155689,155692],{"class":98,"line":19},[96,155686,146],{"class":155},[96,155688,107],{"class":106},[96,155690,155691],{"class":211},"\"3.14\"",[96,155693,113],{"class":106},[96,155695,155696,155698,155700,155702],{"class":98,"line":1162},[96,155697,1282],{"class":155},[96,155699,107],{"class":106},[96,155701,418],{"class":155},[96,155703,113],{"class":106},[96,155705,155706,155708,155710,155712],{"class":98,"line":1177},[96,155707,1337],{"class":155},[96,155709,107],{"class":106},[96,155711,324],{"class":155},[96,155713,113],{"class":106},[14,155715,15119],{},[87,155717,155719],{"className":30357,"code":155718,"language":30359,"meta":18,"style":18},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[93,155720,155721,155730,155741],{"__ignoreMap":18},[96,155722,155723,155725,155727],{"class":98,"line":99},[96,155724,146525],{"class":106},[96,155726,152],{"class":102},[96,155728,155729],{"class":211}," \"18\"\n",[96,155731,155732,155734,155736,155738],{"class":98,"line":19},[96,155733,146525],{"class":106},[96,155735,152],{"class":102},[96,155737,2365],{"class":155},[96,155739,155740],{"class":106},"(age)\n",[96,155742,155743,155745,155748,155750,155752],{"class":98,"line":1162},[96,155744,30394],{"class":155},[96,155746,155747],{"class":106},"(age ",[96,155749,588],{"class":102},[96,155751,25097],{"class":155},[96,155753,113],{"class":106},[14,155755,155756],{},"输入得到的内容永远是字符串：",[87,155758,155760],{"className":30357,"code":155759,"language":30359,"meta":18,"style":18},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[93,155761,155762,155778],{"__ignoreMap":18},[96,155763,155764,155767,155769,155771,155773,155776],{"class":98,"line":99},[96,155765,155766],{"class":106},"num ",[96,155768,152],{"class":102},[96,155770,60584],{"class":155},[96,155772,107],{"class":106},[96,155774,155775],{"class":211},"\"请输入数字:\"",[96,155777,113],{"class":106},[96,155779,155780,155782,155784,155786,155789],{"class":98,"line":19},[96,155781,30394],{"class":155},[96,155783,107],{"class":106},[96,155785,103086],{"class":155},[96,155787,155788],{"class":106},"(num))  ",[96,155790,155791],{"class":165},"# str\n",[14,155793,155794],{},"如果要做数学运算，必须转换：",[87,155796,155798],{"className":30357,"code":155797,"language":30359,"meta":18,"style":18},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[93,155799,155800,155818],{"__ignoreMap":18},[96,155801,155802,155804,155806,155808,155810,155812,155814,155816],{"class":98,"line":99},[96,155803,155766],{"class":106},[96,155805,152],{"class":102},[96,155807,2365],{"class":155},[96,155809,107],{"class":106},[96,155811,53800],{"class":155},[96,155813,107],{"class":106},[96,155815,155775],{"class":211},[96,155817,30476],{"class":106},[96,155819,155820,155822,155824,155826,155828],{"class":98,"line":19},[96,155821,30394],{"class":155},[96,155823,45598],{"class":106},[96,155825,588],{"class":102},[96,155827,2021],{"class":155},[96,155829,113],{"class":106},[14,155831,155832],{},"常见错误：",[87,155834,155836],{"className":30357,"code":155835,"language":30359,"meta":18,"style":18},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[93,155837,155838,155851],{"__ignoreMap":18},[96,155839,155840,155842,155844,155846,155848],{"class":98,"line":99},[96,155841,110],{"class":155},[96,155843,107],{"class":106},[96,155845,155691],{"class":211},[96,155847,155640],{"class":106},[96,155849,155850],{"class":165},"# 错误\n",[96,155852,155853,155855,155857,155860,155863],{"class":98,"line":19},[96,155854,110],{"class":155},[96,155856,107],{"class":106},[96,155858,155859],{"class":211},"\"abc\"",[96,155861,155862],{"class":106},")    ",[96,155864,155850],{"class":165},[14,155866,155867],{},"正确写法：",[87,155869,155871],{"className":30357,"code":155870,"language":30359,"meta":18,"style":18},"num = float(\"3.14\")\n",[93,155872,155873],{"__ignoreMap":18},[96,155874,155875,155877,155879,155881,155883,155885],{"class":98,"line":99},[96,155876,155766],{"class":106},[96,155878,152],{"class":102},[96,155880,109776],{"class":155},[96,155882,107],{"class":106},[96,155884,155691],{"class":211},[96,155886,113],{"class":106},[38,155888,155890],{"id":155889},"_27-运算符","2.7 运算符",[67,155892,155894],{"id":155893},"_271-算术运算符","2.7.1 算术运算符",[244,155896,155897,155908],{},[247,155898,155899],{},[250,155900,155901,155904,155906],{},[253,155902,155903],{},"运算符",[253,155905,25848],{},[253,155907,27471],{},[291,155909,155910,155924,155938,155952,155966,155980,155994],{},[250,155911,155912,155916,155919],{},[296,155913,155914],{},[93,155915,588],{},[296,155917,155918],{},"加法",[296,155920,155921],{},[93,155922,155923],{},"1 + 2",[250,155925,155926,155930,155933],{},[296,155927,155928],{},[93,155929,639],{},[296,155931,155932],{},"减法",[296,155934,155935],{},[93,155936,155937],{},"5 - 3",[250,155939,155940,155944,155947],{},[296,155941,155942],{},[93,155943,562],{},[296,155945,155946],{},"乘法",[296,155948,155949],{},[93,155950,155951],{},"2 * 3",[250,155953,155954,155958,155961],{},[296,155955,155956],{},[93,155957,691],{},[296,155959,155960],{},"除法，结果是浮点数",[296,155962,155963],{},[93,155964,155965],{},"5 \u002F 2",[250,155967,155968,155972,155975],{},[296,155969,155970],{},[93,155971,33308],{},[296,155973,155974],{},"整除",[296,155976,155977],{},[93,155978,155979],{},"5 \u002F\u002F 2",[250,155981,155982,155986,155989],{},[296,155983,155984],{},[93,155985,435],{},[296,155987,155988],{},"取余",[296,155990,155991],{},[93,155992,155993],{},"5 % 2",[250,155995,155996,156000,156003],{},[296,155997,155998],{},[93,155999,10645],{},[296,156001,156002],{},"幂运算",[296,156004,156005],{},[93,156006,156007],{},"2 ** 3",[14,156009,15119],{},[87,156011,156013],{"className":30357,"code":156012,"language":30359,"meta":18,"style":18},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[93,156014,156015,156033,156050,156067],{"__ignoreMap":18},[96,156016,156017,156019,156021,156023,156026,156028,156030],{"class":98,"line":99},[96,156018,30394],{"class":155},[96,156020,107],{"class":106},[96,156022,426],{"class":155},[96,156024,156025],{"class":102}," \u002F",[96,156027,14739],{"class":155},[96,156029,155640],{"class":106},[96,156031,156032],{"class":165},"# 2.5\n",[96,156034,156035,156037,156039,156041,156044,156046,156048],{"class":98,"line":19},[96,156036,30394],{"class":155},[96,156038,107],{"class":106},[96,156040,426],{"class":155},[96,156042,156043],{"class":102}," \u002F\u002F",[96,156045,14739],{"class":155},[96,156047,45787],{"class":106},[96,156049,155643],{"class":165},[96,156051,156052,156054,156056,156058,156061,156063,156065],{"class":98,"line":1162},[96,156053,30394],{"class":155},[96,156055,107],{"class":106},[96,156057,426],{"class":155},[96,156059,156060],{"class":102}," %",[96,156062,14739],{"class":155},[96,156064,155640],{"class":106},[96,156066,155660],{"class":165},[96,156068,156069,156071,156073,156075,156078,156080,156082],{"class":98,"line":1177},[96,156070,30394],{"class":155},[96,156072,107],{"class":106},[96,156074,184],{"class":155},[96,156076,156077],{"class":102}," **",[96,156079,78049],{"class":155},[96,156081,45787],{"class":106},[96,156083,156084],{"class":165},"# 8\n",[67,156086,156088],{"id":156087},"_272-赋值运算符","2.7.2 赋值运算符",[87,156090,156092],{"className":30357,"code":156091,"language":30359,"meta":18,"style":18},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[93,156093,156094,156102,156110,156118,156126],{"__ignoreMap":18},[96,156095,156096,156098,156100],{"class":98,"line":99},[96,156097,155766],{"class":106},[96,156099,152],{"class":102},[96,156101,58407],{"class":155},[96,156103,156104,156106,156108],{"class":98,"line":19},[96,156105,155766],{"class":106},[96,156107,9461],{"class":102},[96,156109,54406],{"class":155},[96,156111,156112,156114,156116],{"class":98,"line":1162},[96,156113,155766],{"class":106},[96,156115,150231],{"class":102},[96,156117,47702],{"class":155},[96,156119,156120,156122,156124],{"class":98,"line":1177},[96,156121,155766],{"class":106},[96,156123,137127],{"class":102},[96,156125,120015],{"class":155},[96,156127,156128,156130,156133],{"class":98,"line":1183},[96,156129,155766],{"class":106},[96,156131,156132],{"class":102},"\u002F=",[96,156134,47702],{"class":155},[14,156136,156137],{},"等价关系：",[87,156139,156141],{"className":30357,"code":156140,"language":30359,"meta":18,"style":18},"num += 1\nnum = num + 1\n",[93,156142,156143,156151],{"__ignoreMap":18},[96,156144,156145,156147,156149],{"class":98,"line":99},[96,156146,155766],{"class":106},[96,156148,9461],{"class":102},[96,156150,55678],{"class":155},[96,156152,156153,156155,156157,156160,156162],{"class":98,"line":19},[96,156154,155766],{"class":106},[96,156156,152],{"class":102},[96,156158,156159],{"class":106}," num ",[96,156161,588],{"class":102},[96,156163,55678],{"class":155},[14,156165,156166,156167,100997,156170,28364],{},"Python 没有 ",[93,156168,156169],{},"num++",[93,156171,156172],{},"num--",[67,156174,156176],{"id":156175},"_273-比较运算符","2.7.3 比较运算符",[14,156178,156179],{},"比较运算结果是布尔值。",[87,156181,156183],{"className":30357,"code":156182,"language":30359,"meta":18,"style":18},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[93,156184,156185,156199,156214,156228],{"__ignoreMap":18},[96,156186,156187,156189,156191,156193,156195,156197],{"class":98,"line":99},[96,156188,30394],{"class":155},[96,156190,107],{"class":106},[96,156192,553],{"class":155},[96,156194,26201],{"class":102},[96,156196,2131],{"class":155},[96,156198,113],{"class":106},[96,156200,156201,156203,156205,156207,156210,156212],{"class":98,"line":19},[96,156202,30394],{"class":155},[96,156204,107],{"class":106},[96,156206,553],{"class":155},[96,156208,156209],{"class":102}," >=",[96,156211,2021],{"class":155},[96,156213,113],{"class":106},[96,156215,156216,156218,156220,156222,156224,156226],{"class":98,"line":1162},[96,156217,30394],{"class":155},[96,156219,107],{"class":106},[96,156221,553],{"class":155},[96,156223,101538],{"class":102},[96,156225,2066],{"class":155},[96,156227,113],{"class":106},[96,156229,156230,156232,156234,156236,156239,156241],{"class":98,"line":1177},[96,156231,30394],{"class":155},[96,156233,107],{"class":106},[96,156235,553],{"class":155},[96,156237,156238],{"class":102}," !=",[96,156240,2066],{"class":155},[96,156242,113],{"class":106},[14,156244,156245,156246,156248,156249,28364],{},"注意：判断相等用 ",[93,156247,2932],{},"，赋值用 ",[93,156250,152],{},[87,156252,156254],{"className":30357,"code":156253,"language":30359,"meta":18,"style":18},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[93,156255,156256,156268],{"__ignoreMap":18},[96,156257,156258,156260,156262,156265],{"class":98,"line":99},[96,156259,146525],{"class":106},[96,156261,152],{"class":102},[96,156263,156264],{"class":155}," 18",[96,156266,156267],{"class":165},"       # 赋值\n",[96,156269,156270,156272,156274,156276],{"class":98,"line":19},[96,156271,146525],{"class":106},[96,156273,2932],{"class":102},[96,156275,156264],{"class":155},[96,156277,156278],{"class":165},"      # 判断是否相等\n",[67,156280,156282],{"id":156281},"_274-逻辑运算符","2.7.4 逻辑运算符",[244,156284,156285,156293],{},[247,156286,156287],{},[250,156288,156289,156291],{},[253,156290,155903],{},[253,156292,25848],{},[291,156294,156295,156304,156313],{},[250,156296,156297,156301],{},[296,156298,156299],{},[93,156300,30441],{},[296,156302,156303],{},"并且",[250,156305,156306,156310],{},[296,156307,156308],{},[93,156309,115069],{},[296,156311,156312],{},"或者",[250,156314,156315,156320],{},[296,156316,156317],{},[93,156318,156319],{},"not",[296,156321,156322],{},"取反",[87,156324,156326],{"className":30357,"code":156325,"language":30359,"meta":18,"style":18},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[93,156327,156328,156336,156345,156349,156364,156378],{"__ignoreMap":18},[96,156329,156330,156332,156334],{"class":98,"line":99},[96,156331,146525],{"class":106},[96,156333,152],{"class":102},[96,156335,88044],{"class":155},[96,156337,156338,156341,156343],{"class":98,"line":19},[96,156339,156340],{"class":106},"has_ticket ",[96,156342,152],{"class":102},[96,156344,153578],{"class":155},[96,156346,156347],{"class":98,"line":1162},[96,156348,2383],{"emptyLinePlaceholder":23},[96,156350,156351,156353,156355,156357,156359,156361],{"class":98,"line":1177},[96,156352,30394],{"class":155},[96,156354,155747],{"class":106},[96,156356,1693],{"class":102},[96,156358,156264],{"class":155},[96,156360,120408],{"class":102},[96,156362,156363],{"class":106}," has_ticket)\n",[96,156365,156366,156368,156370,156372,156374,156376],{"class":98,"line":1183},[96,156367,30394],{"class":155},[96,156369,155747],{"class":106},[96,156371,1017],{"class":102},[96,156373,156264],{"class":155},[96,156375,114180],{"class":102},[96,156377,156363],{"class":106},[96,156379,156380,156382,156384,156386],{"class":98,"line":1197},[96,156381,30394],{"class":155},[96,156383,107],{"class":106},[96,156385,156319],{"class":102},[96,156387,156363],{"class":106},[38,156389,156391],{"id":156390},"_28-字符串定义","2.8 字符串定义",[14,156393,156394],{},"三种常见写法：",[87,156396,156398],{"className":30357,"code":156397,"language":30359,"meta":18,"style":18},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[93,156399,156400,156410,156419,156429],{"__ignoreMap":18},[96,156401,156402,156405,156407],{"class":98,"line":99},[96,156403,156404],{"class":106},"name1 ",[96,156406,152],{"class":102},[96,156408,156409],{"class":211}," '小明'\n",[96,156411,156412,156415,156417],{"class":98,"line":19},[96,156413,156414],{"class":106},"name2 ",[96,156416,152],{"class":102},[96,156418,149332],{"class":211},[96,156420,156421,156424,156426],{"class":98,"line":1162},[96,156422,156423],{"class":106},"text ",[96,156425,152],{"class":102},[96,156427,156428],{"class":211}," \"\"\"这是多行字符串\n",[96,156430,156431],{"class":98,"line":1177},[96,156432,156433],{"class":211},"可以换行\"\"\"\n",[14,156435,156436],{},"字符串中包含引号：",[87,156438,156440],{"className":30357,"code":156439,"language":30359,"meta":18,"style":18},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[93,156441,156442,156452,156462],{"__ignoreMap":18},[96,156443,156444,156447,156449],{"class":98,"line":99},[96,156445,156446],{"class":106},"msg ",[96,156448,152],{"class":102},[96,156450,156451],{"class":211}," \"他说:'你好'\"\n",[96,156453,156454,156457,156459],{"class":98,"line":19},[96,156455,156456],{"class":106},"msg2 ",[96,156458,152],{"class":102},[96,156460,156461],{"class":211}," '他说:\"你好\"'\n",[96,156463,156464,156467,156469,156472,156475,156478,156480],{"class":98,"line":1162},[96,156465,156466],{"class":106},"msg3 ",[96,156468,152],{"class":102},[96,156470,156471],{"class":211}," \"他说:",[96,156473,156474],{"class":155},"\\\"",[96,156476,156477],{"class":211},"你好",[96,156479,156474],{"class":155},[96,156481,25112],{"class":211},[14,156483,156484],{},"常见转义字符：",[244,156486,156487,156496],{},[247,156488,156489],{},[250,156490,156491,156494],{},[253,156492,156493],{},"写法",[253,156495,100679],{},[291,156497,156498,156508,156517,156527,156536],{},[250,156499,156500,156505],{},[296,156501,156502],{},[93,156503,156504],{},"\\n",[296,156506,156507],{},"换行",[250,156509,156510,156514],{},[296,156511,156512],{},[93,156513,1213],{},[296,156515,156516],{},"制表符",[250,156518,156519,156524],{},[296,156520,156521],{},[93,156522,156523],{},"\\\\",[296,156525,156526],{},"反斜杠",[250,156528,156529,156533],{},[296,156530,156531],{},[93,156532,156474],{},[296,156534,156535],{},"双引号",[250,156537,156538,156543],{},[296,156539,156540],{},[93,156541,156542],{},"\\'",[296,156544,156545],{},"单引号",[38,156547,156549],{"id":156548},"_29-字符串拼接","2.9 字符串拼接",[87,156551,156553],{"className":30357,"code":156552,"language":30359,"meta":18,"style":18},"name = \"小明\"\nprint(\"你好，\" + name)\n",[93,156554,156555,156563],{"__ignoreMap":18},[96,156556,156557,156559,156561],{"class":98,"line":99},[96,156558,146515],{"class":106},[96,156560,152],{"class":102},[96,156562,149332],{"class":211},[96,156564,156565,156567,156569,156572,156574],{"class":98,"line":19},[96,156566,30394],{"class":155},[96,156568,107],{"class":106},[96,156570,156571],{"class":211},"\"你好，\"",[96,156573,45545],{"class":102},[96,156575,156576],{"class":106}," name)\n",[14,156578,156579],{},"字符串只能和字符串拼接：",[87,156581,156583],{"className":30357,"code":156582,"language":30359,"meta":18,"style":18},"age = 18\nprint(\"年龄:\" + str(age))\n",[93,156584,156585,156593],{"__ignoreMap":18},[96,156586,156587,156589,156591],{"class":98,"line":99},[96,156588,146525],{"class":106},[96,156590,152],{"class":102},[96,156592,146530],{"class":155},[96,156594,156595,156597,156599,156601,156603,156605],{"class":98,"line":19},[96,156596,30394],{"class":155},[96,156598,107],{"class":106},[96,156600,146496],{"class":211},[96,156602,45545],{"class":102},[96,156604,73898],{"class":155},[96,156606,156607],{"class":106},"(age))\n",[14,156609,156610],{},"更推荐使用格式化字符串。",[38,156612,156614],{"id":156613},"_210-字符串格式化","2.10 字符串格式化",[67,156616,156618],{"id":156617},"_2101-百分号格式化","2.10.1 百分号格式化",[87,156620,156622],{"className":30357,"code":156621,"language":30359,"meta":18,"style":18},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[93,156623,156624,156632,156640,156649,156653],{"__ignoreMap":18},[96,156625,156626,156628,156630],{"class":98,"line":99},[96,156627,146515],{"class":106},[96,156629,152],{"class":102},[96,156631,149332],{"class":211},[96,156633,156634,156636,156638],{"class":98,"line":19},[96,156635,146525],{"class":106},[96,156637,152],{"class":102},[96,156639,146530],{"class":155},[96,156641,156642,156644,156646],{"class":98,"line":1162},[96,156643,155337],{"class":106},[96,156645,152],{"class":102},[96,156647,156648],{"class":155}," 95.5\n",[96,156650,156651],{"class":98,"line":1177},[96,156652,2383],{"emptyLinePlaceholder":23},[96,156654,156655,156657,156659,156662,156665,156668,156671,156674,156677,156679,156681],{"class":98,"line":1183},[96,156656,30394],{"class":155},[96,156658,107],{"class":106},[96,156660,156661],{"class":211},"\"姓名:",[96,156663,156664],{"class":155},"%s",[96,156666,156667],{"class":211}," 年龄:",[96,156669,156670],{"class":155},"%d",[96,156672,156673],{"class":211}," 分数:",[96,156675,156676],{"class":155},"%.1f",[96,156678,358],{"class":211},[96,156680,156060],{"class":102},[96,156682,156683],{"class":106}," (name, age, score))\n",[14,156685,156686],{},"常用占位符：",[244,156688,156689,156698],{},[247,156690,156691],{},[250,156692,156693,156696],{},[253,156694,156695],{},"占位符",[253,156697,25848],{},[291,156699,156700,156708,156716],{},[250,156701,156702,156706],{},[296,156703,156704],{},[93,156705,156664],{},[296,156707,155203],{},[250,156709,156710,156714],{},[296,156711,156712],{},[93,156713,156670],{},[296,156715,155181],{},[250,156717,156718,156723],{},[296,156719,156720],{},[93,156721,156722],{},"%f",[296,156724,155192],{},[14,156726,156727],{},"精度控制：",[87,156729,156731],{"className":30357,"code":156730,"language":30359,"meta":18,"style":18},"price = 12.3456\nprint(\"%.2f\" % price)\n",[93,156732,156733,156742],{"__ignoreMap":18},[96,156734,156735,156737,156739],{"class":98,"line":99},[96,156736,146660],{"class":106},[96,156738,152],{"class":102},[96,156740,156741],{"class":155}," 12.3456\n",[96,156743,156744,156746,156748,156750,156753,156755,156757],{"class":98,"line":19},[96,156745,30394],{"class":155},[96,156747,107],{"class":106},[96,156749,358],{"class":211},[96,156751,156752],{"class":155},"%.2f",[96,156754,358],{"class":211},[96,156756,156060],{"class":102},[96,156758,156759],{"class":106}," price)\n",[67,156761,156763],{"id":156762},"_2102-format方法","2.10.2 format方法",[87,156765,156767],{"className":30357,"code":156766,"language":30359,"meta":18,"style":18},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[93,156768,156769,156777,156785,156789,156808,156828],{"__ignoreMap":18},[96,156770,156771,156773,156775],{"class":98,"line":99},[96,156772,146515],{"class":106},[96,156774,152],{"class":102},[96,156776,149332],{"class":211},[96,156778,156779,156781,156783],{"class":98,"line":19},[96,156780,146525],{"class":106},[96,156782,152],{"class":102},[96,156784,146530],{"class":155},[96,156786,156787],{"class":98,"line":1162},[96,156788,2383],{"emptyLinePlaceholder":23},[96,156790,156791,156793,156795,156797,156799,156801,156803,156805],{"class":98,"line":1177},[96,156792,30394],{"class":155},[96,156794,107],{"class":106},[96,156796,156661],{"class":211},[96,156798,32438],{"class":155},[96,156800,156667],{"class":211},[96,156802,32438],{"class":155},[96,156804,358],{"class":211},[96,156806,156807],{"class":106},".format(name, age))\n",[96,156809,156810,156812,156814,156816,156819,156821,156824,156826],{"class":98,"line":1183},[96,156811,30394],{"class":155},[96,156813,107],{"class":106},[96,156815,156661],{"class":211},[96,156817,156818],{"class":155},"{0}",[96,156820,156667],{"class":211},[96,156822,156823],{"class":155},"{1}",[96,156825,358],{"class":211},[96,156827,156807],{"class":106},[96,156829,156830,156832,156834,156836,156839,156841,156844,156846,156849,156851,156853,156856,156858,156860],{"class":98,"line":1197},[96,156831,30394],{"class":155},[96,156833,107],{"class":106},[96,156835,156661],{"class":211},[96,156837,156838],{"class":155},"{name}",[96,156840,156667],{"class":211},[96,156842,156843],{"class":155},"{age}",[96,156845,358],{"class":211},[96,156847,156848],{"class":106},".format(",[96,156850,79789],{"class":5200},[96,156852,152],{"class":102},[96,156854,156855],{"class":106},"name, ",[96,156857,70200],{"class":5200},[96,156859,152],{"class":102},[96,156861,156862],{"class":106},"age))\n",[67,156864,156866],{"id":156865},"_2103-f-string","2.10.3 f-string",[14,156868,156869],{},"推荐写法：",[87,156871,156873],{"className":30357,"code":156872,"language":30359,"meta":18,"style":18},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[93,156874,156875,156883,156891,156899,156903],{"__ignoreMap":18},[96,156876,156877,156879,156881],{"class":98,"line":99},[96,156878,146515],{"class":106},[96,156880,152],{"class":102},[96,156882,149332],{"class":211},[96,156884,156885,156887,156889],{"class":98,"line":19},[96,156886,146525],{"class":106},[96,156888,152],{"class":102},[96,156890,146530],{"class":155},[96,156892,156893,156895,156897],{"class":98,"line":1162},[96,156894,155337],{"class":106},[96,156896,152],{"class":102},[96,156898,156648],{"class":155},[96,156900,156901],{"class":98,"line":1177},[96,156902,2383],{"emptyLinePlaceholder":23},[96,156904,156905,156907,156909,156911,156913,156915,156917,156919,156921,156923,156925,156927,156929,156931,156934,156937,156939,156941],{"class":98,"line":1183},[96,156906,30394],{"class":155},[96,156908,107],{"class":106},[96,156910,159],{"class":102},[96,156912,156661],{"class":211},[96,156914,1003],{"class":155},[96,156916,79789],{"class":106},[96,156918,1053],{"class":155},[96,156920,156667],{"class":211},[96,156922,1003],{"class":155},[96,156924,70200],{"class":106},[96,156926,1053],{"class":155},[96,156928,156673],{"class":211},[96,156930,1003],{"class":155},[96,156932,156933],{"class":106},"score",[96,156935,156936],{"class":102},":.1f",[96,156938,1053],{"class":155},[96,156940,358],{"class":211},[96,156942,113],{"class":106},[14,156944,156945],{},"表达式也可以放进去：",[87,156947,156949],{"className":30357,"code":156948,"language":30359,"meta":18,"style":18},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[93,156950,156951,156959,156967],{"__ignoreMap":18},[96,156952,156953,156955,156957],{"class":98,"line":99},[96,156954,146660],{"class":106},[96,156956,152],{"class":102},[96,156958,146665],{"class":155},[96,156960,156961,156963,156965],{"class":98,"line":19},[96,156962,146670],{"class":106},[96,156964,152],{"class":102},[96,156966,54406],{"class":155},[96,156968,156969,156971,156973,156975,156978,156980,156982,156984,156987,156989,156992],{"class":98,"line":1162},[96,156970,30394],{"class":155},[96,156972,107],{"class":106},[96,156974,159],{"class":102},[96,156976,156977],{"class":211},"\"总价:",[96,156979,1003],{"class":155},[96,156981,146660],{"class":106},[96,156983,562],{"class":102},[96,156985,156986],{"class":106}," count",[96,156988,1053],{"class":155},[96,156990,156991],{"class":211},"元\"",[96,156993,113],{"class":106},[38,156995,156997],{"id":156996},"_211-input输入","2.11 input输入",[14,156999,157000,157003],{},[93,157001,157002],{},"input()"," 会暂停程序，等待用户输入。",[87,157005,157007],{"className":30357,"code":157006,"language":30359,"meta":18,"style":18},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[93,157008,157009,157023],{"__ignoreMap":18},[96,157010,157011,157013,157015,157017,157019,157021],{"class":98,"line":99},[96,157012,146515],{"class":106},[96,157014,152],{"class":102},[96,157016,60584],{"class":155},[96,157018,107],{"class":106},[96,157020,152358],{"class":211},[96,157022,113],{"class":106},[96,157024,157025,157027,157029,157031,157034,157036,157038,157040,157042],{"class":98,"line":19},[96,157026,30394],{"class":155},[96,157028,107],{"class":106},[96,157030,159],{"class":102},[96,157032,157033],{"class":211},"\"你好，",[96,157035,1003],{"class":155},[96,157037,79789],{"class":106},[96,157039,1053],{"class":155},[96,157041,358],{"class":211},[96,157043,113],{"class":106},[14,157045,157046],{},"输入整数：",[87,157048,157050],{"className":30357,"code":157049,"language":30359,"meta":18,"style":18},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[93,157051,157052,157070],{"__ignoreMap":18},[96,157053,157054,157056,157058,157060,157062,157064,157066,157068],{"class":98,"line":99},[96,157055,146525],{"class":106},[96,157057,152],{"class":102},[96,157059,2365],{"class":155},[96,157061,107],{"class":106},[96,157063,53800],{"class":155},[96,157065,107],{"class":106},[96,157067,152373],{"class":211},[96,157069,30476],{"class":106},[96,157071,157072,157074,157076,157078,157081,157083,157085,157087,157090,157092],{"class":98,"line":19},[96,157073,30394],{"class":155},[96,157075,107],{"class":106},[96,157077,159],{"class":102},[96,157079,157080],{"class":211},"\"明年你",[96,157082,1003],{"class":155},[96,157084,146525],{"class":106},[96,157086,588],{"class":102},[96,157088,157089],{"class":155}," 1}",[96,157091,149383],{"class":211},[96,157093,113],{"class":106},[14,157095,157096],{},"输入小数：",[87,157098,157100],{"className":30357,"code":157099,"language":30359,"meta":18,"style":18},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[93,157101,157102,157121],{"__ignoreMap":18},[96,157103,157104,157106,157108,157110,157112,157114,157116,157119],{"class":98,"line":99},[96,157105,155310],{"class":106},[96,157107,152],{"class":102},[96,157109,109776],{"class":155},[96,157111,107],{"class":106},[96,157113,53800],{"class":155},[96,157115,107],{"class":106},[96,157117,157118],{"class":211},"\"请输入身高:\"",[96,157120,30476],{"class":106},[96,157122,157123,157125,157127,157129,157132,157134,157136,157139,157141,157144],{"class":98,"line":19},[96,157124,30394],{"class":155},[96,157126,107],{"class":106},[96,157128,159],{"class":102},[96,157130,157131],{"class":211},"\"身高:",[96,157133,1003],{"class":155},[96,157135,24960],{"class":106},[96,157137,157138],{"class":102},":.2f",[96,157140,1053],{"class":155},[96,157142,157143],{"class":211},"米\"",[96,157145,113],{"class":106},[38,157147,157149],{"id":157148},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[14,157151,123271],{},[50,157153,157154,157157,157160,157163],{},[53,157155,157156],{},"输入商品单价。",[53,157158,157159],{},"输入购买数量。",[53,157161,157162],{},"输入折扣，例如 0.8 表示八折。",[53,157164,157165],{},"输出最终金额，保留两位小数。",[14,157167,10019],{},[87,157169,157171],{"className":30357,"code":157170,"language":30359,"meta":18,"style":18},"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",[93,157172,157173,157192,157211,157231,157235,157255,157259,157282,157303,157325],{"__ignoreMap":18},[96,157174,157175,157177,157179,157181,157183,157185,157187,157190],{"class":98,"line":99},[96,157176,146660],{"class":106},[96,157178,152],{"class":102},[96,157180,109776],{"class":155},[96,157182,107],{"class":106},[96,157184,53800],{"class":155},[96,157186,107],{"class":106},[96,157188,157189],{"class":211},"\"请输入商品单价:\"",[96,157191,30476],{"class":106},[96,157193,157194,157196,157198,157200,157202,157204,157206,157209],{"class":98,"line":19},[96,157195,146670],{"class":106},[96,157197,152],{"class":102},[96,157199,2365],{"class":155},[96,157201,107],{"class":106},[96,157203,53800],{"class":155},[96,157205,107],{"class":106},[96,157207,157208],{"class":211},"\"请输入购买数量:\"",[96,157210,30476],{"class":106},[96,157212,157213,157216,157218,157220,157222,157224,157226,157229],{"class":98,"line":1162},[96,157214,157215],{"class":106},"discount ",[96,157217,152],{"class":102},[96,157219,109776],{"class":155},[96,157221,107],{"class":106},[96,157223,53800],{"class":155},[96,157225,107],{"class":106},[96,157227,157228],{"class":211},"\"请输入折扣:\"",[96,157230,30476],{"class":106},[96,157232,157233],{"class":98,"line":1177},[96,157234,2383],{"emptyLinePlaceholder":23},[96,157236,157237,157240,157242,157245,157247,157250,157252],{"class":98,"line":1183},[96,157238,157239],{"class":106},"total ",[96,157241,152],{"class":102},[96,157243,157244],{"class":106}," price ",[96,157246,562],{"class":102},[96,157248,157249],{"class":106}," count ",[96,157251,562],{"class":102},[96,157253,157254],{"class":106}," discount\n",[96,157256,157257],{"class":98,"line":1197},[96,157258,2383],{"emptyLinePlaceholder":23},[96,157260,157261,157263,157265,157267,157270,157272,157274,157276,157278,157280],{"class":98,"line":1203},[96,157262,30394],{"class":155},[96,157264,107],{"class":106},[96,157266,159],{"class":102},[96,157268,157269],{"class":211},"\"商品单价:",[96,157271,1003],{"class":155},[96,157273,79794],{"class":106},[96,157275,157138],{"class":102},[96,157277,1053],{"class":155},[96,157279,358],{"class":211},[96,157281,113],{"class":106},[96,157283,157284,157286,157288,157290,157293,157295,157297,157299,157301],{"class":98,"line":1294},[96,157285,30394],{"class":155},[96,157287,107],{"class":106},[96,157289,159],{"class":102},[96,157291,157292],{"class":211},"\"购买数量:",[96,157294,1003],{"class":155},[96,157296,84413],{"class":106},[96,157298,1053],{"class":155},[96,157300,358],{"class":211},[96,157302,113],{"class":106},[96,157304,157305,157307,157309,157311,157314,157316,157319,157321,157323],{"class":98,"line":1300},[96,157306,30394],{"class":155},[96,157308,107],{"class":106},[96,157310,159],{"class":102},[96,157312,157313],{"class":211},"\"折扣:",[96,157315,1003],{"class":155},[96,157317,157318],{"class":106},"discount",[96,157320,1053],{"class":155},[96,157322,358],{"class":211},[96,157324,113],{"class":106},[96,157326,157327,157329,157331,157333,157336,157338,157341,157343,157345,157347],{"class":98,"line":1312},[96,157328,30394],{"class":155},[96,157330,107],{"class":106},[96,157332,159],{"class":102},[96,157334,157335],{"class":211},"\"应付金额:",[96,157337,1003],{"class":155},[96,157339,157340],{"class":106},"total",[96,157342,157138],{"class":102},[96,157344,1053],{"class":155},[96,157346,156991],{"class":211},[96,157348,113],{"class":106},[38,157350,157352],{"id":157351},"_213-易错点","2.13 易错点",[50,157354,157355,157360,157366,157374,157377],{},[53,157356,157357,157359],{},[93,157358,157002],{}," 的结果是字符串，做运算前要转换。",[53,157361,157362,157363,28364],{},"字符串拼接时，数字要先 ",[93,157364,157365],{},"str()",[53,157367,157368,157370,157371,157373],{},[93,157369,152],{}," 是赋值，",[93,157372,2932],{}," 是比较。",[53,157375,157376],{},"Python 没有自增自减运算符。",[53,157378,157379],{},"浮点数计算可能有精度误差：",[87,157381,157383],{"className":30357,"code":157382,"language":30359,"meta":18,"style":18},"print(0.1 + 0.2)\n",[93,157384,157385],{"__ignoreMap":18},[96,157386,157387,157389,157391,157393,157395,157398],{"class":98,"line":99},[96,157388,30394],{"class":155},[96,157390,107],{"class":106},[96,157392,86189],{"class":155},[96,157394,45545],{"class":102},[96,157396,157397],{"class":155}," 0.2",[96,157399,113],{"class":106},[14,157401,157402,157403,157406],{},"金额计算如果要求严格，可以后续学习 ",[93,157404,157405],{},"decimal"," 模块。",[38,157408,157410],{"id":157409},"_214-本章练习","2.14 本章练习",[50,157412,157413,157416,157419,157422,157425],{},[53,157414,157415],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[53,157417,157418],{},"输入圆的半径，计算面积，保留两位小数。",[53,157420,157421],{},"输入工资和奖金，计算总收入。",[53,157423,157424],{},"输入摄氏温度，转换为华氏温度。",[53,157426,157427],{},"写一个 BMI 计算程序：",[87,157429,157432],{"className":157430,"code":157431,"language":5171,"meta":18},[5169],"BMI = 体重kg \u002F 身高m ** 2\n",[93,157433,157431],{"__ignoreMap":18},[5110,157435,157436],{},"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":18,"searchDepth":19,"depth":19,"links":157438},[157439,157440,157441,157442,157443,157444,157445,157451,157452,157453,157458,157459,157460,157461],{"id":155000,"depth":19,"text":155001},{"id":155109,"depth":19,"text":155110},{"id":155280,"depth":19,"text":155281},{"id":155357,"depth":19,"text":155358},{"id":50710,"depth":19,"text":50711},{"id":155663,"depth":19,"text":155664},{"id":155889,"depth":19,"text":155890,"children":157446},[157447,157448,157449,157450],{"id":155893,"depth":1162,"text":155894},{"id":156087,"depth":1162,"text":156088},{"id":156175,"depth":1162,"text":156176},{"id":156281,"depth":1162,"text":156282},{"id":156390,"depth":19,"text":156391},{"id":156548,"depth":19,"text":156549},{"id":156613,"depth":19,"text":156614,"children":157454},[157455,157456,157457],{"id":156617,"depth":1162,"text":156618},{"id":156762,"depth":1162,"text":156763},{"id":156865,"depth":1162,"text":156866},{"id":156996,"depth":19,"text":156997},{"id":157148,"depth":19,"text":157149},{"id":157351,"depth":19,"text":157352},{"id":157409,"depth":19,"text":157410},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":154992,"description":23361},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157468,"title":157469,"body":157470,"description":23361,"extension":21,"meta":159106,"navigation":23,"path":159107,"seo":159108,"stem":159109,"__hash__":159110},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157471,"toc":159087},[157472,157475,157479,157482,157497,157500,157528,157532,157582,157584,157600,157603,157629,157632,157636,157703,157706,157722,157726,157729,157847,157850,157857,157906,157912,157916,157919,158032,158035,158039,158043,158046,158096,158100,158103,158153,158157,158160,158198,158202,158205,158251,158254,158289,158293,158298,158301,158347,158349,158416,158420,158426,158537,158546,158550,158552,158563,158565,158731,158735,158737,158751,158753,158967,158971,158990,159007,159010,159056,159060,159084],[10,157473,157469],{"id":157474},"_3-判断语句",[38,157476,157478],{"id":157477},"_31-布尔值","3.1 布尔值",[14,157480,157481],{},"判断语句依赖布尔值：",[87,157483,157485],{"className":30357,"code":157484,"language":30359,"meta":18,"style":18},"True\nFalse\n",[93,157486,157487,157492],{"__ignoreMap":18},[96,157488,157489],{"class":98,"line":99},[96,157490,157491],{"class":155},"True\n",[96,157493,157494],{"class":98,"line":19},[96,157495,157496],{"class":155},"False\n",[14,157498,157499],{},"比较表达式会产生布尔值：",[87,157501,157503],{"className":30357,"code":157502,"language":30359,"meta":18,"style":18},"age = 18\nprint(age >= 18)  # True\n",[93,157504,157505,157513],{"__ignoreMap":18},[96,157506,157507,157509,157511],{"class":98,"line":99},[96,157508,146525],{"class":106},[96,157510,152],{"class":102},[96,157512,146530],{"class":155},[96,157514,157515,157517,157519,157521,157523,157525],{"class":98,"line":19},[96,157516,30394],{"class":155},[96,157518,155747],{"class":106},[96,157520,1693],{"class":102},[96,157522,156264],{"class":155},[96,157524,45787],{"class":106},[96,157526,157527],{"class":165},"# True\n",[38,157529,157531],{"id":157530},"_32-if基础语法","3.2 if基础语法",[87,157533,157535],{"className":30357,"code":157534,"language":30359,"meta":18,"style":18},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[93,157536,157537,157555,157559,157571],{"__ignoreMap":18},[96,157538,157539,157541,157543,157545,157547,157549,157551,157553],{"class":98,"line":99},[96,157540,146525],{"class":106},[96,157542,152],{"class":102},[96,157544,2365],{"class":155},[96,157546,107],{"class":106},[96,157548,53800],{"class":155},[96,157550,107],{"class":106},[96,157552,152373],{"class":211},[96,157554,30476],{"class":106},[96,157556,157557],{"class":98,"line":19},[96,157558,2383],{"emptyLinePlaceholder":23},[96,157560,157561,157563,157565,157567,157569],{"class":98,"line":1162},[96,157562,1514],{"class":102},[96,157564,15691],{"class":106},[96,157566,1693],{"class":102},[96,157568,156264],{"class":155},[96,157570,3722],{"class":106},[96,157572,157573,157575,157577,157580],{"class":98,"line":1177},[96,157574,31278],{"class":155},[96,157576,107],{"class":106},[96,157578,157579],{"class":211},"\"可以进入网吧\"",[96,157581,113],{"class":106},[14,157583,9009],{},[50,157585,157586,157591,157594,157597],{},[53,157587,157588,157590],{},[93,157589,1514],{}," 后面是条件表达式。",[53,157592,157593],{},"条件后面必须写冒号。",[53,157595,157596],{},"条件成立时执行缩进代码块。",[53,157598,157599],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[14,157601,157602],{},"错误示例：",[87,157604,157606],{"className":30357,"code":157605,"language":30359,"meta":18,"style":18},"if age >= 18\n    print(\"可以进入\")\n",[93,157607,157608,157618],{"__ignoreMap":18},[96,157609,157610,157612,157614,157616],{"class":98,"line":99},[96,157611,1514],{"class":102},[96,157613,15691],{"class":106},[96,157615,1693],{"class":102},[96,157617,146530],{"class":155},[96,157619,157620,157622,157624,157627],{"class":98,"line":19},[96,157621,31278],{"class":155},[96,157623,107],{"class":106},[96,157625,157626],{"class":211},"\"可以进入\"",[96,157628,113],{"class":106},[14,157630,157631],{},"缺少冒号。",[38,157633,157635],{"id":157634},"_33-if-else","3.3 if else",[87,157637,157639],{"className":30357,"code":157638,"language":30359,"meta":18,"style":18},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[93,157640,157641,157659,157663,157675,157686,157692],{"__ignoreMap":18},[96,157642,157643,157645,157647,157649,157651,157653,157655,157657],{"class":98,"line":99},[96,157644,146525],{"class":106},[96,157646,152],{"class":102},[96,157648,2365],{"class":155},[96,157650,107],{"class":106},[96,157652,53800],{"class":155},[96,157654,107],{"class":106},[96,157656,152373],{"class":211},[96,157658,30476],{"class":106},[96,157660,157661],{"class":98,"line":19},[96,157662,2383],{"emptyLinePlaceholder":23},[96,157664,157665,157667,157669,157671,157673],{"class":98,"line":1162},[96,157666,1514],{"class":102},[96,157668,15691],{"class":106},[96,157670,1693],{"class":102},[96,157672,156264],{"class":155},[96,157674,3722],{"class":106},[96,157676,157677,157679,157681,157684],{"class":98,"line":1177},[96,157678,31278],{"class":155},[96,157680,107],{"class":106},[96,157682,157683],{"class":211},"\"成年人\"",[96,157685,113],{"class":106},[96,157687,157688,157690],{"class":98,"line":1183},[96,157689,1684],{"class":102},[96,157691,3722],{"class":106},[96,157693,157694,157696,157698,157701],{"class":98,"line":1197},[96,157695,31278],{"class":155},[96,157697,107],{"class":106},[96,157699,157700],{"class":211},"\"未成年人\"",[96,157702,113],{"class":106},[14,157704,157705],{},"执行逻辑：",[50,157707,157708,157714,157719],{},[53,157709,157710,157711,157713],{},"条件成立，执行 ",[93,157712,1514],{}," 代码块。",[53,157715,157716,157717,157713],{},"条件不成立，执行 ",[93,157718,1684],{},[53,157720,157721],{},"两个代码块只会执行其中一个。",[38,157723,157725],{"id":157724},"_34-if-elif-else","3.4 if elif else",[14,157727,157728],{},"多条件判断：",[87,157730,157732],{"className":30357,"code":157731,"language":30359,"meta":18,"style":18},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[93,157733,157734,157752,157756,157770,157781,157795,157806,157819,157830,157836],{"__ignoreMap":18},[96,157735,157736,157738,157740,157742,157744,157746,157748,157750],{"class":98,"line":99},[96,157737,155337],{"class":106},[96,157739,152],{"class":102},[96,157741,2365],{"class":155},[96,157743,107],{"class":106},[96,157745,53800],{"class":155},[96,157747,107],{"class":106},[96,157749,152388],{"class":211},[96,157751,30476],{"class":106},[96,157753,157754],{"class":98,"line":19},[96,157755,2383],{"emptyLinePlaceholder":23},[96,157757,157758,157760,157763,157765,157768],{"class":98,"line":1162},[96,157759,1514],{"class":102},[96,157761,157762],{"class":106}," score ",[96,157764,1693],{"class":102},[96,157766,157767],{"class":155}," 90",[96,157769,3722],{"class":106},[96,157771,157772,157774,157776,157779],{"class":98,"line":1177},[96,157773,31278],{"class":155},[96,157775,107],{"class":106},[96,157777,157778],{"class":211},"\"优秀\"",[96,157780,113],{"class":106},[96,157782,157783,157786,157788,157790,157793],{"class":98,"line":1183},[96,157784,157785],{"class":102},"elif",[96,157787,157762],{"class":106},[96,157789,1693],{"class":102},[96,157791,157792],{"class":155}," 80",[96,157794,3722],{"class":106},[96,157796,157797,157799,157801,157804],{"class":98,"line":1197},[96,157798,31278],{"class":155},[96,157800,107],{"class":106},[96,157802,157803],{"class":211},"\"良好\"",[96,157805,113],{"class":106},[96,157807,157808,157810,157812,157814,157817],{"class":98,"line":1203},[96,157809,157785],{"class":102},[96,157811,157762],{"class":106},[96,157813,1693],{"class":102},[96,157815,157816],{"class":155}," 60",[96,157818,3722],{"class":106},[96,157820,157821,157823,157825,157828],{"class":98,"line":1294},[96,157822,31278],{"class":155},[96,157824,107],{"class":106},[96,157826,157827],{"class":211},"\"及格\"",[96,157829,113],{"class":106},[96,157831,157832,157834],{"class":98,"line":1300},[96,157833,1684],{"class":102},[96,157835,3722],{"class":106},[96,157837,157838,157840,157842,157845],{"class":98,"line":1312},[96,157839,31278],{"class":155},[96,157841,107],{"class":106},[96,157843,157844],{"class":211},"\"不及格\"",[96,157846,113],{"class":106},[14,157848,157849],{},"注意判断顺序很重要。",[14,157851,157852,157853,157856],{},"如果把 ",[93,157854,157855],{},"score >= 60"," 放在最前面：",[87,157858,157860],{"className":30357,"code":157859,"language":30359,"meta":18,"style":18},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[93,157861,157862,157874,157884,157896],{"__ignoreMap":18},[96,157863,157864,157866,157868,157870,157872],{"class":98,"line":99},[96,157865,1514],{"class":102},[96,157867,157762],{"class":106},[96,157869,1693],{"class":102},[96,157871,157816],{"class":155},[96,157873,3722],{"class":106},[96,157875,157876,157878,157880,157882],{"class":98,"line":19},[96,157877,31278],{"class":155},[96,157879,107],{"class":106},[96,157881,157827],{"class":211},[96,157883,113],{"class":106},[96,157885,157886,157888,157890,157892,157894],{"class":98,"line":1162},[96,157887,157785],{"class":102},[96,157889,157762],{"class":106},[96,157891,1693],{"class":102},[96,157893,157767],{"class":155},[96,157895,3722],{"class":106},[96,157897,157898,157900,157902,157904],{"class":98,"line":1177},[96,157899,31278],{"class":155},[96,157901,107],{"class":106},[96,157903,157778],{"class":211},[96,157905,113],{"class":106},[14,157907,157908,157909,157911],{},"成绩 95 会先满足 ",[93,157910,157855],{},"，后面的优秀分支就不会执行。",[38,157913,157915],{"id":157914},"_35-判断语句嵌套","3.5 判断语句嵌套",[14,157917,157918],{},"嵌套判断就是在一个判断内部再写判断。",[87,157920,157922],{"className":30357,"code":157921,"language":30359,"meta":18,"style":18},"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",[93,157923,157924,157942,157957,157961,157973,157987,157997,158004,158015,158021],{"__ignoreMap":18},[96,157925,157926,157928,157930,157932,157934,157936,157938,157940],{"class":98,"line":99},[96,157927,146525],{"class":106},[96,157929,152],{"class":102},[96,157931,2365],{"class":155},[96,157933,107],{"class":106},[96,157935,53800],{"class":155},[96,157937,107],{"class":106},[96,157939,152373],{"class":211},[96,157941,30476],{"class":106},[96,157943,157944,157946,157948,157950,157952,157955],{"class":98,"line":19},[96,157945,156340],{"class":106},[96,157947,152],{"class":102},[96,157949,60584],{"class":155},[96,157951,107],{"class":106},[96,157953,157954],{"class":211},"\"是否有票(y\u002Fn):\"",[96,157956,113],{"class":106},[96,157958,157959],{"class":98,"line":1162},[96,157960,2383],{"emptyLinePlaceholder":23},[96,157962,157963,157965,157967,157969,157971],{"class":98,"line":1177},[96,157964,1514],{"class":102},[96,157966,15691],{"class":106},[96,157968,1693],{"class":102},[96,157970,156264],{"class":155},[96,157972,3722],{"class":106},[96,157974,157975,157977,157980,157982,157985],{"class":98,"line":1183},[96,157976,3084],{"class":102},[96,157978,157979],{"class":106}," has_ticket ",[96,157981,2932],{"class":102},[96,157983,157984],{"class":211}," \"y\"",[96,157986,3722],{"class":106},[96,157988,157989,157991,157993,157995],{"class":98,"line":1197},[96,157990,32430],{"class":155},[96,157992,107],{"class":106},[96,157994,157626],{"class":211},[96,157996,113],{"class":106},[96,157998,157999,158002],{"class":98,"line":1203},[96,158000,158001],{"class":102},"    else",[96,158003,3722],{"class":106},[96,158005,158006,158008,158010,158013],{"class":98,"line":1294},[96,158007,32430],{"class":155},[96,158009,107],{"class":106},[96,158011,158012],{"class":211},"\"请先买票\"",[96,158014,113],{"class":106},[96,158016,158017,158019],{"class":98,"line":1300},[96,158018,1684],{"class":102},[96,158020,3722],{"class":106},[96,158022,158023,158025,158027,158030],{"class":98,"line":1312},[96,158024,31278],{"class":155},[96,158026,107],{"class":106},[96,158028,158029],{"class":211},"\"未成年人禁止进入\"",[96,158031,113],{"class":106},[14,158033,158034],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[38,158036,158038],{"id":158037},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[67,158040,158042],{"id":158041},"_361-and","3.6.1 and",[14,158044,158045],{},"两个条件都成立才成立。",[87,158047,158049],{"className":30357,"code":158048,"language":30359,"meta":18,"style":18},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[93,158050,158051,158059,158067,158071,158086],{"__ignoreMap":18},[96,158052,158053,158055,158057],{"class":98,"line":99},[96,158054,146525],{"class":106},[96,158056,152],{"class":102},[96,158058,88044],{"class":155},[96,158060,158061,158063,158065],{"class":98,"line":19},[96,158062,156340],{"class":106},[96,158064,152],{"class":102},[96,158066,153578],{"class":155},[96,158068,158069],{"class":98,"line":1162},[96,158070,2383],{"emptyLinePlaceholder":23},[96,158072,158073,158075,158077,158079,158081,158083],{"class":98,"line":1177},[96,158074,1514],{"class":102},[96,158076,15691],{"class":106},[96,158078,1693],{"class":102},[96,158080,156264],{"class":155},[96,158082,120408],{"class":102},[96,158084,158085],{"class":106}," has_ticket:\n",[96,158087,158088,158090,158092,158094],{"class":98,"line":1183},[96,158089,31278],{"class":155},[96,158091,107],{"class":106},[96,158093,157626],{"class":211},[96,158095,113],{"class":106},[67,158097,158099],{"id":158098},"_362-or","3.6.2 or",[14,158101,158102],{},"只要一个条件成立就成立。",[87,158104,158106],{"className":30357,"code":158105,"language":30359,"meta":18,"style":18},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[93,158107,158108,158117,158126,158130,158142],{"__ignoreMap":18},[96,158109,158110,158113,158115],{"class":98,"line":99},[96,158111,158112],{"class":106},"is_vip ",[96,158114,152],{"class":102},[96,158116,125786],{"class":155},[96,158118,158119,158122,158124],{"class":98,"line":19},[96,158120,158121],{"class":106},"coupon ",[96,158123,152],{"class":102},[96,158125,153578],{"class":155},[96,158127,158128],{"class":98,"line":1162},[96,158129,2383],{"emptyLinePlaceholder":23},[96,158131,158132,158134,158137,158139],{"class":98,"line":1177},[96,158133,1514],{"class":102},[96,158135,158136],{"class":106}," is_vip ",[96,158138,115069],{"class":102},[96,158140,158141],{"class":106}," coupon:\n",[96,158143,158144,158146,158148,158151],{"class":98,"line":1183},[96,158145,31278],{"class":155},[96,158147,107],{"class":106},[96,158149,158150],{"class":211},"\"可以享受优惠\"",[96,158152,113],{"class":106},[67,158154,158156],{"id":158155},"_363-not","3.6.3 not",[14,158158,158159],{},"取反。",[87,158161,158163],{"className":30357,"code":158162,"language":30359,"meta":18,"style":18},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[93,158164,158165,158174,158178,158187],{"__ignoreMap":18},[96,158166,158167,158170,158172],{"class":98,"line":99},[96,158168,158169],{"class":106},"is_closed ",[96,158171,152],{"class":102},[96,158173,125786],{"class":155},[96,158175,158176],{"class":98,"line":19},[96,158177,2383],{"emptyLinePlaceholder":23},[96,158179,158180,158182,158184],{"class":98,"line":1162},[96,158181,1514],{"class":102},[96,158183,38909],{"class":102},[96,158185,158186],{"class":106}," is_closed:\n",[96,158188,158189,158191,158193,158196],{"class":98,"line":1177},[96,158190,31278],{"class":155},[96,158192,107],{"class":106},[96,158194,158195],{"class":211},"\"店铺营业中\"",[96,158197,113],{"class":106},[38,158199,158201],{"id":158200},"_37-链式比较","3.7 链式比较",[14,158203,158204],{},"Python 支持链式比较：",[87,158206,158208],{"className":30357,"code":158207,"language":30359,"meta":18,"style":18},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[93,158209,158210,158219,158223,158240],{"__ignoreMap":18},[96,158211,158212,158214,158216],{"class":98,"line":99},[96,158213,155337],{"class":106},[96,158215,152],{"class":102},[96,158217,158218],{"class":155}," 85\n",[96,158220,158221],{"class":98,"line":19},[96,158222,2383],{"emptyLinePlaceholder":23},[96,158224,158225,158227,158229,158232,158234,158236,158238],{"class":98,"line":1162},[96,158226,1514],{"class":102},[96,158228,4076],{"class":155},[96,158230,158231],{"class":102}," \u003C=",[96,158233,157762],{"class":106},[96,158235,1571],{"class":102},[96,158237,5738],{"class":155},[96,158239,3722],{"class":106},[96,158241,158242,158244,158246,158249],{"class":98,"line":1177},[96,158243,31278],{"class":155},[96,158245,107],{"class":106},[96,158247,158248],{"class":211},"\"成绩合法\"",[96,158250,113],{"class":106},[14,158252,158253],{},"等价于：",[87,158255,158257],{"className":30357,"code":158256,"language":30359,"meta":18,"style":18},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[93,158258,158259,158279],{"__ignoreMap":18},[96,158260,158261,158263,158265,158267,158269,158271,158273,158275,158277],{"class":98,"line":99},[96,158262,1514],{"class":102},[96,158264,157762],{"class":106},[96,158266,1693],{"class":102},[96,158268,4076],{"class":155},[96,158270,120408],{"class":102},[96,158272,157762],{"class":106},[96,158274,1571],{"class":102},[96,158276,5738],{"class":155},[96,158278,3722],{"class":106},[96,158280,158281,158283,158285,158287],{"class":98,"line":19},[96,158282,31278],{"class":155},[96,158284,107],{"class":106},[96,158286,158248],{"class":211},[96,158288,113],{"class":106},[38,158290,158292],{"id":158291},"_38-真值和假值","3.8 真值和假值",[14,158294,116446,158295,158297],{},[93,158296,1514],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[14,158299,158300],{},"假值：",[87,158302,158304],{"className":30357,"code":158303,"language":30359,"meta":18,"style":18},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[93,158305,158306,158310,158315,158319,158323,158328,158332,158336,158341],{"__ignoreMap":18},[96,158307,158308],{"class":98,"line":99},[96,158309,157496],{"class":155},[96,158311,158312],{"class":98,"line":19},[96,158313,158314],{"class":155},"None\n",[96,158316,158317],{"class":98,"line":1162},[96,158318,3068],{"class":155},[96,158320,158321],{"class":98,"line":1177},[96,158322,32321],{"class":155},[96,158324,158325],{"class":98,"line":1183},[96,158326,158327],{"class":211},"\"\"\n",[96,158329,158330],{"class":98,"line":1197},[96,158331,32336],{"class":106},[96,158333,158334],{"class":98,"line":1203},[96,158335,1959],{"class":106},[96,158337,158338],{"class":98,"line":1294},[96,158339,158340],{"class":106},"{}\n",[96,158342,158343,158345],{"class":98,"line":1300},[96,158344,155269],{"class":155},[96,158346,1959],{"class":106},[14,158348,15119],{},[87,158350,158352],{"className":30357,"code":158351,"language":30359,"meta":18,"style":18},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[93,158353,158354,158368,158372,158379,158399,158405],{"__ignoreMap":18},[96,158355,158356,158358,158360,158362,158364,158366],{"class":98,"line":99},[96,158357,146515],{"class":106},[96,158359,152],{"class":102},[96,158361,60584],{"class":155},[96,158363,107],{"class":106},[96,158365,152358],{"class":211},[96,158367,113],{"class":106},[96,158369,158370],{"class":98,"line":19},[96,158371,2383],{"emptyLinePlaceholder":23},[96,158373,158374,158376],{"class":98,"line":1162},[96,158375,1514],{"class":102},[96,158377,158378],{"class":106}," name:\n",[96,158380,158381,158383,158385,158387,158389,158391,158393,158395,158397],{"class":98,"line":1177},[96,158382,31278],{"class":155},[96,158384,107],{"class":106},[96,158386,159],{"class":102},[96,158388,157033],{"class":211},[96,158390,1003],{"class":155},[96,158392,79789],{"class":106},[96,158394,1053],{"class":155},[96,158396,358],{"class":211},[96,158398,113],{"class":106},[96,158400,158401,158403],{"class":98,"line":1183},[96,158402,1684],{"class":102},[96,158404,3722],{"class":106},[96,158406,158407,158409,158411,158414],{"class":98,"line":1197},[96,158408,31278],{"class":155},[96,158410,107],{"class":106},[96,158412,158413],{"class":211},"\"姓名不能为空\"",[96,158415,113],{"class":106},[38,158417,158419],{"id":158418},"_39-match语句","3.9 match语句",[14,158421,158422,158423,158425],{},"Python 3.10 开始支持 ",[93,158424,71244],{},"。它适合处理固定选项。",[87,158427,158429],{"className":30357,"code":158428,"language":30359,"meta":18,"style":18},"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",[93,158430,158431,158447,158451,158458,158468,158479,158488,158499,158508,158519,158526],{"__ignoreMap":18},[96,158432,158433,158436,158438,158440,158442,158445],{"class":98,"line":99},[96,158434,158435],{"class":106},"command ",[96,158437,152],{"class":102},[96,158439,60584],{"class":155},[96,158441,107],{"class":106},[96,158443,158444],{"class":211},"\"请输入命令:\"",[96,158446,113],{"class":106},[96,158448,158449],{"class":98,"line":19},[96,158450,2383],{"emptyLinePlaceholder":23},[96,158452,158453,158455],{"class":98,"line":1162},[96,158454,71244],{"class":102},[96,158456,158457],{"class":106}," command:\n",[96,158459,158460,158463,158466],{"class":98,"line":1177},[96,158461,158462],{"class":102},"    case",[96,158464,158465],{"class":211}," \"start\"",[96,158467,3722],{"class":106},[96,158469,158470,158472,158474,158477],{"class":98,"line":1183},[96,158471,32430],{"class":155},[96,158473,107],{"class":106},[96,158475,158476],{"class":211},"\"启动\"",[96,158478,113],{"class":106},[96,158480,158481,158483,158486],{"class":98,"line":1197},[96,158482,158462],{"class":102},[96,158484,158485],{"class":211}," \"stop\"",[96,158487,3722],{"class":106},[96,158489,158490,158492,158494,158497],{"class":98,"line":1203},[96,158491,32430],{"class":155},[96,158493,107],{"class":106},[96,158495,158496],{"class":211},"\"停止\"",[96,158498,113],{"class":106},[96,158500,158501,158503,158506],{"class":98,"line":1294},[96,158502,158462],{"class":102},[96,158504,158505],{"class":211}," \"restart\"",[96,158507,3722],{"class":106},[96,158509,158510,158512,158514,158517],{"class":98,"line":1300},[96,158511,32430],{"class":155},[96,158513,107],{"class":106},[96,158515,158516],{"class":211},"\"重启\"",[96,158518,113],{"class":106},[96,158520,158521,158523],{"class":98,"line":1312},[96,158522,158462],{"class":102},[96,158524,158525],{"class":106}," _:\n",[96,158527,158528,158530,158532,158535],{"class":98,"line":1595},[96,158529,32430],{"class":155},[96,158531,107],{"class":106},[96,158533,158534],{"class":211},"\"未知命令\"",[96,158536,113],{"class":106},[14,158538,158539,158540,158542,158543,158545],{},"入门阶段掌握 ",[93,158541,154637],{}," 更重要，",[93,158544,71244],{}," 可以作为补充。",[38,158547,158549],{"id":158548},"_310-小案例成绩等级","3.10 小案例：成绩等级",[14,158551,123271],{},[50,158553,158554,158557,158560],{},[53,158555,158556],{},"输入成绩。",[53,158558,158559],{},"判断成绩是否合法。",[53,158561,158562],{},"输出等级。",[14,158564,10019],{},[87,158566,158568],{"className":30357,"code":158567,"language":30359,"meta":18,"style":18},"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",[93,158569,158570,158588,158592,158610,158621,158633,158644,158656,158667,158680,158691,158703,158714,158720],{"__ignoreMap":18},[96,158571,158572,158574,158576,158578,158580,158582,158584,158586],{"class":98,"line":99},[96,158573,155337],{"class":106},[96,158575,152],{"class":102},[96,158577,109776],{"class":155},[96,158579,107],{"class":106},[96,158581,53800],{"class":155},[96,158583,107],{"class":106},[96,158585,152388],{"class":211},[96,158587,30476],{"class":106},[96,158589,158590],{"class":98,"line":19},[96,158591,2383],{"emptyLinePlaceholder":23},[96,158593,158594,158596,158598,158600,158602,158604,158606,158608],{"class":98,"line":1162},[96,158595,1514],{"class":102},[96,158597,38909],{"class":102},[96,158599,4076],{"class":155},[96,158601,158231],{"class":102},[96,158603,157762],{"class":106},[96,158605,1571],{"class":102},[96,158607,5738],{"class":155},[96,158609,3722],{"class":106},[96,158611,158612,158614,158616,158619],{"class":98,"line":1177},[96,158613,31278],{"class":155},[96,158615,107],{"class":106},[96,158617,158618],{"class":211},"\"成绩不合法\"",[96,158620,113],{"class":106},[96,158622,158623,158625,158627,158629,158631],{"class":98,"line":1183},[96,158624,157785],{"class":102},[96,158626,157762],{"class":106},[96,158628,1693],{"class":102},[96,158630,157767],{"class":155},[96,158632,3722],{"class":106},[96,158634,158635,158637,158639,158642],{"class":98,"line":1197},[96,158636,31278],{"class":155},[96,158638,107],{"class":106},[96,158640,158641],{"class":211},"\"等级:A\"",[96,158643,113],{"class":106},[96,158645,158646,158648,158650,158652,158654],{"class":98,"line":1203},[96,158647,157785],{"class":102},[96,158649,157762],{"class":106},[96,158651,1693],{"class":102},[96,158653,157792],{"class":155},[96,158655,3722],{"class":106},[96,158657,158658,158660,158662,158665],{"class":98,"line":1294},[96,158659,31278],{"class":155},[96,158661,107],{"class":106},[96,158663,158664],{"class":211},"\"等级:B\"",[96,158666,113],{"class":106},[96,158668,158669,158671,158673,158675,158678],{"class":98,"line":1300},[96,158670,157785],{"class":102},[96,158672,157762],{"class":106},[96,158674,1693],{"class":102},[96,158676,158677],{"class":155}," 70",[96,158679,3722],{"class":106},[96,158681,158682,158684,158686,158689],{"class":98,"line":1312},[96,158683,31278],{"class":155},[96,158685,107],{"class":106},[96,158687,158688],{"class":211},"\"等级:C\"",[96,158690,113],{"class":106},[96,158692,158693,158695,158697,158699,158701],{"class":98,"line":1595},[96,158694,157785],{"class":102},[96,158696,157762],{"class":106},[96,158698,1693],{"class":102},[96,158700,157816],{"class":155},[96,158702,3722],{"class":106},[96,158704,158705,158707,158709,158712],{"class":98,"line":1600},[96,158706,31278],{"class":155},[96,158708,107],{"class":106},[96,158710,158711],{"class":211},"\"等级:D\"",[96,158713,113],{"class":106},[96,158715,158716,158718],{"class":98,"line":1606},[96,158717,1684],{"class":102},[96,158719,3722],{"class":106},[96,158721,158722,158724,158726,158729],{"class":98,"line":1611},[96,158723,31278],{"class":155},[96,158725,107],{"class":106},[96,158727,158728],{"class":211},"\"等级:E\"",[96,158730,113],{"class":106},[38,158732,158734],{"id":158733},"_311-小案例会员折扣","3.11 小案例：会员折扣",[14,158736,123271],{},[50,158738,158739,158742,158745,158748],{},[53,158740,158741],{},"输入消费金额。",[53,158743,158744],{},"输入会员等级，普通、银卡、金卡。",[53,158746,158747],{},"普通不打折，银卡 9 折，金卡 8 折。",[53,158749,158750],{},"满 500 再减 50。",[14,158752,10019],{},[87,158754,158756],{"className":30357,"code":158755,"language":30359,"meta":18,"style":18},"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",[93,158757,158758,158778,158794,158798,158806,158810,158824,158834,158847,158856,158869,158877,158883,158894,158898,158912,158916,158930,158940,158944],{"__ignoreMap":18},[96,158759,158760,158763,158765,158767,158769,158771,158773,158776],{"class":98,"line":99},[96,158761,158762],{"class":106},"amount ",[96,158764,152],{"class":102},[96,158766,109776],{"class":155},[96,158768,107],{"class":106},[96,158770,53800],{"class":155},[96,158772,107],{"class":106},[96,158774,158775],{"class":211},"\"请输入消费金额:\"",[96,158777,30476],{"class":106},[96,158779,158780,158783,158785,158787,158789,158792],{"class":98,"line":19},[96,158781,158782],{"class":106},"level ",[96,158784,152],{"class":102},[96,158786,60584],{"class":155},[96,158788,107],{"class":106},[96,158790,158791],{"class":211},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[96,158793,113],{"class":106},[96,158795,158796],{"class":98,"line":1162},[96,158797,2383],{"emptyLinePlaceholder":23},[96,158799,158800,158802,158804],{"class":98,"line":1177},[96,158801,157215],{"class":106},[96,158803,152],{"class":102},[96,158805,55678],{"class":155},[96,158807,158808],{"class":98,"line":1183},[96,158809,2383],{"emptyLinePlaceholder":23},[96,158811,158812,158814,158817,158819,158822],{"class":98,"line":1197},[96,158813,1514],{"class":102},[96,158815,158816],{"class":106}," level ",[96,158818,2932],{"class":102},[96,158820,158821],{"class":211}," \"银卡\"",[96,158823,3722],{"class":106},[96,158825,158826,158829,158831],{"class":98,"line":1203},[96,158827,158828],{"class":106},"    discount ",[96,158830,152],{"class":102},[96,158832,158833],{"class":155}," 0.9\n",[96,158835,158836,158838,158840,158842,158845],{"class":98,"line":1294},[96,158837,157785],{"class":102},[96,158839,158816],{"class":106},[96,158841,2932],{"class":102},[96,158843,158844],{"class":211}," \"金卡\"",[96,158846,3722],{"class":106},[96,158848,158849,158851,158853],{"class":98,"line":1300},[96,158850,158828],{"class":106},[96,158852,152],{"class":102},[96,158854,158855],{"class":155}," 0.8\n",[96,158857,158858,158860,158862,158864,158867],{"class":98,"line":1312},[96,158859,157785],{"class":102},[96,158861,158816],{"class":106},[96,158863,2932],{"class":102},[96,158865,158866],{"class":211}," \"普通\"",[96,158868,3722],{"class":106},[96,158870,158871,158873,158875],{"class":98,"line":1595},[96,158872,158828],{"class":106},[96,158874,152],{"class":102},[96,158876,55678],{"class":155},[96,158878,158879,158881],{"class":98,"line":1600},[96,158880,1684],{"class":102},[96,158882,3722],{"class":106},[96,158884,158885,158887,158889,158892],{"class":98,"line":1606},[96,158886,31278],{"class":155},[96,158888,107],{"class":106},[96,158890,158891],{"class":211},"\"会员等级输入错误，按普通会员计算\"",[96,158893,113],{"class":106},[96,158895,158896],{"class":98,"line":1611},[96,158897,2383],{"emptyLinePlaceholder":23},[96,158899,158900,158903,158905,158908,158910],{"class":98,"line":1625},[96,158901,158902],{"class":106},"pay ",[96,158904,152],{"class":102},[96,158906,158907],{"class":106}," amount ",[96,158909,562],{"class":102},[96,158911,157254],{"class":106},[96,158913,158914],{"class":98,"line":1630},[96,158915,2383],{"emptyLinePlaceholder":23},[96,158917,158918,158920,158923,158925,158928],{"class":98,"line":1636},[96,158919,1514],{"class":102},[96,158921,158922],{"class":106}," pay ",[96,158924,1693],{"class":102},[96,158926,158927],{"class":155}," 500",[96,158929,3722],{"class":106},[96,158931,158932,158935,158937],{"class":98,"line":1657},[96,158933,158934],{"class":106},"    pay ",[96,158936,150231],{"class":102},[96,158938,158939],{"class":155}," 50\n",[96,158941,158942],{"class":98,"line":1662},[96,158943,2383],{"emptyLinePlaceholder":23},[96,158945,158946,158948,158950,158952,158954,158956,158959,158961,158963,158965],{"class":98,"line":1676},[96,158947,30394],{"class":155},[96,158949,107],{"class":106},[96,158951,159],{"class":102},[96,158953,157335],{"class":211},[96,158955,1003],{"class":155},[96,158957,158958],{"class":106},"pay",[96,158960,157138],{"class":102},[96,158962,1053],{"class":155},[96,158964,156991],{"class":211},[96,158966,113],{"class":106},[38,158968,158970],{"id":158969},"_312-易错点","3.12 易错点",[50,158972,158973,158976,158979,158982,158987],{},[53,158974,158975],{},"冒号不能漏。",[53,158977,158978],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[53,158980,158981],{},"多分支判断要注意顺序。",[53,158983,158984,158985,28364],{},"判断相等用 ",[93,158986,2932],{},[53,158988,158989],{},"字符串比较区分大小写：",[87,158991,158993],{"className":30357,"code":158992,"language":30359,"meta":18,"style":18},"\"Y\" == \"y\"  # False\n",[93,158994,158995],{"__ignoreMap":18},[96,158996,158997,159000,159002,159004],{"class":98,"line":99},[96,158998,158999],{"class":211},"\"Y\"",[96,159001,101538],{"class":102},[96,159003,157984],{"class":211},[96,159005,159006],{"class":165},"  # False\n",[14,159008,159009],{},"可转换后再判断：",[87,159011,159013],{"className":30357,"code":159012,"language":30359,"meta":18,"style":18},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[93,159014,159015,159032,159045],{"__ignoreMap":18},[96,159016,159017,159020,159022,159024,159026,159029],{"class":98,"line":99},[96,159018,159019],{"class":106},"answer ",[96,159021,152],{"class":102},[96,159023,60584],{"class":155},[96,159025,107],{"class":106},[96,159027,159028],{"class":211},"\"是否继续(y\u002Fn):\"",[96,159030,159031],{"class":106},").lower()\n",[96,159033,159034,159036,159039,159041,159043],{"class":98,"line":19},[96,159035,1514],{"class":102},[96,159037,159038],{"class":106}," answer ",[96,159040,2932],{"class":102},[96,159042,157984],{"class":211},[96,159044,3722],{"class":106},[96,159046,159047,159049,159051,159054],{"class":98,"line":1162},[96,159048,31278],{"class":155},[96,159050,107],{"class":106},[96,159052,159053],{"class":211},"\"继续\"",[96,159055,113],{"class":106},[38,159057,159059],{"id":159058},"_313-本章练习","3.13 本章练习",[50,159061,159062,159065,159068,159071,159081],{},[53,159063,159064],{},"输入年龄，判断是否成年。",[53,159066,159067],{},"输入年份，判断是否为闰年。",[53,159069,159070],{},"输入三个数字，输出最大值。",[53,159072,159073,159074,159077,159078,159080],{},"写登录判断：用户名是 ",[93,159075,159076],{},"admin"," 且密码是 ",[93,159079,15068],{}," 才登录成功。",[53,159082,159083],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[5110,159085,159086],{},"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":18,"searchDepth":19,"depth":19,"links":159088},[159089,159090,159091,159092,159093,159094,159099,159100,159101,159102,159103,159104,159105],{"id":157477,"depth":19,"text":157478},{"id":157530,"depth":19,"text":157531},{"id":157634,"depth":19,"text":157635},{"id":157724,"depth":19,"text":157725},{"id":157914,"depth":19,"text":157915},{"id":158037,"depth":19,"text":158038,"children":159095},[159096,159097,159098],{"id":158041,"depth":1162,"text":158042},{"id":158098,"depth":1162,"text":158099},{"id":158155,"depth":1162,"text":158156},{"id":158200,"depth":19,"text":158201},{"id":158291,"depth":19,"text":158292},{"id":158418,"depth":19,"text":158419},{"id":158548,"depth":19,"text":158549},{"id":158733,"depth":19,"text":158734},{"id":158969,"depth":19,"text":158970},{"id":159058,"depth":19,"text":159059},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157469,"description":23361},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159112,"title":159113,"body":159114,"description":23361,"extension":21,"meta":160883,"navigation":23,"path":160884,"seo":160885,"stem":160886,"__hash__":160887},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159115,"toc":160863},[159116,159119,159123,159129,159132,159149,159153,159155,159172,159174,159219,159221,159238,159242,159245,159311,159314,159332,159336,159497,159506,159510,159514,159519,159566,159568,159574,159578,159583,159630,159632,159638,159642,159647,159683,159686,159733,159737,159743,159801,159806,159837,159842,159846,159901,159904,159976,159979,160038,160042,160045,160120,160123,160127,160233,160236,160262,160266,160278,160347,160350,160442,160446,160448,160459,160461,160591,160595,160797,160805,160809,160839,160843,160860],[10,159117,159113],{"id":159118},"_4-循环语句",[38,159120,159122],{"id":159121},"_41-为什么需要循环","4.1 为什么需要循环",[14,159124,159125,159126,159128],{},"如果要输出 1 到 100，不应该写 100 行 ",[93,159127,146451],{},"，而应该用循环。",[14,159130,159131],{},"循环适合处理重复任务：",[50,159133,159134,159137,159140,159143,159146],{},[53,159135,159136],{},"重复输出。",[53,159138,159139],{},"重复输入。",[53,159141,159142],{},"遍历数据。",[53,159144,159145],{},"持续执行菜单。",[53,159147,159148],{},"批量处理文件或数据。",[38,159150,159152],{"id":159151},"_42-while循环","4.2 while循环",[14,159154,5165],{},[87,159156,159158],{"className":30357,"code":159157,"language":30359,"meta":18,"style":18},"while 条件:\n    循环体\n",[93,159159,159160,159167],{"__ignoreMap":18},[96,159161,159162,159164],{"class":98,"line":99},[96,159163,108642],{"class":102},[96,159165,159166],{"class":106}," 条件:\n",[96,159168,159169],{"class":98,"line":19},[96,159170,159171],{"class":106},"    循环体\n",[14,159173,15119],{},[87,159175,159177],{"className":30357,"code":159176,"language":30359,"meta":18,"style":18},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[93,159178,159179,159187,159191,159203,159210],{"__ignoreMap":18},[96,159180,159181,159183,159185],{"class":98,"line":99},[96,159182,100127],{"class":106},[96,159184,152],{"class":102},[96,159186,55678],{"class":155},[96,159188,159189],{"class":98,"line":19},[96,159190,2383],{"emptyLinePlaceholder":23},[96,159192,159193,159195,159197,159199,159201],{"class":98,"line":1162},[96,159194,108642],{"class":102},[96,159196,9422],{"class":106},[96,159198,1571],{"class":102},[96,159200,2131],{"class":155},[96,159202,3722],{"class":106},[96,159204,159205,159207],{"class":98,"line":1177},[96,159206,31278],{"class":155},[96,159208,159209],{"class":106},"(i)\n",[96,159211,159212,159215,159217],{"class":98,"line":1183},[96,159213,159214],{"class":106},"    i ",[96,159216,9461],{"class":102},[96,159218,55678],{"class":155},[14,159220,80908],{},[50,159222,159223,159229,159232,159235],{},[53,159224,159225,159226,28364],{},"判断条件 ",[93,159227,159228],{},"i \u003C= 5",[53,159230,159231],{},"条件成立，执行循环体。",[53,159233,159234],{},"执行完后回到条件判断。",[53,159236,159237],{},"条件不成立，退出循环。",[38,159239,159241],{"id":159240},"_43-while累加","4.3 while累加",[14,159243,159244],{},"计算 1 到 100 的和：",[87,159246,159248],{"className":30357,"code":159247,"language":30359,"meta":18,"style":18},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[93,159249,159250,159258,159266,159270,159282,159292,159300,159304],{"__ignoreMap":18},[96,159251,159252,159254,159256],{"class":98,"line":99},[96,159253,100127],{"class":106},[96,159255,152],{"class":102},[96,159257,55678],{"class":155},[96,159259,159260,159262,159264],{"class":98,"line":19},[96,159261,157239],{"class":106},[96,159263,152],{"class":102},[96,159265,47312],{"class":155},[96,159267,159268],{"class":98,"line":1162},[96,159269,2383],{"emptyLinePlaceholder":23},[96,159271,159272,159274,159276,159278,159280],{"class":98,"line":1177},[96,159273,108642],{"class":102},[96,159275,9422],{"class":106},[96,159277,1571],{"class":102},[96,159279,5738],{"class":155},[96,159281,3722],{"class":106},[96,159283,159284,159287,159289],{"class":98,"line":1183},[96,159285,159286],{"class":106},"    total ",[96,159288,9461],{"class":102},[96,159290,159291],{"class":106}," i\n",[96,159293,159294,159296,159298],{"class":98,"line":1197},[96,159295,159214],{"class":106},[96,159297,9461],{"class":102},[96,159299,55678],{"class":155},[96,159301,159302],{"class":98,"line":1203},[96,159303,2383],{"emptyLinePlaceholder":23},[96,159305,159306,159308],{"class":98,"line":1294},[96,159307,30394],{"class":155},[96,159309,159310],{"class":106},"(total)\n",[14,159312,159313],{},"核心思想：",[50,159315,159316,159321,159326],{},[53,159317,159318,159320],{},[93,159319,548],{}," 控制循环次数。",[53,159322,159323,159325],{},[93,159324,157340],{}," 保存累加结果。",[53,159327,159328,159329,159331],{},"每轮循环都要更新 ",[93,159330,548],{},"，否则可能死循环。",[38,159333,159335],{"id":159334},"_44-while猜数字","4.4 while猜数字",[87,159337,159339],{"className":30357,"code":159338,"language":30359,"meta":18,"style":18},"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",[93,159340,159341,159347,159351,159368,159376,159380,159388,159408,159417,159421,159433,159444,159454,159465,159471,159493],{"__ignoreMap":18},[96,159342,159343,159345],{"class":98,"line":99},[96,159344,30371],{"class":102},[96,159346,45307],{"class":106},[96,159348,159349],{"class":98,"line":19},[96,159350,2383],{"emptyLinePlaceholder":23},[96,159352,159353,159355,159357,159360,159362,159364,159366],{"class":98,"line":1162},[96,159354,159019],{"class":106},[96,159356,152],{"class":102},[96,159358,159359],{"class":106}," random.randint(",[96,159361,324],{"class":155},[96,159363,12419],{"class":106},[96,159365,418],{"class":155},[96,159367,113],{"class":106},[96,159369,159370,159372,159374],{"class":98,"line":1177},[96,159371,146670],{"class":106},[96,159373,152],{"class":102},[96,159375,47312],{"class":155},[96,159377,159378],{"class":98,"line":1183},[96,159379,2383],{"emptyLinePlaceholder":23},[96,159381,159382,159384,159386],{"class":98,"line":1197},[96,159383,108642],{"class":102},[96,159385,95271],{"class":155},[96,159387,3722],{"class":106},[96,159389,159390,159393,159395,159397,159399,159401,159403,159406],{"class":98,"line":1203},[96,159391,159392],{"class":106},"    guess ",[96,159394,152],{"class":102},[96,159396,2365],{"class":155},[96,159398,107],{"class":106},[96,159400,53800],{"class":155},[96,159402,107],{"class":106},[96,159404,159405],{"class":211},"\"请输入1到100之间的数字:\"",[96,159407,30476],{"class":106},[96,159409,159410,159413,159415],{"class":98,"line":1294},[96,159411,159412],{"class":106},"    count ",[96,159414,9461],{"class":102},[96,159416,55678],{"class":155},[96,159418,159419],{"class":98,"line":1300},[96,159420,2383],{"emptyLinePlaceholder":23},[96,159422,159423,159425,159428,159430],{"class":98,"line":1312},[96,159424,3084],{"class":102},[96,159426,159427],{"class":106}," guess ",[96,159429,1067],{"class":102},[96,159431,159432],{"class":106}," answer:\n",[96,159434,159435,159437,159439,159442],{"class":98,"line":1595},[96,159436,32430],{"class":155},[96,159438,107],{"class":106},[96,159440,159441],{"class":211},"\"猜大了\"",[96,159443,113],{"class":106},[96,159445,159446,159448,159450,159452],{"class":98,"line":1600},[96,159447,39272],{"class":102},[96,159449,159427],{"class":106},[96,159451,1017],{"class":102},[96,159453,159432],{"class":106},[96,159455,159456,159458,159460,159463],{"class":98,"line":1606},[96,159457,32430],{"class":155},[96,159459,107],{"class":106},[96,159461,159462],{"class":211},"\"猜小了\"",[96,159464,113],{"class":106},[96,159466,159467,159469],{"class":98,"line":1611},[96,159468,158001],{"class":102},[96,159470,3722],{"class":106},[96,159472,159473,159475,159477,159479,159482,159484,159486,159488,159491],{"class":98,"line":1625},[96,159474,32430],{"class":155},[96,159476,107],{"class":106},[96,159478,159],{"class":102},[96,159480,159481],{"class":211},"\"猜对了，一共猜了",[96,159483,1003],{"class":155},[96,159485,84413],{"class":106},[96,159487,1053],{"class":155},[96,159489,159490],{"class":211},"次\"",[96,159492,113],{"class":106},[96,159494,159495],{"class":98,"line":1630},[96,159496,31606],{"class":102},[14,159498,159499,159502,159503,159505],{},[93,159500,159501],{},"while True"," 表示无限循环，通常配合 ",[93,159504,2036],{}," 使用。",[38,159507,159509],{"id":159508},"_45-break和continue","4.5 break和continue",[67,159511,159513],{"id":159512},"_451-break","4.5.1 break",[14,159515,159516,159518],{},[93,159517,2036],{}," 直接结束整个循环。",[87,159520,159522],{"className":30357,"code":159521,"language":30359,"meta":18,"style":18},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[93,159523,159524,159544,159556,159560],{"__ignoreMap":18},[96,159525,159526,159528,159530,159532,159534,159536,159538,159540,159542],{"class":98,"line":99},[96,159527,3008],{"class":102},[96,159529,9422],{"class":106},[96,159531,26022],{"class":102},[96,159533,32422],{"class":155},[96,159535,107],{"class":106},[96,159537,324],{"class":155},[96,159539,12419],{"class":106},[96,159541,451],{"class":155},[96,159543,30765],{"class":106},[96,159545,159546,159548,159550,159552,159554],{"class":98,"line":19},[96,159547,3084],{"class":102},[96,159549,9422],{"class":106},[96,159551,2932],{"class":102},[96,159553,78049],{"class":155},[96,159555,3722],{"class":106},[96,159557,159558],{"class":98,"line":1162},[96,159559,31606],{"class":102},[96,159561,159562,159564],{"class":98,"line":1177},[96,159563,31278],{"class":155},[96,159565,159209],{"class":106},[14,159567,146436],{},[87,159569,159572],{"className":159570,"code":159571,"language":5171,"meta":18},[5169],"1\n2\n",[93,159573,159571],{"__ignoreMap":18},[67,159575,159577],{"id":159576},"_452-continue","4.5.2 continue",[14,159579,159580,159582],{},[93,159581,154651],{}," 跳过本轮剩余代码，进入下一轮循环。",[87,159584,159586],{"className":30357,"code":159585,"language":30359,"meta":18,"style":18},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[93,159587,159588,159608,159620,159624],{"__ignoreMap":18},[96,159589,159590,159592,159594,159596,159598,159600,159602,159604,159606],{"class":98,"line":99},[96,159591,3008],{"class":102},[96,159593,9422],{"class":106},[96,159595,26022],{"class":102},[96,159597,32422],{"class":155},[96,159599,107],{"class":106},[96,159601,324],{"class":155},[96,159603,12419],{"class":106},[96,159605,451],{"class":155},[96,159607,30765],{"class":106},[96,159609,159610,159612,159614,159616,159618],{"class":98,"line":19},[96,159611,3084],{"class":102},[96,159613,9422],{"class":106},[96,159615,2932],{"class":102},[96,159617,78049],{"class":155},[96,159619,3722],{"class":106},[96,159621,159622],{"class":98,"line":1162},[96,159623,148491],{"class":102},[96,159625,159626,159628],{"class":98,"line":1177},[96,159627,31278],{"class":155},[96,159629,159209],{"class":106},[14,159631,146436],{},[87,159633,159636],{"className":159634,"code":159635,"language":5171,"meta":18},[5169],"1\n2\n4\n5\n",[93,159637,159635],{"__ignoreMap":18},[38,159639,159641],{"id":159640},"_46-for循环","4.6 for循环",[14,159643,159644,159646],{},[93,159645,3008],{}," 常用于遍历序列。",[87,159648,159650],{"className":30357,"code":159649,"language":30359,"meta":18,"style":18},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[93,159651,159652,159661,159665,159676],{"__ignoreMap":18},[96,159653,159654,159656,159658],{"class":98,"line":99},[96,159655,146515],{"class":106},[96,159657,152],{"class":102},[96,159659,159660],{"class":211}," \"python\"\n",[96,159662,159663],{"class":98,"line":19},[96,159664,2383],{"emptyLinePlaceholder":23},[96,159666,159667,159669,159672,159674],{"class":98,"line":1162},[96,159668,3008],{"class":102},[96,159670,159671],{"class":106}," ch ",[96,159673,26022],{"class":102},[96,159675,158378],{"class":106},[96,159677,159678,159680],{"class":98,"line":1177},[96,159679,31278],{"class":155},[96,159681,159682],{"class":106},"(ch)\n",[14,159684,159685],{},"遍历列表：",[87,159687,159689],{"className":30357,"code":159688,"language":30359,"meta":18,"style":18},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[93,159690,159691,159713,159717,159727],{"__ignoreMap":18},[96,159692,159693,159696,159698,159700,159702,159704,159706,159708,159711],{"class":98,"line":99},[96,159694,159695],{"class":106},"students ",[96,159697,152],{"class":102},[96,159699,52205],{"class":106},[96,159701,149867],{"class":211},[96,159703,12419],{"class":106},[96,159705,150915],{"class":211},[96,159707,12419],{"class":106},[96,159709,159710],{"class":211},"\"小刚\"",[96,159712,33225],{"class":106},[96,159714,159715],{"class":98,"line":19},[96,159716,2383],{"emptyLinePlaceholder":23},[96,159718,159719,159721,159723,159725],{"class":98,"line":1162},[96,159720,3008],{"class":102},[96,159722,152116],{"class":106},[96,159724,26022],{"class":102},[96,159726,152121],{"class":106},[96,159728,159729,159731],{"class":98,"line":1177},[96,159730,31278],{"class":155},[96,159732,150021],{"class":106},[38,159734,159736],{"id":159735},"_47-range函数","4.7 range函数",[14,159738,159739,159742],{},[93,159740,159741],{},"range()"," 用于生成整数序列。",[87,159744,159746],{"className":30357,"code":159745,"language":30359,"meta":18,"style":18},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[93,159747,159748,159762,159780],{"__ignoreMap":18},[96,159749,159750,159752,159754,159756,159759],{"class":98,"line":99},[96,159751,33395],{"class":155},[96,159753,107],{"class":106},[96,159755,426],{"class":155},[96,159757,159758],{"class":106},")          ",[96,159760,159761],{"class":165},"# 0,1,2,3,4\n",[96,159763,159764,159766,159768,159770,159772,159774,159777],{"class":98,"line":19},[96,159765,33395],{"class":155},[96,159767,107],{"class":106},[96,159769,324],{"class":155},[96,159771,12419],{"class":106},[96,159773,426],{"class":155},[96,159775,159776],{"class":106},")       ",[96,159778,159779],{"class":165},"# 1,2,3,4\n",[96,159781,159782,159784,159786,159788,159790,159792,159794,159796,159798],{"class":98,"line":1162},[96,159783,33395],{"class":155},[96,159785,107],{"class":106},[96,159787,324],{"class":155},[96,159789,12419],{"class":106},[96,159791,553],{"class":155},[96,159793,12419],{"class":106},[96,159795,184],{"class":155},[96,159797,155640],{"class":106},[96,159799,159800],{"class":165},"# 1,3,5,7,9\n",[14,159802,159803,159804,24597],{},"配合 ",[93,159805,3008],{},[87,159807,159809],{"className":30357,"code":159808,"language":30359,"meta":18,"style":18},"for i in range(1, 6):\n    print(i)\n",[93,159810,159811,159831],{"__ignoreMap":18},[96,159812,159813,159815,159817,159819,159821,159823,159825,159827,159829],{"class":98,"line":99},[96,159814,3008],{"class":102},[96,159816,9422],{"class":106},[96,159818,26022],{"class":102},[96,159820,32422],{"class":155},[96,159822,107],{"class":106},[96,159824,324],{"class":155},[96,159826,12419],{"class":106},[96,159828,451],{"class":155},[96,159830,30765],{"class":106},[96,159832,159833,159835],{"class":98,"line":19},[96,159834,31278],{"class":155},[96,159836,159209],{"class":106},[14,159838,9009,159839,159841],{},[93,159840,33395],{}," 的结束值不包含在内。",[38,159843,159845],{"id":159844},"_48-for循环求和","4.8 for循环求和",[87,159847,159849],{"className":30357,"code":159848,"language":30359,"meta":18,"style":18},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[93,159850,159851,159859,159863,159883,159891,159895],{"__ignoreMap":18},[96,159852,159853,159855,159857],{"class":98,"line":99},[96,159854,157239],{"class":106},[96,159856,152],{"class":102},[96,159858,47312],{"class":155},[96,159860,159861],{"class":98,"line":19},[96,159862,2383],{"emptyLinePlaceholder":23},[96,159864,159865,159867,159869,159871,159873,159875,159877,159879,159881],{"class":98,"line":1162},[96,159866,3008],{"class":102},[96,159868,9422],{"class":106},[96,159870,26022],{"class":102},[96,159872,32422],{"class":155},[96,159874,107],{"class":106},[96,159876,324],{"class":155},[96,159878,12419],{"class":106},[96,159880,444],{"class":155},[96,159882,30765],{"class":106},[96,159884,159885,159887,159889],{"class":98,"line":1177},[96,159886,159286],{"class":106},[96,159888,9461],{"class":102},[96,159890,159291],{"class":106},[96,159892,159893],{"class":98,"line":1183},[96,159894,2383],{"emptyLinePlaceholder":23},[96,159896,159897,159899],{"class":98,"line":1197},[96,159898,30394],{"class":155},[96,159900,159310],{"class":106},[14,159902,159903],{},"求偶数和：",[87,159905,159907],{"className":30357,"code":159906,"language":30359,"meta":18,"style":18},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[93,159908,159909,159917,159921,159941,159957,159966,159970],{"__ignoreMap":18},[96,159910,159911,159913,159915],{"class":98,"line":99},[96,159912,157239],{"class":106},[96,159914,152],{"class":102},[96,159916,47312],{"class":155},[96,159918,159919],{"class":98,"line":19},[96,159920,2383],{"emptyLinePlaceholder":23},[96,159922,159923,159925,159927,159929,159931,159933,159935,159937,159939],{"class":98,"line":1162},[96,159924,3008],{"class":102},[96,159926,9422],{"class":106},[96,159928,26022],{"class":102},[96,159930,32422],{"class":155},[96,159932,107],{"class":106},[96,159934,324],{"class":155},[96,159936,12419],{"class":106},[96,159938,444],{"class":155},[96,159940,30765],{"class":106},[96,159942,159943,159945,159947,159949,159951,159953,159955],{"class":98,"line":1177},[96,159944,3084],{"class":102},[96,159946,9422],{"class":106},[96,159948,435],{"class":102},[96,159950,14739],{"class":155},[96,159952,101538],{"class":102},[96,159954,4076],{"class":155},[96,159956,3722],{"class":106},[96,159958,159959,159962,159964],{"class":98,"line":1183},[96,159960,159961],{"class":106},"        total ",[96,159963,9461],{"class":102},[96,159965,159291],{"class":106},[96,159967,159968],{"class":98,"line":1197},[96,159969,2383],{"emptyLinePlaceholder":23},[96,159971,159972,159974],{"class":98,"line":1203},[96,159973,30394],{"class":155},[96,159975,159310],{"class":106},[14,159977,159978],{},"也可以：",[87,159980,159982],{"className":30357,"code":159981,"language":30359,"meta":18,"style":18},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[93,159983,159984,159992,159996,160020,160028,160032],{"__ignoreMap":18},[96,159985,159986,159988,159990],{"class":98,"line":99},[96,159987,157239],{"class":106},[96,159989,152],{"class":102},[96,159991,47312],{"class":155},[96,159993,159994],{"class":98,"line":19},[96,159995,2383],{"emptyLinePlaceholder":23},[96,159997,159998,160000,160002,160004,160006,160008,160010,160012,160014,160016,160018],{"class":98,"line":1162},[96,159999,3008],{"class":102},[96,160001,9422],{"class":106},[96,160003,26022],{"class":102},[96,160005,32422],{"class":155},[96,160007,107],{"class":106},[96,160009,184],{"class":155},[96,160011,12419],{"class":106},[96,160013,444],{"class":155},[96,160015,12419],{"class":106},[96,160017,184],{"class":155},[96,160019,30765],{"class":106},[96,160021,160022,160024,160026],{"class":98,"line":1177},[96,160023,159286],{"class":106},[96,160025,9461],{"class":102},[96,160027,159291],{"class":106},[96,160029,160030],{"class":98,"line":1183},[96,160031,2383],{"emptyLinePlaceholder":23},[96,160033,160034,160036],{"class":98,"line":1197},[96,160035,30394],{"class":155},[96,160037,159310],{"class":106},[38,160039,160041],{"id":160040},"_49-循环嵌套","4.9 循环嵌套",[14,160043,160044],{},"嵌套循环就是循环里面再写循环。",[87,160046,160048],{"className":30357,"code":160047,"language":30359,"meta":18,"style":18},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[93,160049,160050,160070,160090],{"__ignoreMap":18},[96,160051,160052,160054,160056,160058,160060,160062,160064,160066,160068],{"class":98,"line":99},[96,160053,3008],{"class":102},[96,160055,9422],{"class":106},[96,160057,26022],{"class":102},[96,160059,32422],{"class":155},[96,160061,107],{"class":106},[96,160063,324],{"class":155},[96,160065,12419],{"class":106},[96,160067,400],{"class":155},[96,160069,30765],{"class":106},[96,160071,160072,160074,160076,160078,160080,160082,160084,160086,160088],{"class":98,"line":19},[96,160073,3184],{"class":102},[96,160075,9484],{"class":106},[96,160077,26022],{"class":102},[96,160079,32422],{"class":155},[96,160081,107],{"class":106},[96,160083,324],{"class":155},[96,160085,12419],{"class":106},[96,160087,400],{"class":155},[96,160089,30765],{"class":106},[96,160091,160092,160094,160096,160098,160101,160103,160105,160107,160110,160112,160114,160116,160118],{"class":98,"line":1162},[96,160093,32430],{"class":155},[96,160095,107],{"class":106},[96,160097,159],{"class":102},[96,160099,160100],{"class":211},"\"i=",[96,160102,1003],{"class":155},[96,160104,548],{"class":106},[96,160106,1053],{"class":155},[96,160108,160109],{"class":211},", j=",[96,160111,1003],{"class":155},[96,160113,574],{"class":106},[96,160115,1053],{"class":155},[96,160117,358],{"class":211},[96,160119,113],{"class":106},[14,160121,160122],{},"外层循环执行一次，内层循环执行完整一轮。",[38,160124,160126],{"id":160125},"_410-九九乘法表","4.10 九九乘法表",[87,160128,160130],{"className":30357,"code":160129,"language":30359,"meta":18,"style":18},"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",[93,160131,160132,160152,160175,160227],{"__ignoreMap":18},[96,160133,160134,160136,160138,160140,160142,160144,160146,160148,160150],{"class":98,"line":99},[96,160135,3008],{"class":102},[96,160137,9422],{"class":106},[96,160139,26022],{"class":102},[96,160141,32422],{"class":155},[96,160143,107],{"class":106},[96,160145,324],{"class":155},[96,160147,12419],{"class":106},[96,160149,553],{"class":155},[96,160151,30765],{"class":106},[96,160153,160154,160156,160158,160160,160162,160164,160166,160169,160171,160173],{"class":98,"line":19},[96,160155,3184],{"class":102},[96,160157,9484],{"class":106},[96,160159,26022],{"class":102},[96,160161,32422],{"class":155},[96,160163,107],{"class":106},[96,160165,324],{"class":155},[96,160167,160168],{"class":106},", i ",[96,160170,588],{"class":102},[96,160172,25097],{"class":155},[96,160174,30765],{"class":106},[96,160176,160177,160179,160181,160183,160185,160187,160189,160191,160193,160195,160197,160199,160201,160203,160205,160207,160209,160211,160213,160215,160217,160219,160221,160223,160225],{"class":98,"line":1162},[96,160178,32430],{"class":155},[96,160180,107],{"class":106},[96,160182,159],{"class":102},[96,160184,358],{"class":211},[96,160186,1003],{"class":155},[96,160188,574],{"class":106},[96,160190,1053],{"class":155},[96,160192,562],{"class":211},[96,160194,1003],{"class":155},[96,160196,548],{"class":106},[96,160198,1053],{"class":155},[96,160200,152],{"class":211},[96,160202,1003],{"class":155},[96,160204,100127],{"class":106},[96,160206,562],{"class":102},[96,160208,3393],{"class":106},[96,160210,1053],{"class":155},[96,160212,358],{"class":211},[96,160214,12419],{"class":106},[96,160216,45780],{"class":5200},[96,160218,152],{"class":102},[96,160220,358],{"class":211},[96,160222,1213],{"class":155},[96,160224,358],{"class":211},[96,160226,113],{"class":106},[96,160228,160229,160231],{"class":98,"line":1177},[96,160230,31278],{"class":155},[96,160232,1959],{"class":106},[14,160234,160235],{},"关键点：",[50,160237,160238,160244,160250,160256],{},[53,160239,160240,160241,160243],{},"外层 ",[93,160242,548],{}," 控制行。",[53,160245,160246,160247,160249],{},"内层 ",[93,160248,574],{}," 控制列。",[53,160251,160252,160253,160255],{},"每行结束后用 ",[93,160254,146451],{}," 换行。",[53,160257,160258,160261],{},[93,160259,160260],{},"end=\"\\t\""," 让同一行的内容横向排列。",[38,160263,160265],{"id":160264},"_411-循环else","4.11 循环else",[14,160267,160268,160269,160271,160272,160274,160275,160277],{},"Python 的循环可以带 ",[93,160270,1684],{},"。当循环正常结束时执行 ",[93,160273,1684],{},"，如果被 ",[93,160276,2036],{}," 打断，则不执行。",[87,160279,160281],{"className":30357,"code":160280,"language":30359,"meta":18,"style":18},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[93,160282,160283,160303,160315,160326,160330,160336],{"__ignoreMap":18},[96,160284,160285,160287,160289,160291,160293,160295,160297,160299,160301],{"class":98,"line":99},[96,160286,3008],{"class":102},[96,160288,9422],{"class":106},[96,160290,26022],{"class":102},[96,160292,32422],{"class":155},[96,160294,107],{"class":106},[96,160296,324],{"class":155},[96,160298,12419],{"class":106},[96,160300,451],{"class":155},[96,160302,30765],{"class":106},[96,160304,160305,160307,160309,160311,160313],{"class":98,"line":19},[96,160306,3084],{"class":102},[96,160308,9422],{"class":106},[96,160310,2932],{"class":102},[96,160312,2021],{"class":155},[96,160314,3722],{"class":106},[96,160316,160317,160319,160321,160324],{"class":98,"line":1162},[96,160318,32430],{"class":155},[96,160320,107],{"class":106},[96,160322,160323],{"class":211},"\"找到了\"",[96,160325,113],{"class":106},[96,160327,160328],{"class":98,"line":1177},[96,160329,31606],{"class":102},[96,160331,160332,160334],{"class":98,"line":1183},[96,160333,1684],{"class":102},[96,160335,3722],{"class":106},[96,160337,160338,160340,160342,160345],{"class":98,"line":1197},[96,160339,31278],{"class":155},[96,160341,107],{"class":106},[96,160343,160344],{"class":211},"\"没找到\"",[96,160346,113],{"class":106},[14,160348,160349],{},"常用于搜索。",[87,160351,160353],{"className":30357,"code":160352,"language":30359,"meta":18,"style":18},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[93,160354,160355,160376,160385,160389,160401,160412,160422,160426,160432],{"__ignoreMap":18},[96,160356,160357,160360,160362,160364,160366,160368,160370,160372,160374],{"class":98,"line":99},[96,160358,160359],{"class":106},"names ",[96,160361,152],{"class":102},[96,160363,52205],{"class":106},[96,160365,149867],{"class":211},[96,160367,12419],{"class":106},[96,160369,150915],{"class":211},[96,160371,12419],{"class":106},[96,160373,159710],{"class":211},[96,160375,33225],{"class":106},[96,160377,160378,160380,160382],{"class":98,"line":19},[96,160379,111557],{"class":106},[96,160381,152],{"class":102},[96,160383,160384],{"class":211}," \"小李\"\n",[96,160386,160387],{"class":98,"line":1162},[96,160388,2383],{"emptyLinePlaceholder":23},[96,160390,160391,160393,160396,160398],{"class":98,"line":1177},[96,160392,3008],{"class":102},[96,160394,160395],{"class":106}," name ",[96,160397,26022],{"class":102},[96,160399,160400],{"class":106}," names:\n",[96,160402,160403,160405,160407,160409],{"class":98,"line":1183},[96,160404,3084],{"class":102},[96,160406,160395],{"class":106},[96,160408,2932],{"class":102},[96,160410,160411],{"class":106}," target:\n",[96,160413,160414,160416,160418,160420],{"class":98,"line":1197},[96,160415,32430],{"class":155},[96,160417,107],{"class":106},[96,160419,160323],{"class":211},[96,160421,113],{"class":106},[96,160423,160424],{"class":98,"line":1203},[96,160425,31606],{"class":102},[96,160427,160428,160430],{"class":98,"line":1294},[96,160429,1684],{"class":102},[96,160431,3722],{"class":106},[96,160433,160434,160436,160438,160440],{"class":98,"line":1300},[96,160435,31278],{"class":155},[96,160437,107],{"class":106},[96,160439,160344],{"class":211},[96,160441,113],{"class":106},[38,160443,160445],{"id":160444},"_412-小案例登录重试","4.12 小案例：登录重试",[14,160447,123271],{},[50,160449,160450,160453,160456],{},[53,160451,160452],{},"用户最多输入 3 次密码。",[53,160454,160455],{},"密码正确则登录成功。",[53,160457,160458],{},"3 次都错误则锁定账号。",[14,160460,10019],{},[87,160462,160464],{"className":30357,"code":160463,"language":30359,"meta":18,"style":18},"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",[93,160465,160466,160476,160480,160496,160512,160516,160528,160539,160543,160549,160574,160580],{"__ignoreMap":18},[96,160467,160468,160471,160473],{"class":98,"line":99},[96,160469,160470],{"class":106},"password ",[96,160472,152],{"class":102},[96,160474,160475],{"class":211}," \"123456\"\n",[96,160477,160478],{"class":98,"line":19},[96,160479,2383],{"emptyLinePlaceholder":23},[96,160481,160482,160484,160486,160488,160490,160492,160494],{"class":98,"line":1162},[96,160483,3008],{"class":102},[96,160485,9422],{"class":106},[96,160487,26022],{"class":102},[96,160489,32422],{"class":155},[96,160491,107],{"class":106},[96,160493,178],{"class":155},[96,160495,30765],{"class":106},[96,160497,160498,160501,160503,160505,160507,160510],{"class":98,"line":1177},[96,160499,160500],{"class":106},"    user_password ",[96,160502,152],{"class":102},[96,160504,60584],{"class":155},[96,160506,107],{"class":106},[96,160508,160509],{"class":211},"\"请输入密码:\"",[96,160511,113],{"class":106},[96,160513,160514],{"class":98,"line":1183},[96,160515,2383],{"emptyLinePlaceholder":23},[96,160517,160518,160520,160523,160525],{"class":98,"line":1197},[96,160519,3084],{"class":102},[96,160521,160522],{"class":106}," user_password ",[96,160524,2932],{"class":102},[96,160526,160527],{"class":106}," password:\n",[96,160529,160530,160532,160534,160537],{"class":98,"line":1203},[96,160531,32430],{"class":155},[96,160533,107],{"class":106},[96,160535,160536],{"class":211},"\"登录成功\"",[96,160538,113],{"class":106},[96,160540,160541],{"class":98,"line":1294},[96,160542,31606],{"class":102},[96,160544,160545,160547],{"class":98,"line":1300},[96,160546,158001],{"class":102},[96,160548,3722],{"class":106},[96,160550,160551,160553,160555,160557,160560,160563,160565,160567,160569,160572],{"class":98,"line":1312},[96,160552,32430],{"class":155},[96,160554,107],{"class":106},[96,160556,159],{"class":102},[96,160558,160559],{"class":211},"\"密码错误，还剩",[96,160561,160562],{"class":155},"{2",[96,160564,52250],{"class":102},[96,160566,3015],{"class":106},[96,160568,1053],{"class":155},[96,160570,160571],{"class":211},"次机会\"",[96,160573,113],{"class":106},[96,160575,160576,160578],{"class":98,"line":1595},[96,160577,1684],{"class":102},[96,160579,3722],{"class":106},[96,160581,160582,160584,160586,160589],{"class":98,"line":1600},[96,160583,31278],{"class":155},[96,160585,107],{"class":106},[96,160587,160588],{"class":211},"\"账号已锁定\"",[96,160590,113],{"class":106},[38,160592,160594],{"id":160593},"_413-小案例菜单程序","4.13 小案例：菜单程序",[87,160596,160598],{"className":30357,"code":160597,"language":30359,"meta":18,"style":18},"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",[93,160599,160600,160608,160619,160630,160641,160652,160663,160667,160682,160686,160698,160709,160721,160732,160744,160755,160767,160777,160781,160787],{"__ignoreMap":18},[96,160601,160602,160604,160606],{"class":98,"line":99},[96,160603,108642],{"class":102},[96,160605,95271],{"class":155},[96,160607,3722],{"class":106},[96,160609,160610,160612,160614,160617],{"class":98,"line":19},[96,160611,31278],{"class":155},[96,160613,107],{"class":106},[96,160615,160616],{"class":211},"\"====== 菜单 ======\"",[96,160618,113],{"class":106},[96,160620,160621,160623,160625,160628],{"class":98,"line":1162},[96,160622,31278],{"class":155},[96,160624,107],{"class":106},[96,160626,160627],{"class":211},"\"1. 查询余额\"",[96,160629,113],{"class":106},[96,160631,160632,160634,160636,160639],{"class":98,"line":1177},[96,160633,31278],{"class":155},[96,160635,107],{"class":106},[96,160637,160638],{"class":211},"\"2. 存款\"",[96,160640,113],{"class":106},[96,160642,160643,160645,160647,160650],{"class":98,"line":1183},[96,160644,31278],{"class":155},[96,160646,107],{"class":106},[96,160648,160649],{"class":211},"\"3. 取款\"",[96,160651,113],{"class":106},[96,160653,160654,160656,160658,160661],{"class":98,"line":1197},[96,160655,31278],{"class":155},[96,160657,107],{"class":106},[96,160659,160660],{"class":211},"\"0. 退出\"",[96,160662,113],{"class":106},[96,160664,160665],{"class":98,"line":1203},[96,160666,2383],{"emptyLinePlaceholder":23},[96,160668,160669,160672,160674,160676,160678,160680],{"class":98,"line":1294},[96,160670,160671],{"class":106},"    choice ",[96,160673,152],{"class":102},[96,160675,60584],{"class":155},[96,160677,107],{"class":106},[96,160679,153052],{"class":211},[96,160681,113],{"class":106},[96,160683,160684],{"class":98,"line":1300},[96,160685,2383],{"emptyLinePlaceholder":23},[96,160687,160688,160690,160692,160694,160696],{"class":98,"line":1312},[96,160689,3084],{"class":102},[96,160691,153065],{"class":106},[96,160693,2932],{"class":102},[96,160695,153070],{"class":211},[96,160697,3722],{"class":106},[96,160699,160700,160702,160704,160707],{"class":98,"line":1595},[96,160701,32430],{"class":155},[96,160703,107],{"class":106},[96,160705,160706],{"class":211},"\"余额为1000元\"",[96,160708,113],{"class":106},[96,160710,160711,160713,160715,160717,160719],{"class":98,"line":1600},[96,160712,39272],{"class":102},[96,160714,153065],{"class":106},[96,160716,2932],{"class":102},[96,160718,153089],{"class":211},[96,160720,3722],{"class":106},[96,160722,160723,160725,160727,160730],{"class":98,"line":1606},[96,160724,32430],{"class":155},[96,160726,107],{"class":106},[96,160728,160729],{"class":211},"\"存款功能\"",[96,160731,113],{"class":106},[96,160733,160734,160736,160738,160740,160742],{"class":98,"line":1611},[96,160735,39272],{"class":102},[96,160737,153065],{"class":106},[96,160739,2932],{"class":102},[96,160741,153107],{"class":211},[96,160743,3722],{"class":106},[96,160745,160746,160748,160750,160753],{"class":98,"line":1625},[96,160747,32430],{"class":155},[96,160749,107],{"class":106},[96,160751,160752],{"class":211},"\"取款功能\"",[96,160754,113],{"class":106},[96,160756,160757,160759,160761,160763,160765],{"class":98,"line":1630},[96,160758,39272],{"class":102},[96,160760,153065],{"class":106},[96,160762,2932],{"class":102},[96,160764,153161],{"class":211},[96,160766,3722],{"class":106},[96,160768,160769,160771,160773,160775],{"class":98,"line":1636},[96,160770,32430],{"class":155},[96,160772,107],{"class":106},[96,160774,153172],{"class":211},[96,160776,113],{"class":106},[96,160778,160779],{"class":98,"line":1657},[96,160780,31606],{"class":102},[96,160782,160783,160785],{"class":98,"line":1662},[96,160784,158001],{"class":102},[96,160786,3722],{"class":106},[96,160788,160789,160791,160793,160795],{"class":98,"line":1676},[96,160790,32430],{"class":155},[96,160792,107],{"class":106},[96,160794,153193],{"class":211},[96,160796,113],{"class":106},[14,160798,160799,160800,160802,160803,28364],{},"菜单类程序通常使用 ",[93,160801,159501],{},"，用户选择退出时 ",[93,160804,2036],{},[38,160806,160808],{"id":160807},"_414-易错点","4.14 易错点",[50,160810,160811,160816,160822,160830,160836],{},[53,160812,160813,160815],{},[93,160814,108642],{}," 循环必须更新控制变量。",[53,160817,160818,160821],{},[93,160819,160820],{},"range(1, 10)"," 不包含 10。",[53,160823,160824,160826,160827,160829],{},[93,160825,2036],{}," 结束整个循环，",[93,160828,154651],{}," 只跳过本轮。",[53,160831,160832,160833,160835],{},"嵌套循环中，",[93,160834,2036],{}," 只跳出当前所在的一层循环。",[53,160837,160838],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[38,160840,160842],{"id":160841},"_415-本章练习","4.15 本章练习",[50,160844,160845,160848,160851,160854,160857],{},[53,160846,160847],{},"输出 1 到 100。",[53,160849,160850],{},"计算 1 到 100 的偶数和。",[53,160852,160853],{},"输出 100 以内能被 3 和 5 同时整除的数。",[53,160855,160856],{},"编写猜数字游戏，限制最多猜 7 次。",[53,160858,160859],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[5110,160861,160862],{},"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":18,"searchDepth":19,"depth":19,"links":160864},[160865,160866,160867,160868,160869,160873,160874,160875,160876,160877,160878,160879,160880,160881,160882],{"id":159121,"depth":19,"text":159122},{"id":159151,"depth":19,"text":159152},{"id":159240,"depth":19,"text":159241},{"id":159334,"depth":19,"text":159335},{"id":159508,"depth":19,"text":159509,"children":160870},[160871,160872],{"id":159512,"depth":1162,"text":159513},{"id":159576,"depth":1162,"text":159577},{"id":159640,"depth":19,"text":159641},{"id":159735,"depth":19,"text":159736},{"id":159844,"depth":19,"text":159845},{"id":160040,"depth":19,"text":160041},{"id":160125,"depth":19,"text":160126},{"id":160264,"depth":19,"text":160265},{"id":160444,"depth":19,"text":160445},{"id":160593,"depth":19,"text":160594},{"id":160807,"depth":19,"text":160808},{"id":160841,"depth":19,"text":160842},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159113,"description":23361},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":160889,"title":160890,"body":160891,"description":23361,"extension":21,"meta":162896,"navigation":23,"path":162897,"seo":162898,"stem":162899,"__hash__":162900},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":160892,"toc":162876},[160893,160896,160900,160903,160906,160920,160923,160937,160941,160943,160962,160964,161011,161013,161027,161031,161105,161108,161112,161115,161174,161182,161185,161238,161241,161245,161250,161305,161313,161363,161367,161372,161380,161479,161485,161489,161494,161497,161508,161549,161562,161566,161569,161605,161608,161621,161624,161684,161688,161692,161695,161746,161750,161753,161800,161806,161872,161875,161879,161882,161998,162001,162005,162008,162114,162118,162121,162159,162162,162204,162207,162267,162270,162274,162738,162741,162745,162772,162778,162839,162843,162873],[10,160894,160890],{"id":160895},"_5-函数基础",[38,160897,160899],{"id":160898},"_51-为什么需要函数","5.1 为什么需要函数",[14,160901,160902],{},"函数用于封装一段可以重复使用的代码。",[14,160904,160905],{},"不使用函数的问题：",[50,160907,160908,160911,160914,160917],{},[53,160909,160910],{},"重复代码多。",[53,160912,160913],{},"修改逻辑时容易漏改。",[53,160915,160916],{},"主流程不清晰。",[53,160918,160919],{},"程序越写越长，难以维护。",[14,160921,160922],{},"使用函数后的好处：",[50,160924,160925,160928,160931,160934],{},[53,160926,160927],{},"提高复用性。",[53,160929,160930],{},"提高可读性。",[53,160932,160933],{},"便于调试。",[53,160935,160936],{},"便于分工。",[38,160938,160940],{"id":160939},"_52-函数定义","5.2 函数定义",[14,160942,5165],{},[87,160944,160946],{"className":30357,"code":160945,"language":30359,"meta":18,"style":18},"def 函数名():\n    函数体\n",[93,160947,160948,160957],{"__ignoreMap":18},[96,160949,160950,160952,160955],{"class":98,"line":99},[96,160951,31926],{"class":102},[96,160953,160954],{"class":1946}," 函数名",[96,160956,31932],{"class":106},[96,160958,160959],{"class":98,"line":19},[96,160960,160961],{"class":106},"    函数体\n",[14,160963,15119],{},[87,160965,160967],{"className":30357,"code":160966,"language":30359,"meta":18,"style":18},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[93,160968,160969,160978,160988,160998,161002,161006],{"__ignoreMap":18},[96,160970,160971,160973,160976],{"class":98,"line":99},[96,160972,31926],{"class":102},[96,160974,160975],{"class":1946}," say_hello",[96,160977,31932],{"class":106},[96,160979,160980,160982,160984,160986],{"class":98,"line":19},[96,160981,31278],{"class":155},[96,160983,107],{"class":106},[96,160985,5828],{"class":211},[96,160987,113],{"class":106},[96,160989,160990,160992,160994,160996],{"class":98,"line":1162},[96,160991,31278],{"class":155},[96,160993,107],{"class":106},[96,160995,146618],{"class":211},[96,160997,113],{"class":106},[96,160999,161000],{"class":98,"line":1177},[96,161001,2383],{"emptyLinePlaceholder":23},[96,161003,161004],{"class":98,"line":1183},[96,161005,2383],{"emptyLinePlaceholder":23},[96,161007,161008],{"class":98,"line":1197},[96,161009,161010],{"class":106},"say_hello()\n",[14,161012,9009],{},[50,161014,161015,161018,161021,161024],{},[53,161016,161017],{},"函数必须先定义，再调用。",[53,161019,161020],{},"函数名遵循变量命名规则。",[53,161022,161023],{},"函数体需要缩进。",[53,161025,161026],{},"函数不调用就不会执行。",[38,161028,161030],{"id":161029},"_53-函数调用","5.3 函数调用",[87,161032,161034],{"className":30357,"code":161033,"language":30359,"meta":18,"style":18},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[93,161035,161036,161045,161056,161067,161078,161088,161092,161096,161101],{"__ignoreMap":18},[96,161037,161038,161040,161043],{"class":98,"line":99},[96,161039,31926],{"class":102},[96,161041,161042],{"class":1946}," print_menu",[96,161044,31932],{"class":106},[96,161046,161047,161049,161051,161054],{"class":98,"line":19},[96,161048,31278],{"class":155},[96,161050,107],{"class":106},[96,161052,161053],{"class":211},"\"1. 查询\"",[96,161055,113],{"class":106},[96,161057,161058,161060,161062,161065],{"class":98,"line":1162},[96,161059,31278],{"class":155},[96,161061,107],{"class":106},[96,161063,161064],{"class":211},"\"2. 添加\"",[96,161066,113],{"class":106},[96,161068,161069,161071,161073,161076],{"class":98,"line":1177},[96,161070,31278],{"class":155},[96,161072,107],{"class":106},[96,161074,161075],{"class":211},"\"3. 删除\"",[96,161077,113],{"class":106},[96,161079,161080,161082,161084,161086],{"class":98,"line":1183},[96,161081,31278],{"class":155},[96,161083,107],{"class":106},[96,161085,160660],{"class":211},[96,161087,113],{"class":106},[96,161089,161090],{"class":98,"line":1197},[96,161091,2383],{"emptyLinePlaceholder":23},[96,161093,161094],{"class":98,"line":1203},[96,161095,2383],{"emptyLinePlaceholder":23},[96,161097,161098],{"class":98,"line":1294},[96,161099,161100],{"class":106},"print_menu()\n",[96,161102,161103],{"class":98,"line":1300},[96,161104,161100],{"class":106},[14,161106,161107],{},"函数可以多次调用，每次调用都会执行函数体。",[38,161109,161111],{"id":161110},"_54-参数","5.4 参数",[14,161113,161114],{},"参数用于向函数传递数据。",[87,161116,161118],{"className":30357,"code":161117,"language":30359,"meta":18,"style":18},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[93,161119,161120,161129,161149,161153,161157,161166],{"__ignoreMap":18},[96,161121,161122,161124,161126],{"class":98,"line":99},[96,161123,31926],{"class":102},[96,161125,160975],{"class":1946},[96,161127,161128],{"class":106},"(name):\n",[96,161130,161131,161133,161135,161137,161139,161141,161143,161145,161147],{"class":98,"line":19},[96,161132,31278],{"class":155},[96,161134,107],{"class":106},[96,161136,159],{"class":102},[96,161138,157033],{"class":211},[96,161140,1003],{"class":155},[96,161142,79789],{"class":106},[96,161144,1053],{"class":155},[96,161146,358],{"class":211},[96,161148,113],{"class":106},[96,161150,161151],{"class":98,"line":1162},[96,161152,2383],{"emptyLinePlaceholder":23},[96,161154,161155],{"class":98,"line":1177},[96,161156,2383],{"emptyLinePlaceholder":23},[96,161158,161159,161162,161164],{"class":98,"line":1183},[96,161160,161161],{"class":106},"say_hello(",[96,161163,149867],{"class":211},[96,161165,113],{"class":106},[96,161167,161168,161170,161172],{"class":98,"line":1197},[96,161169,161161],{"class":106},[96,161171,150915],{"class":211},[96,161173,113],{"class":106},[14,161175,161176,161178,161179,161181],{},[93,161177,79789],{}," 是形参，",[93,161180,149867],{}," 是实参。",[14,161183,161184],{},"多个参数：",[87,161186,161188],{"className":30357,"code":161187,"language":30359,"meta":18,"style":18},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[93,161189,161190,161198,161211,161217,161221,161225],{"__ignoreMap":18},[96,161191,161192,161194,161196],{"class":98,"line":99},[96,161193,31926],{"class":102},[96,161195,5193],{"class":1946},[96,161197,151072],{"class":106},[96,161199,161200,161203,161205,161207,161209],{"class":98,"line":19},[96,161201,161202],{"class":106},"    result ",[96,161204,152],{"class":102},[96,161206,10853],{"class":106},[96,161208,588],{"class":102},[96,161210,151083],{"class":106},[96,161212,161213,161215],{"class":98,"line":1162},[96,161214,31278],{"class":155},[96,161216,76564],{"class":106},[96,161218,161219],{"class":98,"line":1177},[96,161220,2383],{"emptyLinePlaceholder":23},[96,161222,161223],{"class":98,"line":1183},[96,161224,2383],{"emptyLinePlaceholder":23},[96,161226,161227,161230,161232,161234,161236],{"class":98,"line":1197},[96,161228,161229],{"class":106},"add(",[96,161231,553],{"class":155},[96,161233,12419],{"class":106},[96,161235,807],{"class":155},[96,161237,113],{"class":106},[14,161239,161240],{},"调用时参数数量必须匹配。",[38,161242,161244],{"id":161243},"_55-返回值","5.5 返回值",[14,161246,161247,161249],{},[93,161248,17030],{}," 用于把函数内部的结果返回给调用者。",[87,161251,161253],{"className":30357,"code":161252,"language":30359,"meta":18,"style":18},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[93,161254,161255,161263,161273,161277,161281,161299],{"__ignoreMap":18},[96,161256,161257,161259,161261],{"class":98,"line":99},[96,161258,31926],{"class":102},[96,161260,5193],{"class":1946},[96,161262,151072],{"class":106},[96,161264,161265,161267,161269,161271],{"class":98,"line":19},[96,161266,4073],{"class":102},[96,161268,10853],{"class":106},[96,161270,588],{"class":102},[96,161272,151083],{"class":106},[96,161274,161275],{"class":98,"line":1162},[96,161276,2383],{"emptyLinePlaceholder":23},[96,161278,161279],{"class":98,"line":1177},[96,161280,2383],{"emptyLinePlaceholder":23},[96,161282,161283,161286,161288,161291,161293,161295,161297],{"class":98,"line":1183},[96,161284,161285],{"class":106},"result ",[96,161287,152],{"class":102},[96,161289,161290],{"class":106}," add(",[96,161292,553],{"class":155},[96,161294,12419],{"class":106},[96,161296,807],{"class":155},[96,161298,113],{"class":106},[96,161300,161301,161303],{"class":98,"line":1197},[96,161302,30394],{"class":155},[96,161304,76564],{"class":106},[14,161306,161307,161308,161310,161311,28364],{},"如果函数没有写 ",[93,161309,17030],{},"，默认返回 ",[93,161312,95665],{},[87,161314,161316],{"className":30357,"code":161315,"language":30359,"meta":18,"style":18},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[93,161317,161318,161326,161336,161340,161344,161353],{"__ignoreMap":18},[96,161319,161320,161322,161324],{"class":98,"line":99},[96,161321,31926],{"class":102},[96,161323,160975],{"class":1946},[96,161325,31932],{"class":106},[96,161327,161328,161330,161332,161334],{"class":98,"line":19},[96,161329,31278],{"class":155},[96,161331,107],{"class":106},[96,161333,5828],{"class":211},[96,161335,113],{"class":106},[96,161337,161338],{"class":98,"line":1162},[96,161339,2383],{"emptyLinePlaceholder":23},[96,161341,161342],{"class":98,"line":1177},[96,161343,2383],{"emptyLinePlaceholder":23},[96,161345,161346,161348,161350],{"class":98,"line":1183},[96,161347,161285],{"class":106},[96,161349,152],{"class":102},[96,161351,161352],{"class":106}," say_hello()\n",[96,161354,161355,161357,161360],{"class":98,"line":1197},[96,161356,30394],{"class":155},[96,161358,161359],{"class":106},"(result)  ",[96,161361,161362],{"class":165},"# None\n",[38,161364,161366],{"id":161365},"_56-return的作用","5.6 return的作用",[14,161368,161369,161371],{},[93,161370,17030],{}," 有两个作用：",[50,161373,161374,161377],{},[53,161375,161376],{},"返回结果。",[53,161378,161379],{},"结束函数。",[87,161381,161383],{"className":30357,"code":161382,"language":30359,"meta":18,"style":18},"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",[93,161384,161385,161395,161407,161414,161418,161430,161437,161441,161448,161452,161456,161467],{"__ignoreMap":18},[96,161386,161387,161389,161392],{"class":98,"line":99},[96,161388,31926],{"class":102},[96,161390,161391],{"class":1946}," check_age",[96,161393,161394],{"class":106},"(age):\n",[96,161396,161397,161399,161401,161403,161405],{"class":98,"line":19},[96,161398,3084],{"class":102},[96,161400,15691],{"class":106},[96,161402,1017],{"class":102},[96,161404,4076],{"class":155},[96,161406,3722],{"class":106},[96,161408,161409,161411],{"class":98,"line":1162},[96,161410,14736],{"class":102},[96,161412,161413],{"class":211}," \"年龄不合法\"\n",[96,161415,161416],{"class":98,"line":1177},[96,161417,2383],{"emptyLinePlaceholder":23},[96,161419,161420,161422,161424,161426,161428],{"class":98,"line":1183},[96,161421,3084],{"class":102},[96,161423,15691],{"class":106},[96,161425,1693],{"class":102},[96,161427,156264],{"class":155},[96,161429,3722],{"class":106},[96,161431,161432,161434],{"class":98,"line":1197},[96,161433,14736],{"class":102},[96,161435,161436],{"class":211}," \"成年人\"\n",[96,161438,161439],{"class":98,"line":1203},[96,161440,2383],{"emptyLinePlaceholder":23},[96,161442,161443,161445],{"class":98,"line":1294},[96,161444,4073],{"class":102},[96,161446,161447],{"class":211}," \"未成年人\"\n",[96,161449,161450],{"class":98,"line":1300},[96,161451,2383],{"emptyLinePlaceholder":23},[96,161453,161454],{"class":98,"line":1312},[96,161455,2383],{"emptyLinePlaceholder":23},[96,161457,161458,161460,161463,161465],{"class":98,"line":1595},[96,161459,30394],{"class":155},[96,161461,161462],{"class":106},"(check_age(",[96,161464,807],{"class":155},[96,161466,30476],{"class":106},[96,161468,161469,161471,161473,161475,161477],{"class":98,"line":1600},[96,161470,30394],{"class":155},[96,161472,161462],{"class":106},[96,161474,639],{"class":102},[96,161476,324],{"class":155},[96,161478,30476],{"class":106},[14,161480,161481,161482,161484],{},"函数执行到 ",[93,161483,17030],{}," 后，后面的代码不会继续执行。",[38,161486,161488],{"id":161487},"_57-none","5.7 None",[14,161490,161491,161493],{},[93,161492,95665],{}," 表示空值或没有结果。",[14,161495,161496],{},"常见使用场景：",[50,161498,161499,161502,161505],{},[53,161500,161501],{},"函数没有返回值。",[53,161503,161504],{},"变量暂时没有具体值。",[53,161506,161507],{},"表示查询不到结果。",[87,161509,161511],{"className":30357,"code":161510,"language":30359,"meta":18,"style":18},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[93,161512,161513,161521,161525,161538],{"__ignoreMap":18},[96,161514,161515,161517,161519],{"class":98,"line":99},[96,161516,161285],{"class":106},[96,161518,152],{"class":102},[96,161520,152151],{"class":155},[96,161522,161523],{"class":98,"line":19},[96,161524,2383],{"emptyLinePlaceholder":23},[96,161526,161527,161529,161532,161534,161536],{"class":98,"line":1162},[96,161528,1514],{"class":102},[96,161530,161531],{"class":106}," result ",[96,161533,38906],{"class":102},[96,161535,38912],{"class":155},[96,161537,3722],{"class":106},[96,161539,161540,161542,161544,161547],{"class":98,"line":1177},[96,161541,31278],{"class":155},[96,161543,107],{"class":106},[96,161545,161546],{"class":211},"\"没有数据\"",[96,161548,113],{"class":106},[14,161550,161551,161552,161554,161555,161558,161559,28364],{},"判断 ",[93,161553,95665],{}," 推荐使用 ",[93,161556,161557],{},"is None","，不要写成 ",[93,161560,161561],{},"== None",[38,161563,161565],{"id":161564},"_58-函数文档字符串","5.8 函数文档字符串",[14,161567,161568],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[87,161570,161572],{"className":30357,"code":161571,"language":30359,"meta":18,"style":18},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[93,161573,161574,161584,161589],{"__ignoreMap":18},[96,161575,161576,161578,161581],{"class":98,"line":99},[96,161577,31926],{"class":102},[96,161579,161580],{"class":1946}," calculate_bmi",[96,161582,161583],{"class":106},"(weight, height):\n",[96,161585,161586],{"class":98,"line":19},[96,161587,161588],{"class":211},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[96,161590,161591,161593,161596,161598,161601,161603],{"class":98,"line":1162},[96,161592,4073],{"class":102},[96,161594,161595],{"class":106}," weight ",[96,161597,691],{"class":102},[96,161599,161600],{"class":106}," height ",[96,161602,10645],{"class":102},[96,161604,47702],{"class":155},[14,161606,161607],{},"查看说明：",[87,161609,161611],{"className":30357,"code":161610,"language":30359,"meta":18,"style":18},"help(calculate_bmi)\n",[93,161612,161613],{"__ignoreMap":18},[96,161614,161615,161618],{"class":98,"line":99},[96,161616,161617],{"class":155},"help",[96,161619,161620],{"class":106},"(calculate_bmi)\n",[14,161622,161623],{},"较完整的写法：",[87,161625,161627],{"className":30357,"code":161626,"language":30359,"meta":18,"style":18},"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",[93,161628,161629,161637,161642,161647,161651,161656,161661,161666,161670],{"__ignoreMap":18},[96,161630,161631,161633,161635],{"class":98,"line":99},[96,161632,31926],{"class":102},[96,161634,161580],{"class":1946},[96,161636,161583],{"class":106},[96,161638,161639],{"class":98,"line":19},[96,161640,161641],{"class":211},"    \"\"\"\n",[96,161643,161644],{"class":98,"line":1162},[96,161645,161646],{"class":211},"    计算BMI。\n",[96,161648,161649],{"class":98,"line":1177},[96,161650,2383],{"emptyLinePlaceholder":23},[96,161652,161653],{"class":98,"line":1183},[96,161654,161655],{"class":211},"    :param weight: 体重，单位kg\n",[96,161657,161658],{"class":98,"line":1197},[96,161659,161660],{"class":211},"    :param height: 身高，单位m\n",[96,161662,161663],{"class":98,"line":1203},[96,161664,161665],{"class":211},"    :return: BMI数值\n",[96,161667,161668],{"class":98,"line":1294},[96,161669,161641],{"class":211},[96,161671,161672,161674,161676,161678,161680,161682],{"class":98,"line":1300},[96,161673,4073],{"class":102},[96,161675,161595],{"class":106},[96,161677,691],{"class":102},[96,161679,161600],{"class":106},[96,161681,10645],{"class":102},[96,161683,47702],{"class":155},[38,161685,161687],{"id":161686},"_59-变量作用域","5.9 变量作用域",[67,161689,161691],{"id":161690},"_591-局部变量","5.9.1 局部变量",[14,161693,161694],{},"在函数内部定义的变量，只能在函数内部使用。",[87,161696,161698],{"className":30357,"code":161697,"language":30359,"meta":18,"style":18},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[93,161699,161700,161709,161717,161723,161727,161731,161736],{"__ignoreMap":18},[96,161701,161702,161704,161707],{"class":98,"line":99},[96,161703,31926],{"class":102},[96,161705,161706],{"class":1946}," test",[96,161708,31932],{"class":106},[96,161710,161711,161713,161715],{"class":98,"line":19},[96,161712,45572],{"class":106},[96,161714,152],{"class":102},[96,161716,58407],{"class":155},[96,161718,161719,161721],{"class":98,"line":1162},[96,161720,31278],{"class":155},[96,161722,120],{"class":106},[96,161724,161725],{"class":98,"line":1177},[96,161726,2383],{"emptyLinePlaceholder":23},[96,161728,161729],{"class":98,"line":1183},[96,161730,2383],{"emptyLinePlaceholder":23},[96,161732,161733],{"class":98,"line":1197},[96,161734,161735],{"class":106},"test()\n",[96,161737,161738,161740,161743],{"class":98,"line":1203},[96,161739,30394],{"class":155},[96,161741,161742],{"class":106},"(num)  ",[96,161744,161745],{"class":165},"# 报错\n",[67,161747,161749],{"id":161748},"_592-全局变量","5.9.2 全局变量",[14,161751,161752],{},"在函数外部定义的变量，可以在函数内部读取。",[87,161754,161756],{"className":30357,"code":161755,"language":30359,"meta":18,"style":18},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[93,161757,161758,161766,161770,161774,161782,161788,161792,161796],{"__ignoreMap":18},[96,161759,161760,161762,161764],{"class":98,"line":99},[96,161761,146515],{"class":106},[96,161763,152],{"class":102},[96,161765,149332],{"class":211},[96,161767,161768],{"class":98,"line":19},[96,161769,2383],{"emptyLinePlaceholder":23},[96,161771,161772],{"class":98,"line":1162},[96,161773,2383],{"emptyLinePlaceholder":23},[96,161775,161776,161778,161780],{"class":98,"line":1177},[96,161777,31926],{"class":102},[96,161779,160975],{"class":1946},[96,161781,31932],{"class":106},[96,161783,161784,161786],{"class":98,"line":1183},[96,161785,31278],{"class":155},[96,161787,150639],{"class":106},[96,161789,161790],{"class":98,"line":1197},[96,161791,2383],{"emptyLinePlaceholder":23},[96,161793,161794],{"class":98,"line":1203},[96,161795,2383],{"emptyLinePlaceholder":23},[96,161797,161798],{"class":98,"line":1294},[96,161799,161010],{"class":106},[14,161801,161802,161803,28364],{},"如果要在函数内部修改全局变量，需要 ",[93,161804,161805],{},"global",[87,161807,161809],{"className":30357,"code":161808,"language":30359,"meta":18,"style":18},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[93,161810,161811,161819,161823,161827,161836,161844,161852,161856,161860,161865],{"__ignoreMap":18},[96,161812,161813,161815,161817],{"class":98,"line":99},[96,161814,146670],{"class":106},[96,161816,152],{"class":102},[96,161818,47312],{"class":155},[96,161820,161821],{"class":98,"line":19},[96,161822,2383],{"emptyLinePlaceholder":23},[96,161824,161825],{"class":98,"line":1162},[96,161826,2383],{"emptyLinePlaceholder":23},[96,161828,161829,161831,161834],{"class":98,"line":1177},[96,161830,31926],{"class":102},[96,161832,161833],{"class":1946}," add_count",[96,161835,31932],{"class":106},[96,161837,161838,161841],{"class":98,"line":1183},[96,161839,161840],{"class":102},"    global",[96,161842,161843],{"class":106}," count\n",[96,161845,161846,161848,161850],{"class":98,"line":1197},[96,161847,159412],{"class":106},[96,161849,9461],{"class":102},[96,161851,55678],{"class":155},[96,161853,161854],{"class":98,"line":1203},[96,161855,2383],{"emptyLinePlaceholder":23},[96,161857,161858],{"class":98,"line":1294},[96,161859,2383],{"emptyLinePlaceholder":23},[96,161861,161862],{"class":98,"line":1300},[96,161863,161864],{"class":106},"add_count()\n",[96,161866,161867,161869],{"class":98,"line":1312},[96,161868,30394],{"class":155},[96,161870,161871],{"class":106},"(count)\n",[14,161873,161874],{},"不建议大量使用全局变量，项目变大后很难维护。",[38,161876,161878],{"id":161877},"_510-函数嵌套调用","5.10 函数嵌套调用",[14,161880,161881],{},"一个函数中可以调用另一个函数。",[87,161883,161885],{"className":30357,"code":161884,"language":30359,"meta":18,"style":18},"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",[93,161886,161887,161896,161910,161914,161918,161927,161932,161952,161973,161977,161981,161985],{"__ignoreMap":18},[96,161888,161889,161891,161894],{"class":98,"line":99},[96,161890,31926],{"class":102},[96,161892,161893],{"class":1946}," print_line",[96,161895,31932],{"class":106},[96,161897,161898,161900,161902,161904,161906,161908],{"class":98,"line":19},[96,161899,31278],{"class":155},[96,161901,107],{"class":106},[96,161903,32462],{"class":211},[96,161905,6502],{"class":102},[96,161907,78644],{"class":155},[96,161909,113],{"class":106},[96,161911,161912],{"class":98,"line":1162},[96,161913,2383],{"emptyLinePlaceholder":23},[96,161915,161916],{"class":98,"line":1177},[96,161917,2383],{"emptyLinePlaceholder":23},[96,161919,161920,161922,161925],{"class":98,"line":1183},[96,161921,31926],{"class":102},[96,161923,161924],{"class":1946}," print_info",[96,161926,149354],{"class":106},[96,161928,161929],{"class":98,"line":1197},[96,161930,161931],{"class":106},"    print_line()\n",[96,161933,161934,161936,161938,161940,161942,161944,161946,161948,161950],{"class":98,"line":1203},[96,161935,31278],{"class":155},[96,161937,107],{"class":106},[96,161939,159],{"class":102},[96,161941,156661],{"class":211},[96,161943,1003],{"class":155},[96,161945,79789],{"class":106},[96,161947,1053],{"class":155},[96,161949,358],{"class":211},[96,161951,113],{"class":106},[96,161953,161954,161956,161958,161960,161963,161965,161967,161969,161971],{"class":98,"line":1294},[96,161955,31278],{"class":155},[96,161957,107],{"class":106},[96,161959,159],{"class":102},[96,161961,161962],{"class":211},"\"年龄:",[96,161964,1003],{"class":155},[96,161966,70200],{"class":106},[96,161968,1053],{"class":155},[96,161970,358],{"class":211},[96,161972,113],{"class":106},[96,161974,161975],{"class":98,"line":1300},[96,161976,161931],{"class":106},[96,161978,161979],{"class":98,"line":1312},[96,161980,2383],{"emptyLinePlaceholder":23},[96,161982,161983],{"class":98,"line":1595},[96,161984,2383],{"emptyLinePlaceholder":23},[96,161986,161987,161990,161992,161994,161996],{"class":98,"line":1600},[96,161988,161989],{"class":106},"print_info(",[96,161991,149867],{"class":211},[96,161993,12419],{"class":106},[96,161995,757],{"class":155},[96,161997,113],{"class":106},[14,161999,162000],{},"这种方式可以把小功能组合成大功能。",[38,162002,162004],{"id":162003},"_511-参数检查","5.11 参数检查",[14,162006,162007],{},"函数内部可以检查参数是否合法。",[87,162009,162011],{"className":30357,"code":162010,"language":30359,"meta":18,"style":18},"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",[93,162012,162013,162022,162034,162040,162050,162054,162058,162075,162079,162091,162102,162108],{"__ignoreMap":18},[96,162014,162015,162017,162020],{"class":98,"line":99},[96,162016,31926],{"class":102},[96,162018,162019],{"class":1946}," divide",[96,162021,151072],{"class":106},[96,162023,162024,162026,162028,162030,162032],{"class":98,"line":19},[96,162025,3084],{"class":102},[96,162027,10866],{"class":106},[96,162029,2932],{"class":102},[96,162031,4076],{"class":155},[96,162033,3722],{"class":106},[96,162035,162036,162038],{"class":98,"line":1162},[96,162037,14736],{"class":102},[96,162039,152151],{"class":155},[96,162041,162042,162044,162046,162048],{"class":98,"line":1177},[96,162043,4073],{"class":102},[96,162045,10853],{"class":106},[96,162047,691],{"class":102},[96,162049,151083],{"class":106},[96,162051,162052],{"class":98,"line":1183},[96,162053,2383],{"emptyLinePlaceholder":23},[96,162055,162056],{"class":98,"line":1197},[96,162057,2383],{"emptyLinePlaceholder":23},[96,162059,162060,162062,162064,162067,162069,162071,162073],{"class":98,"line":1203},[96,162061,161285],{"class":106},[96,162063,152],{"class":102},[96,162065,162066],{"class":106}," divide(",[96,162068,553],{"class":155},[96,162070,12419],{"class":106},[96,162072,298],{"class":155},[96,162074,113],{"class":106},[96,162076,162077],{"class":98,"line":1294},[96,162078,2383],{"emptyLinePlaceholder":23},[96,162080,162081,162083,162085,162087,162089],{"class":98,"line":1300},[96,162082,1514],{"class":102},[96,162084,161531],{"class":106},[96,162086,38906],{"class":102},[96,162088,38912],{"class":155},[96,162090,3722],{"class":106},[96,162092,162093,162095,162097,162100],{"class":98,"line":1312},[96,162094,31278],{"class":155},[96,162096,107],{"class":106},[96,162098,162099],{"class":211},"\"除数不能为0\"",[96,162101,113],{"class":106},[96,162103,162104,162106],{"class":98,"line":1595},[96,162105,1684],{"class":102},[96,162107,3722],{"class":106},[96,162109,162110,162112],{"class":98,"line":1600},[96,162111,31278],{"class":155},[96,162113,76564],{"class":106},[38,162115,162117],{"id":162116},"_512-类型提示","5.12 类型提示",[14,162119,162120],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[87,162122,162124],{"className":30357,"code":162123,"language":30359,"meta":18,"style":18},"def add(a: int, b: int) -> int:\n    return a + b\n",[93,162125,162126,162149],{"__ignoreMap":18},[96,162127,162128,162130,162132,162135,162137,162140,162142,162145,162147],{"class":98,"line":99},[96,162129,31926],{"class":102},[96,162131,5193],{"class":1946},[96,162133,162134],{"class":106},"(a: ",[96,162136,110],{"class":155},[96,162138,162139],{"class":106},", b: ",[96,162141,110],{"class":155},[96,162143,162144],{"class":106},") -> ",[96,162146,110],{"class":155},[96,162148,3722],{"class":106},[96,162150,162151,162153,162155,162157],{"class":98,"line":19},[96,162152,4073],{"class":102},[96,162154,10853],{"class":106},[96,162156,588],{"class":102},[96,162158,151083],{"class":106},[14,162160,162161],{},"字符串参数：",[87,162163,162165],{"className":30357,"code":162164,"language":30359,"meta":18,"style":18},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[93,162166,162167,162184],{"__ignoreMap":18},[96,162168,162169,162171,162173,162176,162178,162180,162182],{"class":98,"line":99},[96,162170,31926],{"class":102},[96,162172,160975],{"class":1946},[96,162174,162175],{"class":106},"(name: ",[96,162177,1282],{"class":155},[96,162179,162144],{"class":106},[96,162181,95665],{"class":155},[96,162183,3722],{"class":106},[96,162185,162186,162188,162190,162192,162194,162196,162198,162200,162202],{"class":98,"line":19},[96,162187,31278],{"class":155},[96,162189,107],{"class":106},[96,162191,159],{"class":102},[96,162193,157033],{"class":211},[96,162195,1003],{"class":155},[96,162197,79789],{"class":106},[96,162199,1053],{"class":155},[96,162201,358],{"class":211},[96,162203,113],{"class":106},[14,162205,162206],{},"列表参数：",[87,162208,162210],{"className":30357,"code":162209,"language":30359,"meta":18,"style":18},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[93,162211,162212,162231,162239,162251,162260],{"__ignoreMap":18},[96,162213,162214,162216,162219,162222,162224,162227,162229],{"class":98,"line":99},[96,162215,31926],{"class":102},[96,162217,162218],{"class":1946}," get_total",[96,162220,162221],{"class":106},"(numbers: list[",[96,162223,110],{"class":155},[96,162225,162226],{"class":106},"]) -> ",[96,162228,110],{"class":155},[96,162230,3722],{"class":106},[96,162232,162233,162235,162237],{"class":98,"line":19},[96,162234,159286],{"class":106},[96,162236,152],{"class":102},[96,162238,47312],{"class":155},[96,162240,162241,162243,162246,162248],{"class":98,"line":1162},[96,162242,3184],{"class":102},[96,162244,162245],{"class":106}," number ",[96,162247,26022],{"class":102},[96,162249,162250],{"class":106}," numbers:\n",[96,162252,162253,162255,162257],{"class":98,"line":1177},[96,162254,159961],{"class":106},[96,162256,9461],{"class":102},[96,162258,162259],{"class":106}," number\n",[96,162261,162262,162264],{"class":98,"line":1183},[96,162263,4073],{"class":102},[96,162265,162266],{"class":106}," total\n",[14,162268,162269],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[38,162271,162273],{"id":162272},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[87,162275,162277],{"className":30357,"code":162276,"language":30359,"meta":18,"style":18},"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",[93,162278,162279,162289,162293,162297,162305,162316,162326,162336,162346,162356,162360,162364,162373,162395,162399,162403,162412,162418,162438,162450,162461,162465,162474,162485,162490,162494,162498,162507,162513,162532,162544,162554,162558,162569,162579,162583,162591,162602,162606,162610,162614,162622,162627,162641,162645,162657,162662,162674,162679,162691,162696,162708,162718,162722,162728],{"__ignoreMap":18},[96,162280,162281,162284,162286],{"class":98,"line":99},[96,162282,162283],{"class":106},"balance ",[96,162285,152],{"class":102},[96,162287,162288],{"class":155}," 1000\n",[96,162290,162291],{"class":98,"line":19},[96,162292,2383],{"emptyLinePlaceholder":23},[96,162294,162295],{"class":98,"line":1162},[96,162296,2383],{"emptyLinePlaceholder":23},[96,162298,162299,162301,162303],{"class":98,"line":1177},[96,162300,31926],{"class":102},[96,162302,152012],{"class":1946},[96,162304,31932],{"class":106},[96,162306,162307,162309,162311,162314],{"class":98,"line":1183},[96,162308,31278],{"class":155},[96,162310,107],{"class":106},[96,162312,162313],{"class":211},"\"====== ATM ======\"",[96,162315,113],{"class":106},[96,162317,162318,162320,162322,162324],{"class":98,"line":1197},[96,162319,31278],{"class":155},[96,162321,107],{"class":106},[96,162323,160627],{"class":211},[96,162325,113],{"class":106},[96,162327,162328,162330,162332,162334],{"class":98,"line":1203},[96,162329,31278],{"class":155},[96,162331,107],{"class":106},[96,162333,160638],{"class":211},[96,162335,113],{"class":106},[96,162337,162338,162340,162342,162344],{"class":98,"line":1294},[96,162339,31278],{"class":155},[96,162341,107],{"class":106},[96,162343,160649],{"class":211},[96,162345,113],{"class":106},[96,162347,162348,162350,162352,162354],{"class":98,"line":1300},[96,162349,31278],{"class":155},[96,162351,107],{"class":106},[96,162353,160660],{"class":211},[96,162355,113],{"class":106},[96,162357,162358],{"class":98,"line":1312},[96,162359,2383],{"emptyLinePlaceholder":23},[96,162361,162362],{"class":98,"line":1595},[96,162363,2383],{"emptyLinePlaceholder":23},[96,162365,162366,162368,162371],{"class":98,"line":1600},[96,162367,31926],{"class":102},[96,162369,162370],{"class":1946}," show_balance",[96,162372,31932],{"class":106},[96,162374,162375,162377,162379,162381,162384,162386,162389,162391,162393],{"class":98,"line":1606},[96,162376,31278],{"class":155},[96,162378,107],{"class":106},[96,162380,159],{"class":102},[96,162382,162383],{"class":211},"\"当前余额:",[96,162385,1003],{"class":155},[96,162387,162388],{"class":106},"balance",[96,162390,1053],{"class":155},[96,162392,156991],{"class":211},[96,162394,113],{"class":106},[96,162396,162397],{"class":98,"line":1611},[96,162398,2383],{"emptyLinePlaceholder":23},[96,162400,162401],{"class":98,"line":1625},[96,162402,2383],{"emptyLinePlaceholder":23},[96,162404,162405,162407,162410],{"class":98,"line":1630},[96,162406,31926],{"class":102},[96,162408,162409],{"class":1946}," save_money",[96,162411,31932],{"class":106},[96,162413,162414,162416],{"class":98,"line":1636},[96,162415,161840],{"class":102},[96,162417,150078],{"class":106},[96,162419,162420,162423,162425,162427,162429,162431,162433,162436],{"class":98,"line":1657},[96,162421,162422],{"class":106},"    money ",[96,162424,152],{"class":102},[96,162426,109776],{"class":155},[96,162428,107],{"class":106},[96,162430,53800],{"class":155},[96,162432,107],{"class":106},[96,162434,162435],{"class":211},"\"请输入存款金额:\"",[96,162437,30476],{"class":106},[96,162439,162440,162442,162444,162446,162448],{"class":98,"line":1662},[96,162441,3084],{"class":102},[96,162443,150121],{"class":106},[96,162445,1571],{"class":102},[96,162447,4076],{"class":155},[96,162449,3722],{"class":106},[96,162451,162452,162454,162456,162459],{"class":98,"line":1676},[96,162453,32430],{"class":155},[96,162455,107],{"class":106},[96,162457,162458],{"class":211},"\"金额必须大于0\"",[96,162460,113],{"class":106},[96,162462,162463],{"class":98,"line":1681},[96,162464,152340],{"class":102},[96,162466,162467,162470,162472],{"class":98,"line":1710},[96,162468,162469],{"class":106},"    balance ",[96,162471,9461],{"class":102},[96,162473,150154],{"class":106},[96,162475,162476,162478,162480,162483],{"class":98,"line":1715},[96,162477,31278],{"class":155},[96,162479,107],{"class":106},[96,162481,162482],{"class":211},"\"存款成功\"",[96,162484,113],{"class":106},[96,162486,162487],{"class":98,"line":1732},[96,162488,162489],{"class":106},"    show_balance()\n",[96,162491,162492],{"class":98,"line":1737},[96,162493,2383],{"emptyLinePlaceholder":23},[96,162495,162496],{"class":98,"line":1742},[96,162497,2383],{"emptyLinePlaceholder":23},[96,162499,162500,162502,162505],{"class":98,"line":1747},[96,162501,31926],{"class":102},[96,162503,162504],{"class":1946}," withdraw_money",[96,162506,31932],{"class":106},[96,162508,162509,162511],{"class":98,"line":1761},[96,162510,161840],{"class":102},[96,162512,150078],{"class":106},[96,162514,162515,162517,162519,162521,162523,162525,162527,162530],{"class":98,"line":1766},[96,162516,162422],{"class":106},[96,162518,152],{"class":102},[96,162520,109776],{"class":155},[96,162522,107],{"class":106},[96,162524,53800],{"class":155},[96,162526,107],{"class":106},[96,162528,162529],{"class":211},"\"请输入取款金额:\"",[96,162531,30476],{"class":106},[96,162533,162534,162536,162538,162540,162542],{"class":98,"line":2560},[96,162535,3084],{"class":102},[96,162537,150121],{"class":106},[96,162539,1571],{"class":102},[96,162541,4076],{"class":155},[96,162543,3722],{"class":106},[96,162545,162546,162548,162550,162552],{"class":98,"line":2574},[96,162547,32430],{"class":155},[96,162549,107],{"class":106},[96,162551,162458],{"class":211},[96,162553,113],{"class":106},[96,162555,162556],{"class":98,"line":2582},[96,162557,152340],{"class":102},[96,162559,162560,162562,162564,162566],{"class":98,"line":2587},[96,162561,3084],{"class":102},[96,162563,150121],{"class":106},[96,162565,1067],{"class":102},[96,162567,162568],{"class":106}," balance:\n",[96,162570,162571,162573,162575,162577],{"class":98,"line":2593},[96,162572,32430],{"class":155},[96,162574,107],{"class":106},[96,162576,150216],{"class":211},[96,162578,113],{"class":106},[96,162580,162581],{"class":98,"line":2599},[96,162582,152340],{"class":102},[96,162584,162585,162587,162589],{"class":98,"line":2604},[96,162586,162469],{"class":106},[96,162588,150231],{"class":102},[96,162590,150154],{"class":106},[96,162592,162593,162595,162597,162600],{"class":98,"line":7932},[96,162594,31278],{"class":155},[96,162596,107],{"class":106},[96,162598,162599],{"class":211},"\"取款成功\"",[96,162601,113],{"class":106},[96,162603,162604],{"class":98,"line":7956},[96,162605,162489],{"class":106},[96,162607,162608],{"class":98,"line":7961},[96,162609,2383],{"emptyLinePlaceholder":23},[96,162611,162612],{"class":98,"line":7967},[96,162613,2383],{"emptyLinePlaceholder":23},[96,162615,162616,162618,162620],{"class":98,"line":7994},[96,162617,108642],{"class":102},[96,162619,95271],{"class":155},[96,162621,3722],{"class":106},[96,162623,162624],{"class":98,"line":7999},[96,162625,162626],{"class":106},"    show_menu()\n",[96,162628,162629,162631,162633,162635,162637,162639],{"class":98,"line":8005},[96,162630,160671],{"class":106},[96,162632,152],{"class":102},[96,162634,60584],{"class":155},[96,162636,107],{"class":106},[96,162638,153052],{"class":211},[96,162640,113],{"class":106},[96,162642,162643],{"class":98,"line":8017},[96,162644,2383],{"emptyLinePlaceholder":23},[96,162646,162647,162649,162651,162653,162655],{"class":98,"line":8029},[96,162648,3084],{"class":102},[96,162650,153065],{"class":106},[96,162652,2932],{"class":102},[96,162654,153070],{"class":211},[96,162656,3722],{"class":106},[96,162658,162659],{"class":98,"line":8041},[96,162660,162661],{"class":106},"        show_balance()\n",[96,162663,162664,162666,162668,162670,162672],{"class":98,"line":9700},[96,162665,39272],{"class":102},[96,162667,153065],{"class":106},[96,162669,2932],{"class":102},[96,162671,153089],{"class":211},[96,162673,3722],{"class":106},[96,162675,162676],{"class":98,"line":9725},[96,162677,162678],{"class":106},"        save_money()\n",[96,162680,162681,162683,162685,162687,162689],{"class":98,"line":9748},[96,162682,39272],{"class":102},[96,162684,153065],{"class":106},[96,162686,2932],{"class":102},[96,162688,153107],{"class":211},[96,162690,3722],{"class":106},[96,162692,162693],{"class":98,"line":9772},[96,162694,162695],{"class":106},"        withdraw_money()\n",[96,162697,162698,162700,162702,162704,162706],{"class":98,"line":9777},[96,162699,39272],{"class":102},[96,162701,153065],{"class":106},[96,162703,2932],{"class":102},[96,162705,153161],{"class":211},[96,162707,3722],{"class":106},[96,162709,162710,162712,162714,162716],{"class":98,"line":9782},[96,162711,32430],{"class":155},[96,162713,107],{"class":106},[96,162715,153172],{"class":211},[96,162717,113],{"class":106},[96,162719,162720],{"class":98,"line":9787},[96,162721,31606],{"class":102},[96,162723,162724,162726],{"class":98,"line":9796},[96,162725,158001],{"class":102},[96,162727,3722],{"class":106},[96,162729,162730,162732,162734,162736],{"class":98,"line":9801},[96,162731,32430],{"class":155},[96,162733,107],{"class":106},[96,162735,153193],{"class":211},[96,162737,113],{"class":106},[14,162739,162740],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[38,162742,162744],{"id":162743},"_514-易错点","5.14 易错点",[50,162746,162747,162750,162753,162758,162763,162766],{},[53,162748,162749],{},"函数定义后必须调用才会执行。",[53,162751,162752],{},"函数名后面有括号才是调用。",[53,162754,162755,162757],{},[93,162756,17030],{}," 后面的代码不会执行。",[53,162759,162760,162761,28364],{},"没有返回值的函数默认返回 ",[93,162762,95665],{},[53,162764,162765],{},"局部变量不能在函数外部访问。",[53,162767,162768,162769,162771],{},"不要滥用 ",[93,162770,161805],{},"，更好的方式是让函数返回新值。",[14,162773,162774,162775,162777],{},"例如不用 ",[93,162776,161805],{}," 改写存款：",[87,162779,162781],{"className":30357,"code":162780,"language":30359,"meta":18,"style":18},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[93,162782,162783,162792,162803,162807,162811,162819,162832],{"__ignoreMap":18},[96,162784,162785,162787,162789],{"class":98,"line":99},[96,162786,31926],{"class":102},[96,162788,162409],{"class":1946},[96,162790,162791],{"class":106},"(balance, money):\n",[96,162793,162794,162796,162799,162801],{"class":98,"line":19},[96,162795,4073],{"class":102},[96,162797,162798],{"class":106}," balance ",[96,162800,588],{"class":102},[96,162802,150154],{"class":106},[96,162804,162805],{"class":98,"line":1162},[96,162806,2383],{"emptyLinePlaceholder":23},[96,162808,162809],{"class":98,"line":1177},[96,162810,2383],{"emptyLinePlaceholder":23},[96,162812,162813,162815,162817],{"class":98,"line":1183},[96,162814,162283],{"class":106},[96,162816,152],{"class":102},[96,162818,162288],{"class":155},[96,162820,162821,162823,162825,162828,162830],{"class":98,"line":1197},[96,162822,162283],{"class":106},[96,162824,152],{"class":102},[96,162826,162827],{"class":106}," save_money(balance, ",[96,162829,1705],{"class":155},[96,162831,113],{"class":106},[96,162833,162834,162836],{"class":98,"line":1203},[96,162835,30394],{"class":155},[96,162837,162838],{"class":106},"(balance)\n",[38,162840,162842],{"id":162841},"_515-本章练习","5.15 本章练习",[50,162844,162845,162852,162858,162864,162870],{},[53,162846,162847,162848,162851],{},"定义函数 ",[93,162849,162850],{},"print_student(name, age)","，输出学生信息。",[53,162853,162847,162854,162857],{},[93,162855,162856],{},"get_max(a, b, c)","，返回三个数中的最大值。",[53,162859,162847,162860,162863],{},[93,162861,162862],{},"is_even(num)","，判断一个数是否为偶数。",[53,162865,162847,162866,162869],{},[93,162867,162868],{},"calculate_bmi(weight, height)","，返回 BMI。",[53,162871,162872],{},"把第 4 章的菜单程序拆分成多个函数。",[5110,162874,162875],{},"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":18,"searchDepth":19,"depth":19,"links":162877},[162878,162879,162880,162881,162882,162883,162884,162885,162886,162890,162891,162892,162893,162894,162895],{"id":160898,"depth":19,"text":160899},{"id":160939,"depth":19,"text":160940},{"id":161029,"depth":19,"text":161030},{"id":161110,"depth":19,"text":161111},{"id":161243,"depth":19,"text":161244},{"id":161365,"depth":19,"text":161366},{"id":161487,"depth":19,"text":161488},{"id":161564,"depth":19,"text":161565},{"id":161686,"depth":19,"text":161687,"children":162887},[162888,162889],{"id":161690,"depth":1162,"text":161691},{"id":161748,"depth":1162,"text":161749},{"id":161877,"depth":19,"text":161878},{"id":162003,"depth":19,"text":162004},{"id":162116,"depth":19,"text":162117},{"id":162272,"depth":19,"text":162273},{"id":162743,"depth":19,"text":162744},{"id":162841,"depth":19,"text":162842},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":160890,"description":23361},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":162902,"title":162903,"body":162904,"description":23361,"extension":21,"meta":165948,"navigation":23,"path":165949,"seo":165950,"stem":165951,"__hash__":165952},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":162905,"toc":165929},[162906,162909,162913,162916,162919,163023,163026,163030,163033,163113,163116,163120,163123,163183,163186,163222,163225,163240,163244,163317,163320,163375,163378,163448,163451,163535,163545,163603,163607,163652,163655,163681,163684,163790,163794,163797,163839,163842,163906,163909,163913,163916,163977,163980,164010,164013,164051,164055,164058,164067,164070,164194,164197,164238,164242,164245,164256,164296,164299,164314,164319,164322,164389,164392,164482,164486,164489,164537,164540,164567,164569,164599,164602,164622,164625,164656,164659,164692,164696,164699,164723,164726,164750,164753,164777,164781,164784,164914,164917,164997,165000,165075,165079,165082,165132,165135,165177,165180,165204,165206,165230,165233,165288,165291,165357,165361,165364,165367,165405,165408,165461,165464,165510,165513,165546,165549,165553,165872,165876,165905,165909,165926],[10,162907,162903],{"id":162908},"_6-数据容器",[38,162910,162912],{"id":162911},"_61-什么是数据容器","6.1 什么是数据容器",[14,162914,162915],{},"数据容器用于一次保存多个数据。",[14,162917,162918],{},"常见容器：",[244,162920,162921,162938],{},[247,162922,162923],{},[250,162924,162925,162927,162930,162933,162936],{},[253,162926,25750],{},[253,162928,162929],{},"是否有序",[253,162931,162932],{},"是否可变",[253,162934,162935],{},"是否允许重复",[253,162937,27471],{},[291,162939,162940,162958,162974,162989,163006],{},[250,162941,162942,162945,162948,162951,162954],{},[296,162943,162944],{},"list列表",[296,162946,162947],{},"有序",[296,162949,162950],{},"可变",[296,162952,162953],{},"允许",[296,162955,162956],{},[93,162957,155236],{},[250,162959,162960,162963,162965,162968,162970],{},[296,162961,162962],{},"tuple元组",[296,162964,162947],{},[296,162966,162967],{},"不可变",[296,162969,162953],{},[296,162971,162972],{},[93,162973,155249],{},[250,162975,162976,162979,162981,162983,162985],{},[296,162977,162978],{},"str字符串",[296,162980,162947],{},[296,162982,162967],{},[296,162984,162953],{},[296,162986,162987],{},[93,162988,155859],{},[250,162990,162991,162994,162997,162999,163002],{},[296,162992,162993],{},"set集合",[296,162995,162996],{},"无序",[296,162998,162950],{},[296,163000,163001],{},"不允许",[296,163003,163004],{},[93,163005,155274],{},[250,163007,163008,163011,163013,163015,163018],{},[296,163009,163010],{},"dict字典",[296,163012,162947],{},[296,163014,162950],{},[296,163016,163017],{},"key不允许重复",[296,163019,163020],{},[93,163021,163022],{},"{\"name\": \"小明\"}",[14,163024,163025],{},"Python 3.7 之后，字典保持插入顺序。",[38,163027,163029],{"id":163028},"_62-列表list","6.2 列表list",[14,163031,163032],{},"列表用于保存一组有顺序的数据。",[87,163034,163036],{"className":30357,"code":163035,"language":30359,"meta":18,"style":18},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[93,163037,163038,163058,163083,163104],{"__ignoreMap":18},[96,163039,163040,163042,163044,163046,163048,163050,163052,163054,163056],{"class":98,"line":99},[96,163041,160359],{"class":106},[96,163043,152],{"class":102},[96,163045,52205],{"class":106},[96,163047,149867],{"class":211},[96,163049,12419],{"class":106},[96,163051,150915],{"class":211},[96,163053,12419],{"class":106},[96,163055,159710],{"class":211},[96,163057,33225],{"class":106},[96,163059,163060,163063,163065,163067,163069,163071,163073,163075,163077,163079,163081],{"class":98,"line":19},[96,163061,163062],{"class":106},"numbers ",[96,163064,152],{"class":102},[96,163066,52205],{"class":106},[96,163068,324],{"class":155},[96,163070,12419],{"class":106},[96,163072,184],{"class":155},[96,163074,12419],{"class":106},[96,163076,178],{"class":155},[96,163078,12419],{"class":106},[96,163080,400],{"class":155},[96,163082,33225],{"class":106},[96,163084,163085,163088,163090,163092,163094,163096,163098,163100,163102],{"class":98,"line":1162},[96,163086,163087],{"class":106},"mixed ",[96,163089,152],{"class":102},[96,163091,52205],{"class":106},[96,163093,149867],{"class":211},[96,163095,12419],{"class":106},[96,163097,757],{"class":155},[96,163099,12419],{"class":106},[96,163101,31455],{"class":155},[96,163103,33225],{"class":106},[96,163105,163106,163109,163111],{"class":98,"line":1177},[96,163107,163108],{"class":106},"empty ",[96,163110,152],{"class":102},[96,163112,51817],{"class":106},[14,163114,163115],{},"推荐一个列表中保存同类数据，代码更清晰。",[38,163117,163119],{"id":163118},"_63-列表索引","6.3 列表索引",[14,163121,163122],{},"正向索引从 0 开始：",[87,163124,163126],{"className":30357,"code":163125,"language":30359,"meta":18,"style":18},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[93,163127,163128,163148,163152,163163,163173],{"__ignoreMap":18},[96,163129,163130,163132,163134,163136,163138,163140,163142,163144,163146],{"class":98,"line":99},[96,163131,160359],{"class":106},[96,163133,152],{"class":102},[96,163135,52205],{"class":106},[96,163137,149867],{"class":211},[96,163139,12419],{"class":106},[96,163141,150915],{"class":211},[96,163143,12419],{"class":106},[96,163145,159710],{"class":211},[96,163147,33225],{"class":106},[96,163149,163150],{"class":98,"line":19},[96,163151,2383],{"emptyLinePlaceholder":23},[96,163153,163154,163156,163159,163161],{"class":98,"line":1162},[96,163155,30394],{"class":155},[96,163157,163158],{"class":106},"(names[",[96,163160,298],{"class":155},[96,163162,4640],{"class":106},[96,163164,163165,163167,163169,163171],{"class":98,"line":1177},[96,163166,30394],{"class":155},[96,163168,163158],{"class":106},[96,163170,324],{"class":155},[96,163172,4640],{"class":106},[96,163174,163175,163177,163179,163181],{"class":98,"line":1183},[96,163176,30394],{"class":155},[96,163178,163158],{"class":106},[96,163180,184],{"class":155},[96,163182,4640],{"class":106},[14,163184,163185],{},"反向索引从 -1 开始：",[87,163187,163189],{"className":30357,"code":163188,"language":30359,"meta":18,"style":18},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[93,163190,163191,163207],{"__ignoreMap":18},[96,163192,163193,163195,163197,163199,163201,163204],{"class":98,"line":99},[96,163194,30394],{"class":155},[96,163196,163158],{"class":106},[96,163198,639],{"class":102},[96,163200,324],{"class":155},[96,163202,163203],{"class":106},"])  ",[96,163205,163206],{"class":165},"# 小刚\n",[96,163208,163209,163211,163213,163215,163217,163219],{"class":98,"line":19},[96,163210,30394],{"class":155},[96,163212,163158],{"class":106},[96,163214,639],{"class":102},[96,163216,184],{"class":155},[96,163218,163203],{"class":106},[96,163220,163221],{"class":165},"# 小红\n",[14,163223,163224],{},"索引越界会报错：",[87,163226,163228],{"className":30357,"code":163227,"language":30359,"meta":18,"style":18},"print(names[3])\n",[93,163229,163230],{"__ignoreMap":18},[96,163231,163232,163234,163236,163238],{"class":98,"line":99},[96,163233,30394],{"class":155},[96,163235,163158],{"class":106},[96,163237,178],{"class":155},[96,163239,4640],{"class":106},[38,163241,163243],{"id":163242},"_64-列表常用方法","6.4 列表常用方法",[87,163245,163247],{"className":30357,"code":163246,"language":30359,"meta":18,"style":18},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[93,163248,163249,163265,163269,163278,163292,163306,163310],{"__ignoreMap":18},[96,163250,163251,163253,163255,163257,163259,163261,163263],{"class":98,"line":99},[96,163252,160359],{"class":106},[96,163254,152],{"class":102},[96,163256,52205],{"class":106},[96,163258,149867],{"class":211},[96,163260,12419],{"class":106},[96,163262,150915],{"class":211},[96,163264,33225],{"class":106},[96,163266,163267],{"class":98,"line":19},[96,163268,2383],{"emptyLinePlaceholder":23},[96,163270,163271,163274,163276],{"class":98,"line":1162},[96,163272,163273],{"class":106},"names.append(",[96,163275,159710],{"class":211},[96,163277,113],{"class":106},[96,163279,163280,163283,163285,163287,163290],{"class":98,"line":1177},[96,163281,163282],{"class":106},"names.insert(",[96,163284,324],{"class":155},[96,163286,12419],{"class":106},[96,163288,163289],{"class":211},"\"小李\"",[96,163291,113],{"class":106},[96,163293,163294,163297,163299,163301,163304],{"class":98,"line":1183},[96,163295,163296],{"class":106},"names.extend([",[96,163298,8667],{"class":211},[96,163300,12419],{"class":106},[96,163302,163303],{"class":211},"\"小赵\"",[96,163305,4640],{"class":106},[96,163307,163308],{"class":98,"line":1197},[96,163309,2383],{"emptyLinePlaceholder":23},[96,163311,163312,163314],{"class":98,"line":1203},[96,163313,30394],{"class":155},[96,163315,163316],{"class":106},"(names)\n",[14,163318,163319],{},"删除元素：",[87,163321,163323],{"className":30357,"code":163322,"language":30359,"meta":18,"style":18},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[93,163324,163325,163334,163344,163358,163370],{"__ignoreMap":18},[96,163326,163327,163330,163332],{"class":98,"line":99},[96,163328,163329],{"class":106},"names.remove(",[96,163331,150915],{"class":211},[96,163333,113],{"class":106},[96,163335,163336,163339,163341],{"class":98,"line":19},[96,163337,163338],{"class":106},"last ",[96,163340,152],{"class":102},[96,163342,163343],{"class":106}," names.pop()\n",[96,163345,163346,163349,163351,163354,163356],{"class":98,"line":1162},[96,163347,163348],{"class":106},"first ",[96,163350,152],{"class":102},[96,163352,163353],{"class":106}," names.pop(",[96,163355,298],{"class":155},[96,163357,113],{"class":106},[96,163359,163360,163363,163366,163368],{"class":98,"line":1177},[96,163361,163362],{"class":102},"del",[96,163364,163365],{"class":106}," names[",[96,163367,298],{"class":155},[96,163369,33225],{"class":106},[96,163371,163372],{"class":98,"line":1183},[96,163373,163374],{"class":106},"names.clear()\n",[14,163376,163377],{},"查询和统计：",[87,163379,163381],{"className":30357,"code":163380,"language":30359,"meta":18,"style":18},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[93,163382,163383,163411,163415,163426,163437],{"__ignoreMap":18},[96,163384,163385,163387,163389,163391,163393,163395,163397,163399,163401,163403,163405,163407,163409],{"class":98,"line":99},[96,163386,163062],{"class":106},[96,163388,152],{"class":102},[96,163390,52205],{"class":106},[96,163392,324],{"class":155},[96,163394,12419],{"class":106},[96,163396,184],{"class":155},[96,163398,12419],{"class":106},[96,163400,178],{"class":155},[96,163402,12419],{"class":106},[96,163404,184],{"class":155},[96,163406,12419],{"class":106},[96,163408,400],{"class":155},[96,163410,33225],{"class":106},[96,163412,163413],{"class":98,"line":19},[96,163414,2383],{"emptyLinePlaceholder":23},[96,163416,163417,163419,163422,163424],{"class":98,"line":1162},[96,163418,30394],{"class":155},[96,163420,163421],{"class":106},"(numbers.index(",[96,163423,178],{"class":155},[96,163425,30476],{"class":106},[96,163427,163428,163430,163433,163435],{"class":98,"line":1177},[96,163429,30394],{"class":155},[96,163431,163432],{"class":106},"(numbers.count(",[96,163434,184],{"class":155},[96,163436,30476],{"class":106},[96,163438,163439,163441,163443,163445],{"class":98,"line":1183},[96,163440,30394],{"class":155},[96,163442,107],{"class":106},[96,163444,7342],{"class":155},[96,163446,163447],{"class":106},"(numbers))\n",[14,163449,163450],{},"排序：",[87,163452,163454],{"className":30357,"code":163453,"language":30359,"meta":18,"style":18},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[93,163455,163456,163480,163484,163489,163496,163500,163514,163520,163524,163529],{"__ignoreMap":18},[96,163457,163458,163460,163462,163464,163466,163468,163470,163472,163474,163476,163478],{"class":98,"line":99},[96,163459,163062],{"class":106},[96,163461,152],{"class":102},[96,163463,52205],{"class":106},[96,163465,178],{"class":155},[96,163467,12419],{"class":106},[96,163469,324],{"class":155},[96,163471,12419],{"class":106},[96,163473,426],{"class":155},[96,163475,12419],{"class":106},[96,163477,184],{"class":155},[96,163479,33225],{"class":106},[96,163481,163482],{"class":98,"line":19},[96,163483,2383],{"emptyLinePlaceholder":23},[96,163485,163486],{"class":98,"line":1162},[96,163487,163488],{"class":106},"numbers.sort()\n",[96,163490,163491,163493],{"class":98,"line":1177},[96,163492,30394],{"class":155},[96,163494,163495],{"class":106},"(numbers)\n",[96,163497,163498],{"class":98,"line":1183},[96,163499,2383],{"emptyLinePlaceholder":23},[96,163501,163502,163505,163508,163510,163512],{"class":98,"line":1197},[96,163503,163504],{"class":106},"numbers.sort(",[96,163506,163507],{"class":5200},"reverse",[96,163509,152],{"class":102},[96,163511,31455],{"class":155},[96,163513,113],{"class":106},[96,163515,163516,163518],{"class":98,"line":1203},[96,163517,30394],{"class":155},[96,163519,163495],{"class":106},[96,163521,163522],{"class":98,"line":1294},[96,163523,2383],{"emptyLinePlaceholder":23},[96,163525,163526],{"class":98,"line":1300},[96,163527,163528],{"class":106},"numbers.reverse()\n",[96,163530,163531,163533],{"class":98,"line":1312},[96,163532,30394],{"class":155},[96,163534,163495],{"class":106},[14,163536,163537,163540,163541,163544],{},[93,163538,163539],{},"sort()"," 会修改原列表，",[93,163542,163543],{},"sorted()"," 返回新列表。",[87,163546,163548],{"className":30357,"code":163547,"language":30359,"meta":18,"style":18},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[93,163549,163550,163574,163586,163590,163596],{"__ignoreMap":18},[96,163551,163552,163554,163556,163558,163560,163562,163564,163566,163568,163570,163572],{"class":98,"line":99},[96,163553,163062],{"class":106},[96,163555,152],{"class":102},[96,163557,52205],{"class":106},[96,163559,178],{"class":155},[96,163561,12419],{"class":106},[96,163563,324],{"class":155},[96,163565,12419],{"class":106},[96,163567,426],{"class":155},[96,163569,12419],{"class":106},[96,163571,184],{"class":155},[96,163573,33225],{"class":106},[96,163575,163576,163579,163581,163584],{"class":98,"line":19},[96,163577,163578],{"class":106},"new_numbers ",[96,163580,152],{"class":102},[96,163582,163583],{"class":155}," sorted",[96,163585,163495],{"class":106},[96,163587,163588],{"class":98,"line":1162},[96,163589,2383],{"emptyLinePlaceholder":23},[96,163591,163592,163594],{"class":98,"line":1177},[96,163593,30394],{"class":155},[96,163595,163495],{"class":106},[96,163597,163598,163600],{"class":98,"line":1183},[96,163599,30394],{"class":155},[96,163601,163602],{"class":106},"(new_numbers)\n",[38,163604,163606],{"id":163605},"_65-列表遍历","6.5 列表遍历",[87,163608,163610],{"className":30357,"code":163609,"language":30359,"meta":18,"style":18},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[93,163611,163612,163632,163636,163646],{"__ignoreMap":18},[96,163613,163614,163616,163618,163620,163622,163624,163626,163628,163630],{"class":98,"line":99},[96,163615,160359],{"class":106},[96,163617,152],{"class":102},[96,163619,52205],{"class":106},[96,163621,149867],{"class":211},[96,163623,12419],{"class":106},[96,163625,150915],{"class":211},[96,163627,12419],{"class":106},[96,163629,159710],{"class":211},[96,163631,33225],{"class":106},[96,163633,163634],{"class":98,"line":19},[96,163635,2383],{"emptyLinePlaceholder":23},[96,163637,163638,163640,163642,163644],{"class":98,"line":1162},[96,163639,3008],{"class":102},[96,163641,160395],{"class":106},[96,163643,26022],{"class":102},[96,163645,160400],{"class":106},[96,163647,163648,163650],{"class":98,"line":1177},[96,163649,31278],{"class":155},[96,163651,150639],{"class":106},[14,163653,163654],{},"需要索引时：",[87,163656,163658],{"className":30357,"code":163657,"language":30359,"meta":18,"style":18},"for index, name in enumerate(names):\n    print(index, name)\n",[93,163659,163660,163674],{"__ignoreMap":18},[96,163661,163662,163664,163667,163669,163671],{"class":98,"line":99},[96,163663,3008],{"class":102},[96,163665,163666],{"class":106}," index, name ",[96,163668,26022],{"class":102},[96,163670,31585],{"class":155},[96,163672,163673],{"class":106},"(names):\n",[96,163675,163676,163678],{"class":98,"line":19},[96,163677,31278],{"class":155},[96,163679,163680],{"class":106},"(index, name)\n",[14,163682,163683],{},"统计总分：",[87,163685,163687],{"className":30357,"code":163686,"language":30359,"meta":18,"style":18},"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",[93,163688,163689,163714,163722,163726,163737,163745,163749,163766],{"__ignoreMap":18},[96,163690,163691,163694,163696,163698,163700,163702,163704,163706,163708,163710,163712],{"class":98,"line":99},[96,163692,163693],{"class":106},"scores ",[96,163695,152],{"class":102},[96,163697,52205],{"class":106},[96,163699,969],{"class":155},[96,163701,12419],{"class":106},[96,163703,843],{"class":155},[96,163705,12419],{"class":106},[96,163707,361],{"class":155},[96,163709,12419],{"class":106},[96,163711,668],{"class":155},[96,163713,33225],{"class":106},[96,163715,163716,163718,163720],{"class":98,"line":19},[96,163717,157239],{"class":106},[96,163719,152],{"class":102},[96,163721,47312],{"class":155},[96,163723,163724],{"class":98,"line":1162},[96,163725,2383],{"emptyLinePlaceholder":23},[96,163727,163728,163730,163732,163734],{"class":98,"line":1177},[96,163729,3008],{"class":102},[96,163731,157762],{"class":106},[96,163733,26022],{"class":102},[96,163735,163736],{"class":106}," scores:\n",[96,163738,163739,163741,163743],{"class":98,"line":1183},[96,163740,159286],{"class":106},[96,163742,9461],{"class":102},[96,163744,1562],{"class":106},[96,163746,163747],{"class":98,"line":1197},[96,163748,2383],{"emptyLinePlaceholder":23},[96,163750,163751,163754,163756,163759,163761,163763],{"class":98,"line":1203},[96,163752,163753],{"class":106},"avg ",[96,163755,152],{"class":102},[96,163757,163758],{"class":106}," total ",[96,163760,691],{"class":102},[96,163762,7315],{"class":155},[96,163764,163765],{"class":106},"(scores)\n",[96,163767,163768,163770,163772,163774,163777,163779,163782,163784,163786,163788],{"class":98,"line":1294},[96,163769,30394],{"class":155},[96,163771,107],{"class":106},[96,163773,159],{"class":102},[96,163775,163776],{"class":211},"\"平均分:",[96,163778,1003],{"class":155},[96,163780,163781],{"class":106},"avg",[96,163783,157138],{"class":102},[96,163785,1053],{"class":155},[96,163787,358],{"class":211},[96,163789,113],{"class":106},[38,163791,163793],{"id":163792},"_66-元组tuple","6.6 元组tuple",[14,163795,163796],{},"元组和列表类似，但不可修改。",[87,163798,163800],{"className":30357,"code":163799,"language":30359,"meta":18,"style":18},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[93,163801,163802,163819],{"__ignoreMap":18},[96,163803,163804,163807,163809,163811,163813,163815,163817],{"class":98,"line":99},[96,163805,163806],{"class":106},"point ",[96,163808,152],{"class":102},[96,163810,1641],{"class":106},[96,163812,553],{"class":155},[96,163814,12419],{"class":106},[96,163816,807],{"class":155},[96,163818,113],{"class":106},[96,163820,163821,163823,163825,163827,163829,163831,163833,163835,163837],{"class":98,"line":19},[96,163822,116293],{"class":106},[96,163824,152],{"class":102},[96,163826,1641],{"class":106},[96,163828,149867],{"class":211},[96,163830,12419],{"class":106},[96,163832,757],{"class":155},[96,163834,12419],{"class":106},[96,163836,69248],{"class":211},[96,163838,113],{"class":106},[14,163840,163841],{},"单元素元组必须加逗号：",[87,163843,163845],{"className":30357,"code":163844,"language":30359,"meta":18,"style":18},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[93,163846,163847,163861,163874,163878,163892],{"__ignoreMap":18},[96,163848,163849,163852,163854,163856,163858],{"class":98,"line":99},[96,163850,163851],{"class":106},"t1 ",[96,163853,152],{"class":102},[96,163855,1641],{"class":106},[96,163857,553],{"class":155},[96,163859,163860],{"class":106},",)\n",[96,163862,163863,163866,163868,163870,163872],{"class":98,"line":19},[96,163864,163865],{"class":106},"t2 ",[96,163867,152],{"class":102},[96,163869,1641],{"class":106},[96,163871,553],{"class":155},[96,163873,113],{"class":106},[96,163875,163876],{"class":98,"line":1162},[96,163877,2383],{"emptyLinePlaceholder":23},[96,163879,163880,163882,163884,163886,163889],{"class":98,"line":1177},[96,163881,30394],{"class":155},[96,163883,107],{"class":106},[96,163885,103086],{"class":155},[96,163887,163888],{"class":106},"(t1))  ",[96,163890,163891],{"class":165},"# tuple\n",[96,163893,163894,163896,163898,163900,163903],{"class":98,"line":1183},[96,163895,30394],{"class":155},[96,163897,107],{"class":106},[96,163899,103086],{"class":155},[96,163901,163902],{"class":106},"(t2))  ",[96,163904,163905],{"class":165},"# int\n",[14,163907,163908],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[38,163910,163912],{"id":163911},"_67-字符串str","6.7 字符串str",[14,163914,163915],{},"字符串也是序列，可以索引、切片和遍历。",[87,163917,163919],{"className":30357,"code":163918,"language":30359,"meta":18,"style":18},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[93,163920,163921,163929,163933,163944,163956,163960,163971],{"__ignoreMap":18},[96,163922,163923,163925,163927],{"class":98,"line":99},[96,163924,156423],{"class":106},[96,163926,152],{"class":102},[96,163928,159660],{"class":211},[96,163930,163931],{"class":98,"line":19},[96,163932,2383],{"emptyLinePlaceholder":23},[96,163934,163935,163937,163940,163942],{"class":98,"line":1162},[96,163936,30394],{"class":155},[96,163938,163939],{"class":106},"(text[",[96,163941,298],{"class":155},[96,163943,4640],{"class":106},[96,163945,163946,163948,163950,163952,163954],{"class":98,"line":1177},[96,163947,30394],{"class":155},[96,163949,163939],{"class":106},[96,163951,639],{"class":102},[96,163953,324],{"class":155},[96,163955,4640],{"class":106},[96,163957,163958],{"class":98,"line":1183},[96,163959,2383],{"emptyLinePlaceholder":23},[96,163961,163962,163964,163966,163968],{"class":98,"line":1197},[96,163963,3008],{"class":102},[96,163965,159671],{"class":106},[96,163967,26022],{"class":102},[96,163969,163970],{"class":106}," text:\n",[96,163972,163973,163975],{"class":98,"line":1203},[96,163974,31278],{"class":155},[96,163976,159682],{"class":106},[14,163978,163979],{},"字符串不可变：",[87,163981,163983],{"className":30357,"code":163982,"language":30359,"meta":18,"style":18},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[93,163984,163985,163993],{"__ignoreMap":18},[96,163986,163987,163989,163991],{"class":98,"line":99},[96,163988,156423],{"class":106},[96,163990,152],{"class":102},[96,163992,159660],{"class":211},[96,163994,163995,163998,164000,164002,164004,164007],{"class":98,"line":19},[96,163996,163997],{"class":106},"text[",[96,163999,298],{"class":155},[96,164001,4426],{"class":106},[96,164003,152],{"class":102},[96,164005,164006],{"class":211}," \"P\"",[96,164008,164009],{"class":165},"  # 报错\n",[14,164011,164012],{},"如果要得到新字符串：",[87,164014,164016],{"className":30357,"code":164015,"language":30359,"meta":18,"style":18},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[93,164017,164018,164026,164044],{"__ignoreMap":18},[96,164019,164020,164022,164024],{"class":98,"line":99},[96,164021,156423],{"class":106},[96,164023,152],{"class":102},[96,164025,159660],{"class":211},[96,164027,164028,164030,164032,164034,164036,164039,164041],{"class":98,"line":19},[96,164029,156423],{"class":106},[96,164031,152],{"class":102},[96,164033,164006],{"class":211},[96,164035,45545],{"class":102},[96,164037,164038],{"class":106}," text[",[96,164040,324],{"class":155},[96,164042,164043],{"class":106},":]\n",[96,164045,164046,164048],{"class":98,"line":1162},[96,164047,30394],{"class":155},[96,164049,164050],{"class":106},"(text)\n",[38,164052,164054],{"id":164053},"_68-切片","6.8 切片",[14,164056,164057],{},"切片用于从序列中取一部分。",[87,164059,164061],{"className":30357,"code":164060,"language":30359,"meta":18,"style":18},"序列[开始:结束:步长]\n",[93,164062,164063],{"__ignoreMap":18},[96,164064,164065],{"class":98,"line":99},[96,164066,164060],{"class":106},[14,164068,164069],{},"结束位置不包含。",[87,164071,164073],{"className":30357,"code":164072,"language":30359,"meta":18,"style":18},"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",[93,164074,164075,164112,164116,164135,164150,164164,164178],{"__ignoreMap":18},[96,164076,164077,164080,164082,164084,164086,164088,164090,164092,164094,164096,164098,164100,164102,164104,164106,164108,164110],{"class":98,"line":99},[96,164078,164079],{"class":106},"nums ",[96,164081,152],{"class":102},[96,164083,52205],{"class":106},[96,164085,298],{"class":155},[96,164087,12419],{"class":106},[96,164089,324],{"class":155},[96,164091,12419],{"class":106},[96,164093,184],{"class":155},[96,164095,12419],{"class":106},[96,164097,178],{"class":155},[96,164099,12419],{"class":106},[96,164101,400],{"class":155},[96,164103,12419],{"class":106},[96,164105,426],{"class":155},[96,164107,12419],{"class":106},[96,164109,451],{"class":155},[96,164111,33225],{"class":106},[96,164113,164114],{"class":98,"line":19},[96,164115,2383],{"emptyLinePlaceholder":23},[96,164117,164118,164120,164123,164125,164127,164129,164132],{"class":98,"line":1162},[96,164119,30394],{"class":155},[96,164121,164122],{"class":106},"(nums[",[96,164124,324],{"class":155},[96,164126,966],{"class":106},[96,164128,400],{"class":155},[96,164130,164131],{"class":106},"])    ",[96,164133,164134],{"class":165},"# [1, 2, 3]\n",[96,164136,164137,164139,164142,164144,164147],{"class":98,"line":1177},[96,164138,30394],{"class":155},[96,164140,164141],{"class":106},"(nums[:",[96,164143,178],{"class":155},[96,164145,164146],{"class":106},"])     ",[96,164148,164149],{"class":165},"# [0, 1, 2]\n",[96,164151,164152,164154,164156,164158,164161],{"class":98,"line":1183},[96,164153,30394],{"class":155},[96,164155,164122],{"class":106},[96,164157,178],{"class":155},[96,164159,164160],{"class":106},":])     ",[96,164162,164163],{"class":165},"# [3, 4, 5, 6]\n",[96,164165,164166,164168,164171,164173,164175],{"class":98,"line":1197},[96,164167,30394],{"class":155},[96,164169,164170],{"class":106},"(nums[::",[96,164172,184],{"class":155},[96,164174,164131],{"class":106},[96,164176,164177],{"class":165},"# [0, 2, 4, 6]\n",[96,164179,164180,164182,164184,164186,164188,164191],{"class":98,"line":1203},[96,164181,30394],{"class":155},[96,164183,164170],{"class":106},[96,164185,639],{"class":102},[96,164187,324],{"class":155},[96,164189,164190],{"class":106},"])   ",[96,164192,164193],{"class":165},"# 反转\n",[14,164195,164196],{},"字符串切片：",[87,164198,164200],{"className":30357,"code":164199,"language":30359,"meta":18,"style":18},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[93,164201,164202,164211,164225],{"__ignoreMap":18},[96,164203,164204,164206,164208],{"class":98,"line":99},[96,164205,156423],{"class":106},[96,164207,152],{"class":102},[96,164209,164210],{"class":211}," \"abcdef\"\n",[96,164212,164213,164215,164217,164219,164221,164223],{"class":98,"line":19},[96,164214,30394],{"class":155},[96,164216,163939],{"class":106},[96,164218,324],{"class":155},[96,164220,966],{"class":106},[96,164222,400],{"class":155},[96,164224,4640],{"class":106},[96,164226,164227,164229,164232,164234,164236],{"class":98,"line":1162},[96,164228,30394],{"class":155},[96,164230,164231],{"class":106},"(text[::",[96,164233,639],{"class":102},[96,164235,324],{"class":155},[96,164237,4640],{"class":106},[38,164239,164241],{"id":164240},"_69-集合set","6.9 集合set",[14,164243,164244],{},"集合特点：",[50,164246,164247,164250,164253],{},[53,164248,164249],{},"无序。",[53,164251,164252],{},"元素不重复。",[53,164254,164255],{},"可以做交集、并集、差集。",[87,164257,164259],{"className":30357,"code":164258,"language":30359,"meta":18,"style":18},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[93,164260,164261,164289],{"__ignoreMap":18},[96,164262,164263,164265,164267,164269,164271,164273,164275,164277,164279,164281,164283,164285,164287],{"class":98,"line":99},[96,164264,164079],{"class":106},[96,164266,152],{"class":102},[96,164268,4431],{"class":106},[96,164270,324],{"class":155},[96,164272,12419],{"class":106},[96,164274,184],{"class":155},[96,164276,12419],{"class":106},[96,164278,178],{"class":155},[96,164280,12419],{"class":106},[96,164282,178],{"class":155},[96,164284,12419],{"class":106},[96,164286,400],{"class":155},[96,164288,1548],{"class":106},[96,164290,164291,164293],{"class":98,"line":19},[96,164292,30394],{"class":155},[96,164294,164295],{"class":106},"(nums)\n",[14,164297,164298],{},"创建空集合：",[87,164300,164302],{"className":30357,"code":164301,"language":30359,"meta":18,"style":18},"s = set()\n",[93,164303,164304],{"__ignoreMap":18},[96,164305,164306,164308,164310,164312],{"class":98,"line":99},[96,164307,10563],{"class":106},[96,164309,152],{"class":102},[96,164311,119701],{"class":155},[96,164313,1959],{"class":106},[14,164315,9009,164316,164318],{},[93,164317,32438],{}," 是空字典，不是空集合。",[14,164320,164321],{},"集合常用操作：",[87,164323,164325],{"className":30357,"code":164324,"language":30359,"meta":18,"style":18},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[93,164326,164327,164347,164351,164360,164369,164378],{"__ignoreMap":18},[96,164328,164329,164331,164333,164335,164337,164339,164341,164343,164345],{"class":98,"line":99},[96,164330,10563],{"class":106},[96,164332,152],{"class":102},[96,164334,4431],{"class":106},[96,164336,324],{"class":155},[96,164338,12419],{"class":106},[96,164340,184],{"class":155},[96,164342,12419],{"class":106},[96,164344,178],{"class":155},[96,164346,1548],{"class":106},[96,164348,164349],{"class":98,"line":19},[96,164350,2383],{"emptyLinePlaceholder":23},[96,164352,164353,164356,164358],{"class":98,"line":1162},[96,164354,164355],{"class":106},"s.add(",[96,164357,400],{"class":155},[96,164359,113],{"class":106},[96,164361,164362,164365,164367],{"class":98,"line":1177},[96,164363,164364],{"class":106},"s.remove(",[96,164366,184],{"class":155},[96,164368,113],{"class":106},[96,164370,164371,164374,164376],{"class":98,"line":1183},[96,164372,164373],{"class":106},"s.discard(",[96,164375,553],{"class":155},[96,164377,113],{"class":106},[96,164379,164380,164382,164384,164386],{"class":98,"line":1197},[96,164381,30394],{"class":155},[96,164383,107],{"class":106},[96,164385,7342],{"class":155},[96,164387,164388],{"class":106},"(s))\n",[14,164390,164391],{},"交并差：",[87,164393,164395],{"className":30357,"code":164394,"language":30359,"meta":18,"style":18},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[93,164396,164397,164417,164437,164441,164456,164469],{"__ignoreMap":18},[96,164398,164399,164401,164403,164405,164407,164409,164411,164413,164415],{"class":98,"line":99},[96,164400,10903],{"class":106},[96,164402,152],{"class":102},[96,164404,4431],{"class":106},[96,164406,324],{"class":155},[96,164408,12419],{"class":106},[96,164410,184],{"class":155},[96,164412,12419],{"class":106},[96,164414,178],{"class":155},[96,164416,1548],{"class":106},[96,164418,164419,164421,164423,164425,164427,164429,164431,164433,164435],{"class":98,"line":19},[96,164420,10929],{"class":106},[96,164422,152],{"class":102},[96,164424,4431],{"class":106},[96,164426,178],{"class":155},[96,164428,12419],{"class":106},[96,164430,400],{"class":155},[96,164432,12419],{"class":106},[96,164434,426],{"class":155},[96,164436,1548],{"class":106},[96,164438,164439],{"class":98,"line":1162},[96,164440,2383],{"emptyLinePlaceholder":23},[96,164442,164443,164445,164448,164450,164453],{"class":98,"line":1177},[96,164444,30394],{"class":155},[96,164446,164447],{"class":106},"(a ",[96,164449,460],{"class":102},[96,164451,164452],{"class":106}," b)  ",[96,164454,164455],{"class":165},"# 交集\n",[96,164457,164458,164460,164462,164464,164466],{"class":98,"line":1183},[96,164459,30394],{"class":155},[96,164461,164447],{"class":106},[96,164463,1028],{"class":102},[96,164465,164452],{"class":106},[96,164467,164468],{"class":165},"# 并集\n",[96,164470,164471,164473,164475,164477,164479],{"class":98,"line":1197},[96,164472,30394],{"class":155},[96,164474,164447],{"class":106},[96,164476,639],{"class":102},[96,164478,164452],{"class":106},[96,164480,164481],{"class":165},"# 差集\n",[38,164483,164485],{"id":164484},"_610-字典dict","6.10 字典dict",[14,164487,164488],{},"字典通过 key-value 保存数据。",[87,164490,164492],{"className":30357,"code":164491,"language":30359,"meta":18,"style":18},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[93,164493,164494,164502,164512,164523,164533],{"__ignoreMap":18},[96,164495,164496,164498,164500],{"class":98,"line":99},[96,164497,149460],{"class":106},[96,164499,152],{"class":102},[96,164501,15556],{"class":106},[96,164503,164504,164506,164508,164510],{"class":98,"line":19},[96,164505,146999],{"class":211},[96,164507,51416],{"class":106},[96,164509,149867],{"class":211},[96,164511,31445],{"class":106},[96,164513,164514,164517,164519,164521],{"class":98,"line":1162},[96,164515,164516],{"class":211},"    \"age\"",[96,164518,51416],{"class":106},[96,164520,757],{"class":155},[96,164522,31445],{"class":106},[96,164524,164525,164528,164530],{"class":98,"line":1177},[96,164526,164527],{"class":211},"    \"score\"",[96,164529,51416],{"class":106},[96,164531,164532],{"class":155},"95\n",[96,164534,164535],{"class":98,"line":1183},[96,164536,1548],{"class":106},[14,164538,164539],{},"获取值：",[87,164541,164543],{"className":30357,"code":164542,"language":30359,"meta":18,"style":18},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[93,164544,164545,164556],{"__ignoreMap":18},[96,164546,164547,164549,164552,164554],{"class":98,"line":99},[96,164548,30394],{"class":155},[96,164550,164551],{"class":106},"(student[",[96,164553,62658],{"class":211},[96,164555,4640],{"class":106},[96,164557,164558,164560,164563,164565],{"class":98,"line":19},[96,164559,30394],{"class":155},[96,164561,164562],{"class":106},"(student.get(",[96,164564,62658],{"class":211},[96,164566,30476],{"class":106},[14,164568,15372],{},[87,164570,164572],{"className":30357,"code":164571,"language":30359,"meta":18,"style":18},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[93,164573,164574,164587],{"__ignoreMap":18},[96,164575,164576,164578,164581,164584],{"class":98,"line":99},[96,164577,152838],{"class":106},[96,164579,164580],{"class":211},"\"address\"",[96,164582,164583],{"class":106},"]     ",[96,164585,164586],{"class":165},"# key不存在会报错\n",[96,164588,164589,164592,164594,164596],{"class":98,"line":19},[96,164590,164591],{"class":106},"student.get(",[96,164593,164580],{"class":211},[96,164595,13698],{"class":106},[96,164597,164598],{"class":165},"# key不存在返回None\n",[14,164600,164601],{},"设置默认值：",[87,164603,164605],{"className":30357,"code":164604,"language":30359,"meta":18,"style":18},"print(student.get(\"address\", \"未知\"))\n",[93,164606,164607],{"__ignoreMap":18},[96,164608,164609,164611,164613,164615,164617,164620],{"class":98,"line":99},[96,164610,30394],{"class":155},[96,164612,164562],{"class":106},[96,164614,164580],{"class":211},[96,164616,12419],{"class":106},[96,164618,164619],{"class":211},"\"未知\"",[96,164621,30476],{"class":106},[14,164623,164624],{},"新增和修改：",[87,164626,164628],{"className":30357,"code":164627,"language":30359,"meta":18,"style":18},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[93,164629,164630,164643],{"__ignoreMap":18},[96,164631,164632,164634,164636,164638,164640],{"class":98,"line":99},[96,164633,152838],{"class":106},[96,164635,69103],{"class":211},[96,164637,4426],{"class":106},[96,164639,152],{"class":102},[96,164641,164642],{"class":155}," 19\n",[96,164644,164645,164647,164649,164651,164653],{"class":98,"line":19},[96,164646,152838],{"class":106},[96,164648,164580],{"class":211},[96,164650,4426],{"class":106},[96,164652,152],{"class":102},[96,164654,164655],{"class":211}," \"北京\"\n",[14,164657,164658],{},"删除：",[87,164660,164662],{"className":30357,"code":164661,"language":30359,"meta":18,"style":18},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[93,164663,164664,164677,164687],{"__ignoreMap":18},[96,164665,164666,164668,164670,164673,164675],{"class":98,"line":99},[96,164667,155337],{"class":106},[96,164669,152],{"class":102},[96,164671,164672],{"class":106}," student.pop(",[96,164674,151451],{"class":211},[96,164676,113],{"class":106},[96,164678,164679,164681,164683,164685],{"class":98,"line":19},[96,164680,163362],{"class":102},[96,164682,152128],{"class":106},[96,164684,69103],{"class":211},[96,164686,33225],{"class":106},[96,164688,164689],{"class":98,"line":1162},[96,164690,164691],{"class":106},"student.clear()\n",[38,164693,164695],{"id":164694},"_611-字典遍历","6.11 字典遍历",[14,164697,164698],{},"遍历 key：",[87,164700,164702],{"className":30357,"code":164701,"language":30359,"meta":18,"style":18},"for key in student:\n    print(key, student[key])\n",[93,164703,164704,164716],{"__ignoreMap":18},[96,164705,164706,164708,164711,164713],{"class":98,"line":99},[96,164707,3008],{"class":102},[96,164709,164710],{"class":106}," key ",[96,164712,26022],{"class":102},[96,164714,164715],{"class":106}," student:\n",[96,164717,164718,164720],{"class":98,"line":19},[96,164719,31278],{"class":155},[96,164721,164722],{"class":106},"(key, student[key])\n",[14,164724,164725],{},"遍历 value：",[87,164727,164729],{"className":30357,"code":164728,"language":30359,"meta":18,"style":18},"for value in student.values():\n    print(value)\n",[93,164730,164731,164743],{"__ignoreMap":18},[96,164732,164733,164735,164738,164740],{"class":98,"line":99},[96,164734,3008],{"class":102},[96,164736,164737],{"class":106}," value ",[96,164739,26022],{"class":102},[96,164741,164742],{"class":106}," student.values():\n",[96,164744,164745,164747],{"class":98,"line":19},[96,164746,31278],{"class":155},[96,164748,164749],{"class":106},"(value)\n",[14,164751,164752],{},"遍历 key 和 value：",[87,164754,164756],{"className":30357,"code":164755,"language":30359,"meta":18,"style":18},"for key, value in student.items():\n    print(key, value)\n",[93,164757,164758,164770],{"__ignoreMap":18},[96,164759,164760,164762,164765,164767],{"class":98,"line":99},[96,164761,3008],{"class":102},[96,164763,164764],{"class":106}," key, value ",[96,164766,26022],{"class":102},[96,164768,164769],{"class":106}," student.items():\n",[96,164771,164772,164774],{"class":98,"line":19},[96,164773,31278],{"class":155},[96,164775,164776],{"class":106},"(key, value)\n",[38,164778,164780],{"id":164779},"_612-嵌套容器","6.12 嵌套容器",[14,164782,164783],{},"列表中保存字典，是项目中最常见的结构之一。",[87,164785,164787],{"className":30357,"code":164786,"language":30359,"meta":18,"style":18},"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",[93,164788,164789,164797,164825,164853,164881,164885,164889,164899],{"__ignoreMap":18},[96,164790,164791,164793,164795],{"class":98,"line":99},[96,164792,159695],{"class":106},[96,164794,152],{"class":102},[96,164796,55426],{"class":106},[96,164798,164799,164801,164803,164805,164807,164809,164811,164813,164815,164817,164819,164821,164823],{"class":98,"line":19},[96,164800,148364],{"class":106},[96,164802,62658],{"class":211},[96,164804,51416],{"class":106},[96,164806,149867],{"class":211},[96,164808,12419],{"class":106},[96,164810,69103],{"class":211},[96,164812,51416],{"class":106},[96,164814,757],{"class":155},[96,164816,12419],{"class":106},[96,164818,151451],{"class":211},[96,164820,51416],{"class":106},[96,164822,1096],{"class":155},[96,164824,4913],{"class":106},[96,164826,164827,164829,164831,164833,164835,164837,164839,164841,164843,164845,164847,164849,164851],{"class":98,"line":1162},[96,164828,148364],{"class":106},[96,164830,62658],{"class":211},[96,164832,51416],{"class":106},[96,164834,150915],{"class":211},[96,164836,12419],{"class":106},[96,164838,69103],{"class":211},[96,164840,51416],{"class":106},[96,164842,732],{"class":155},[96,164844,12419],{"class":106},[96,164846,151451],{"class":211},[96,164848,51416],{"class":106},[96,164850,918],{"class":155},[96,164852,4913],{"class":106},[96,164854,164855,164857,164859,164861,164863,164865,164867,164869,164871,164873,164875,164877,164879],{"class":98,"line":1177},[96,164856,148364],{"class":106},[96,164858,62658],{"class":211},[96,164860,51416],{"class":106},[96,164862,159710],{"class":211},[96,164864,12419],{"class":106},[96,164866,69103],{"class":211},[96,164868,51416],{"class":106},[96,164870,782],{"class":155},[96,164872,12419],{"class":106},[96,164874,151451],{"class":211},[96,164876,51416],{"class":106},[96,164878,513],{"class":155},[96,164880,4913],{"class":106},[96,164882,164883],{"class":98,"line":1183},[96,164884,33225],{"class":106},[96,164886,164887],{"class":98,"line":1197},[96,164888,2383],{"emptyLinePlaceholder":23},[96,164890,164891,164893,164895,164897],{"class":98,"line":1203},[96,164892,3008],{"class":102},[96,164894,152116],{"class":106},[96,164896,26022],{"class":102},[96,164898,152121],{"class":106},[96,164900,164901,164903,164905,164907,164910,164912],{"class":98,"line":1294},[96,164902,31278],{"class":155},[96,164904,164551],{"class":106},[96,164906,62658],{"class":211},[96,164908,164909],{"class":106},"], student[",[96,164911,151451],{"class":211},[96,164913,4640],{"class":106},[14,164915,164916],{},"统计平均分：",[87,164918,164920],{"className":30357,"code":164919,"language":30359,"meta":18,"style":18},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[93,164921,164922,164930,164934,164944,164956,164960,164975],{"__ignoreMap":18},[96,164923,164924,164926,164928],{"class":98,"line":99},[96,164925,157239],{"class":106},[96,164927,152],{"class":102},[96,164929,47312],{"class":155},[96,164931,164932],{"class":98,"line":19},[96,164933,2383],{"emptyLinePlaceholder":23},[96,164935,164936,164938,164940,164942],{"class":98,"line":1162},[96,164937,3008],{"class":102},[96,164939,152116],{"class":106},[96,164941,26022],{"class":102},[96,164943,152121],{"class":106},[96,164945,164946,164948,164950,164952,164954],{"class":98,"line":1177},[96,164947,159286],{"class":106},[96,164949,9461],{"class":102},[96,164951,152128],{"class":106},[96,164953,151451],{"class":211},[96,164955,33225],{"class":106},[96,164957,164958],{"class":98,"line":1183},[96,164959,2383],{"emptyLinePlaceholder":23},[96,164961,164962,164964,164966,164968,164970,164972],{"class":98,"line":1197},[96,164963,163753],{"class":106},[96,164965,152],{"class":102},[96,164967,163758],{"class":106},[96,164969,691],{"class":102},[96,164971,7315],{"class":155},[96,164973,164974],{"class":106},"(students)\n",[96,164976,164977,164979,164981,164983,164985,164987,164989,164991,164993,164995],{"class":98,"line":1203},[96,164978,30394],{"class":155},[96,164980,107],{"class":106},[96,164982,159],{"class":102},[96,164984,163776],{"class":211},[96,164986,1003],{"class":155},[96,164988,163781],{"class":106},[96,164990,157138],{"class":102},[96,164992,1053],{"class":155},[96,164994,358],{"class":211},[96,164996,113],{"class":106},[14,164998,164999],{},"查找学生：",[87,165001,165003],{"className":30357,"code":165002,"language":30359,"meta":18,"style":18},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[93,165004,165005,165020,165024,165034,165048,165054,165058,165064],{"__ignoreMap":18},[96,165006,165007,165009,165011,165013,165015,165018],{"class":98,"line":99},[96,165008,111557],{"class":106},[96,165010,152],{"class":102},[96,165012,60584],{"class":155},[96,165014,107],{"class":106},[96,165016,165017],{"class":211},"\"请输入学生姓名:\"",[96,165019,113],{"class":106},[96,165021,165022],{"class":98,"line":19},[96,165023,2383],{"emptyLinePlaceholder":23},[96,165025,165026,165028,165030,165032],{"class":98,"line":1162},[96,165027,3008],{"class":102},[96,165029,152116],{"class":106},[96,165031,26022],{"class":102},[96,165033,152121],{"class":106},[96,165035,165036,165038,165040,165042,165044,165046],{"class":98,"line":1177},[96,165037,3084],{"class":102},[96,165039,152128],{"class":106},[96,165041,62658],{"class":211},[96,165043,4426],{"class":106},[96,165045,2932],{"class":102},[96,165047,160411],{"class":106},[96,165049,165050,165052],{"class":98,"line":1183},[96,165051,32430],{"class":155},[96,165053,150021],{"class":106},[96,165055,165056],{"class":98,"line":1197},[96,165057,31606],{"class":102},[96,165059,165060,165062],{"class":98,"line":1203},[96,165061,1684],{"class":102},[96,165063,3722],{"class":106},[96,165065,165066,165068,165070,165073],{"class":98,"line":1294},[96,165067,31278],{"class":155},[96,165069,107],{"class":106},[96,165071,165072],{"class":211},"\"没有找到\"",[96,165074,113],{"class":106},[38,165076,165078],{"id":165077},"_613-容器通用操作","6.13 容器通用操作",[14,165080,165081],{},"长度：",[87,165083,165085],{"className":30357,"code":165084,"language":30359,"meta":18,"style":18},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[93,165086,165087,165106,165116],{"__ignoreMap":18},[96,165088,165089,165091,165094,165096,165098,165100,165102,165104],{"class":98,"line":99},[96,165090,7342],{"class":155},[96,165092,165093],{"class":106},"([",[96,165095,324],{"class":155},[96,165097,12419],{"class":106},[96,165099,184],{"class":155},[96,165101,12419],{"class":106},[96,165103,178],{"class":155},[96,165105,4640],{"class":106},[96,165107,165108,165110,165112,165114],{"class":98,"line":19},[96,165109,7342],{"class":155},[96,165111,107],{"class":106},[96,165113,155859],{"class":211},[96,165115,113],{"class":106},[96,165117,165118,165120,165123,165125,165127,165129],{"class":98,"line":1162},[96,165119,7342],{"class":155},[96,165121,165122],{"class":106},"({",[96,165124,62658],{"class":211},[96,165126,51416],{"class":106},[96,165128,149867],{"class":211},[96,165130,165131],{"class":106},"})\n",[14,165133,165134],{},"最大最小：",[87,165136,165138],{"className":30357,"code":165137,"language":30359,"meta":18,"style":18},"max([1, 2, 3])\nmin([1, 2, 3])\n",[93,165139,165140,165158],{"__ignoreMap":18},[96,165141,165142,165144,165146,165148,165150,165152,165154,165156],{"class":98,"line":99},[96,165143,5999],{"class":155},[96,165145,165093],{"class":106},[96,165147,324],{"class":155},[96,165149,12419],{"class":106},[96,165151,184],{"class":155},[96,165153,12419],{"class":106},[96,165155,178],{"class":155},[96,165157,4640],{"class":106},[96,165159,165160,165163,165165,165167,165169,165171,165173,165175],{"class":98,"line":19},[96,165161,165162],{"class":155},"min",[96,165164,165093],{"class":106},[96,165166,324],{"class":155},[96,165168,12419],{"class":106},[96,165170,184],{"class":155},[96,165172,12419],{"class":106},[96,165174,178],{"class":155},[96,165176,4640],{"class":106},[14,165178,165179],{},"求和：",[87,165181,165183],{"className":30357,"code":165182,"language":30359,"meta":18,"style":18},"sum([1, 2, 3])\n",[93,165184,165185],{"__ignoreMap":18},[96,165186,165187,165190,165192,165194,165196,165198,165200,165202],{"class":98,"line":99},[96,165188,165189],{"class":155},"sum",[96,165191,165093],{"class":106},[96,165193,324],{"class":155},[96,165195,12419],{"class":106},[96,165197,184],{"class":155},[96,165199,12419],{"class":106},[96,165201,178],{"class":155},[96,165203,4640],{"class":106},[14,165205,163450],{},[87,165207,165209],{"className":30357,"code":165208,"language":30359,"meta":18,"style":18},"sorted([3, 1, 2])\n",[93,165210,165211],{"__ignoreMap":18},[96,165212,165213,165216,165218,165220,165222,165224,165226,165228],{"class":98,"line":99},[96,165214,165215],{"class":155},"sorted",[96,165217,165093],{"class":106},[96,165219,178],{"class":155},[96,165221,12419],{"class":106},[96,165223,324],{"class":155},[96,165225,12419],{"class":106},[96,165227,184],{"class":155},[96,165229,4640],{"class":106},[14,165231,165232],{},"类型转换：",[87,165234,165236],{"className":30357,"code":165235,"language":30359,"meta":18,"style":18},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[93,165237,165238,165248,165266],{"__ignoreMap":18},[96,165239,165240,165242,165244,165246],{"class":98,"line":99},[96,165241,154049],{"class":155},[96,165243,107],{"class":106},[96,165245,155859],{"class":211},[96,165247,113],{"class":106},[96,165249,165250,165252,165254,165256,165258,165260,165262,165264],{"class":98,"line":19},[96,165251,155244],{"class":155},[96,165253,165093],{"class":106},[96,165255,324],{"class":155},[96,165257,12419],{"class":106},[96,165259,184],{"class":155},[96,165261,12419],{"class":106},[96,165263,178],{"class":155},[96,165265,4640],{"class":106},[96,165267,165268,165270,165272,165274,165276,165278,165280,165282,165284,165286],{"class":98,"line":1162},[96,165269,155269],{"class":155},[96,165271,165093],{"class":106},[96,165273,324],{"class":155},[96,165275,12419],{"class":106},[96,165277,324],{"class":155},[96,165279,12419],{"class":106},[96,165281,184],{"class":155},[96,165283,12419],{"class":106},[96,165285,178],{"class":155},[96,165287,4640],{"class":106},[14,165289,165290],{},"成员判断：",[87,165292,165294],{"className":30357,"code":165293,"language":30359,"meta":18,"style":18},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[93,165295,165296,165313,165337],{"__ignoreMap":18},[96,165297,165298,165300,165302,165305,165308,165311],{"class":98,"line":99},[96,165299,30394],{"class":155},[96,165301,107],{"class":106},[96,165303,165304],{"class":211},"\"a\"",[96,165306,165307],{"class":102}," in",[96,165309,165310],{"class":211}," \"abc\"",[96,165312,113],{"class":106},[96,165314,165315,165317,165319,165321,165323,165325,165327,165329,165331,165333,165335],{"class":98,"line":19},[96,165316,30394],{"class":155},[96,165318,107],{"class":106},[96,165320,324],{"class":155},[96,165322,165307],{"class":102},[96,165324,52205],{"class":106},[96,165326,324],{"class":155},[96,165328,12419],{"class":106},[96,165330,184],{"class":155},[96,165332,12419],{"class":106},[96,165334,178],{"class":155},[96,165336,4640],{"class":106},[96,165338,165339,165341,165343,165345,165347,165349,165351,165353,165355],{"class":98,"line":1162},[96,165340,30394],{"class":155},[96,165342,107],{"class":106},[96,165344,62658],{"class":211},[96,165346,165307],{"class":102},[96,165348,4431],{"class":106},[96,165350,62658],{"class":211},[96,165352,51416],{"class":106},[96,165354,149867],{"class":211},[96,165356,165131],{"class":106},[38,165358,165360],{"id":165359},"_614-推导式","6.14 推导式",[14,165362,165363],{},"推导式用于快速生成容器。",[14,165365,165366],{},"列表推导式：",[87,165368,165370],{"className":30357,"code":165369,"language":30359,"meta":18,"style":18},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[93,165371,165372,165399],{"__ignoreMap":18},[96,165373,165374,165376,165378,165381,165383,165385,165387,165389,165391,165393,165395,165397],{"class":98,"line":99},[96,165375,164079],{"class":106},[96,165377,152],{"class":102},[96,165379,165380],{"class":106}," [i ",[96,165382,3008],{"class":102},[96,165384,9422],{"class":106},[96,165386,26022],{"class":102},[96,165388,32422],{"class":155},[96,165390,107],{"class":106},[96,165392,324],{"class":155},[96,165394,12419],{"class":106},[96,165396,451],{"class":155},[96,165398,97279],{"class":106},[96,165400,165401,165403],{"class":98,"line":19},[96,165402,30394],{"class":155},[96,165404,164295],{"class":106},[14,165406,165407],{},"带条件：",[87,165409,165411],{"className":30357,"code":165410,"language":30359,"meta":18,"style":18},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[93,165412,165413,165454],{"__ignoreMap":18},[96,165414,165415,165418,165420,165422,165424,165426,165428,165430,165432,165434,165436,165438,165440,165442,165444,165446,165448,165450,165452],{"class":98,"line":99},[96,165416,165417],{"class":106},"even_nums ",[96,165419,152],{"class":102},[96,165421,165380],{"class":106},[96,165423,3008],{"class":102},[96,165425,9422],{"class":106},[96,165427,26022],{"class":102},[96,165429,32422],{"class":155},[96,165431,107],{"class":106},[96,165433,324],{"class":155},[96,165435,12419],{"class":106},[96,165437,444],{"class":155},[96,165439,13698],{"class":106},[96,165441,1514],{"class":102},[96,165443,9422],{"class":106},[96,165445,435],{"class":102},[96,165447,14739],{"class":155},[96,165449,101538],{"class":102},[96,165451,4076],{"class":155},[96,165453,33225],{"class":106},[96,165455,165456,165458],{"class":98,"line":19},[96,165457,30394],{"class":155},[96,165459,165460],{"class":106},"(even_nums)\n",[14,165462,165463],{},"字典推导式：",[87,165465,165467],{"className":30357,"code":165466,"language":30359,"meta":18,"style":18},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[93,165468,165469,165503],{"__ignoreMap":18},[96,165470,165471,165474,165476,165479,165481,165483,165486,165488,165490,165492,165494,165496,165498,165500],{"class":98,"line":99},[96,165472,165473],{"class":106},"squares ",[96,165475,152],{"class":102},[96,165477,165478],{"class":106}," {i: i ",[96,165480,10645],{"class":102},[96,165482,14739],{"class":155},[96,165484,165485],{"class":102}," for",[96,165487,9422],{"class":106},[96,165489,26022],{"class":102},[96,165491,32422],{"class":155},[96,165493,107],{"class":106},[96,165495,324],{"class":155},[96,165497,12419],{"class":106},[96,165499,451],{"class":155},[96,165501,165502],{"class":106},")}\n",[96,165504,165505,165507],{"class":98,"line":19},[96,165506,30394],{"class":155},[96,165508,165509],{"class":106},"(squares)\n",[14,165511,165512],{},"集合推导式：",[87,165514,165516],{"className":30357,"code":165515,"language":30359,"meta":18,"style":18},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[93,165517,165518,165539],{"__ignoreMap":18},[96,165519,165520,165523,165525,165528,165530,165532,165534,165537],{"class":98,"line":99},[96,165521,165522],{"class":106},"chars ",[96,165524,152],{"class":102},[96,165526,165527],{"class":106}," {ch ",[96,165529,3008],{"class":102},[96,165531,159671],{"class":106},[96,165533,26022],{"class":102},[96,165535,165536],{"class":211}," \"hello\"",[96,165538,1548],{"class":106},[96,165540,165541,165543],{"class":98,"line":19},[96,165542,30394],{"class":155},[96,165544,165545],{"class":106},"(chars)\n",[14,165547,165548],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[38,165550,165552],{"id":165551},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[87,165554,165556],{"className":30357,"code":165555,"language":30359,"meta":18,"style":18},"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",[93,165557,165558,165566,165586,165606,165626,165646,165650,165654,165662,165676,165685,165689,165699,165711,165715,165735,165744,165748,165764,165769,165773,165787,165791,165813,165849],{"__ignoreMap":18},[96,165559,165560,165562,165564],{"class":98,"line":99},[96,165561,159695],{"class":106},[96,165563,152],{"class":102},[96,165565,55426],{"class":106},[96,165567,165568,165570,165572,165574,165576,165578,165580,165582,165584],{"class":98,"line":19},[96,165569,148364],{"class":106},[96,165571,62658],{"class":211},[96,165573,51416],{"class":106},[96,165575,149867],{"class":211},[96,165577,12419],{"class":106},[96,165579,151451],{"class":211},[96,165581,51416],{"class":106},[96,165583,1096],{"class":155},[96,165585,4913],{"class":106},[96,165587,165588,165590,165592,165594,165596,165598,165600,165602,165604],{"class":98,"line":1162},[96,165589,148364],{"class":106},[96,165591,62658],{"class":211},[96,165593,51416],{"class":106},[96,165595,150915],{"class":211},[96,165597,12419],{"class":106},[96,165599,151451],{"class":211},[96,165601,51416],{"class":106},[96,165603,918],{"class":155},[96,165605,4913],{"class":106},[96,165607,165608,165610,165612,165614,165616,165618,165620,165622,165624],{"class":98,"line":1177},[96,165609,148364],{"class":106},[96,165611,62658],{"class":211},[96,165613,51416],{"class":106},[96,165615,159710],{"class":211},[96,165617,12419],{"class":106},[96,165619,151451],{"class":211},[96,165621,51416],{"class":106},[96,165623,513],{"class":155},[96,165625,4913],{"class":106},[96,165627,165628,165630,165632,165634,165636,165638,165640,165642,165644],{"class":98,"line":1183},[96,165629,148364],{"class":106},[96,165631,62658],{"class":211},[96,165633,51416],{"class":106},[96,165635,163289],{"class":211},[96,165637,12419],{"class":106},[96,165639,151451],{"class":211},[96,165641,51416],{"class":106},[96,165643,989],{"class":155},[96,165645,4913],{"class":106},[96,165647,165648],{"class":98,"line":1197},[96,165649,33225],{"class":106},[96,165651,165652],{"class":98,"line":1203},[96,165653,2383],{"emptyLinePlaceholder":23},[96,165655,165656,165658,165660],{"class":98,"line":1294},[96,165657,157239],{"class":106},[96,165659,152],{"class":102},[96,165661,47312],{"class":155},[96,165663,165664,165667,165669,165672,165674],{"class":98,"line":1300},[96,165665,165666],{"class":106},"max_student ",[96,165668,152],{"class":102},[96,165670,165671],{"class":106}," students[",[96,165673,298],{"class":155},[96,165675,33225],{"class":106},[96,165677,165678,165681,165683],{"class":98,"line":1312},[96,165679,165680],{"class":106},"passed ",[96,165682,152],{"class":102},[96,165684,51817],{"class":106},[96,165686,165687],{"class":98,"line":1595},[96,165688,2383],{"emptyLinePlaceholder":23},[96,165690,165691,165693,165695,165697],{"class":98,"line":1600},[96,165692,3008],{"class":102},[96,165694,152116],{"class":106},[96,165696,26022],{"class":102},[96,165698,152121],{"class":106},[96,165700,165701,165703,165705,165707,165709],{"class":98,"line":1606},[96,165702,159286],{"class":106},[96,165704,9461],{"class":102},[96,165706,152128],{"class":106},[96,165708,151451],{"class":211},[96,165710,33225],{"class":106},[96,165712,165713],{"class":98,"line":1611},[96,165714,2383],{"emptyLinePlaceholder":23},[96,165716,165717,165719,165721,165723,165725,165727,165730,165732],{"class":98,"line":1625},[96,165718,3084],{"class":102},[96,165720,152128],{"class":106},[96,165722,151451],{"class":211},[96,165724,4426],{"class":106},[96,165726,1067],{"class":102},[96,165728,165729],{"class":106}," max_student[",[96,165731,151451],{"class":211},[96,165733,165734],{"class":106},"]:\n",[96,165736,165737,165740,165742],{"class":98,"line":1630},[96,165738,165739],{"class":106},"        max_student ",[96,165741,152],{"class":102},[96,165743,152144],{"class":106},[96,165745,165746],{"class":98,"line":1636},[96,165747,2383],{"emptyLinePlaceholder":23},[96,165749,165750,165752,165754,165756,165758,165760,165762],{"class":98,"line":1657},[96,165751,3084],{"class":102},[96,165753,152128],{"class":106},[96,165755,151451],{"class":211},[96,165757,4426],{"class":106},[96,165759,1693],{"class":102},[96,165761,157816],{"class":155},[96,165763,3722],{"class":106},[96,165765,165766],{"class":98,"line":1662},[96,165767,165768],{"class":106},"        passed.append(student)\n",[96,165770,165771],{"class":98,"line":1676},[96,165772,2383],{"emptyLinePlaceholder":23},[96,165774,165775,165777,165779,165781,165783,165785],{"class":98,"line":1681},[96,165776,163753],{"class":106},[96,165778,152],{"class":102},[96,165780,163758],{"class":106},[96,165782,691],{"class":102},[96,165784,7315],{"class":155},[96,165786,164974],{"class":106},[96,165788,165789],{"class":98,"line":1710},[96,165790,2383],{"emptyLinePlaceholder":23},[96,165792,165793,165795,165797,165799,165801,165803,165805,165807,165809,165811],{"class":98,"line":1715},[96,165794,30394],{"class":155},[96,165796,107],{"class":106},[96,165798,159],{"class":102},[96,165800,163776],{"class":211},[96,165802,1003],{"class":155},[96,165804,163781],{"class":106},[96,165806,157138],{"class":102},[96,165808,1053],{"class":155},[96,165810,358],{"class":211},[96,165812,113],{"class":106},[96,165814,165815,165817,165819,165821,165824,165826,165829,165831,165833,165835,165837,165839,165841,165843,165845,165847],{"class":98,"line":1732},[96,165816,30394],{"class":155},[96,165818,107],{"class":106},[96,165820,159],{"class":102},[96,165822,165823],{"class":211},"\"最高分学生:",[96,165825,1003],{"class":155},[96,165827,165828],{"class":106},"max_student[",[96,165830,152861],{"class":211},[96,165832,1047],{"class":106},[96,165834,1053],{"class":155},[96,165836,4431],{"class":155},[96,165838,165828],{"class":106},[96,165840,152899],{"class":211},[96,165842,1047],{"class":106},[96,165844,1053],{"class":155},[96,165846,358],{"class":211},[96,165848,113],{"class":106},[96,165850,165851,165853,165855,165857,165860,165863,165866,165868,165870],{"class":98,"line":1737},[96,165852,30394],{"class":155},[96,165854,107],{"class":106},[96,165856,159],{"class":102},[96,165858,165859],{"class":211},"\"及格人数:",[96,165861,165862],{"class":155},"{len",[96,165864,165865],{"class":106},"(passed)",[96,165867,1053],{"class":155},[96,165869,358],{"class":211},[96,165871,113],{"class":106},[38,165873,165875],{"id":165874},"_616-易错点","6.16 易错点",[50,165877,165878,165881,165884,165887,165893,165902],{},[53,165879,165880],{},"列表可变，元组和字符串不可变。",[53,165882,165883],{},"切片结束位置不包含。",[53,165885,165886],{},"字典通过 key 取值，不是通过索引。",[53,165888,165889,165890,28364],{},"空集合要用 ",[93,165891,165892],{},"set()",[53,165894,104345,165895,165898,165899,28364],{},[93,165896,165897],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[93,165900,165901],{},"get()",[53,165903,165904],{},"嵌套容器要先看清楚每一层是什么类型。",[38,165906,165908],{"id":165907},"_617-本章练习","6.17 本章练习",[50,165910,165911,165914,165917,165920,165923],{},[53,165912,165913],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[53,165915,165916],{},"输入一句话，统计每个字符出现次数。",[53,165918,165919],{},"使用集合去除列表中的重复元素。",[53,165921,165922],{},"使用字典保存一个学生的信息，并实现修改成绩。",[53,165924,165925],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[5110,165927,165928],{},"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":18,"searchDepth":19,"depth":19,"links":165930},[165931,165932,165933,165934,165935,165936,165937,165938,165939,165940,165941,165942,165943,165944,165945,165946,165947],{"id":162911,"depth":19,"text":162912},{"id":163028,"depth":19,"text":163029},{"id":163118,"depth":19,"text":163119},{"id":163242,"depth":19,"text":163243},{"id":163605,"depth":19,"text":163606},{"id":163792,"depth":19,"text":163793},{"id":163911,"depth":19,"text":163912},{"id":164053,"depth":19,"text":164054},{"id":164240,"depth":19,"text":164241},{"id":164484,"depth":19,"text":164485},{"id":164694,"depth":19,"text":164695},{"id":164779,"depth":19,"text":164780},{"id":165077,"depth":19,"text":165078},{"id":165359,"depth":19,"text":165360},{"id":165551,"depth":19,"text":165552},{"id":165874,"depth":19,"text":165875},{"id":165907,"depth":19,"text":165908},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":162903,"description":23361},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":165954,"title":165955,"body":165956,"description":23361,"extension":21,"meta":168128,"navigation":23,"path":168129,"seo":168130,"stem":168131,"__hash__":168132},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":165957,"toc":168103},[165958,165961,165965,165968,166048,166051,166072,166075,166079,166082,166144,166147,166164,166168,166171,166216,166218,166226,166230,166233,166315,166318,166321,166346,166349,166372,166376,166379,166381,166443,166446,166448,166499,166503,166507,166513,166618,166622,166628,166699,166703,166706,166774,166777,166857,166861,166867,166903,166906,166909,167019,167025,167029,167032,167104,167107,167111,167115,167120,167182,167186,167191,167259,167263,167268,167384,167388,167391,167471,167474,167478,167481,167585,167587,167602,167605,167609,167747,167755,167759,167761,167772,167774,168032,168036,168068,168072,168100],[10,165959,165955],{"id":165960},"_7-函数进阶",[38,165962,165964],{"id":165963},"_71-多返回值","7.1 多返回值",[14,165966,165967],{},"Python 函数可以返回多个值，本质上返回的是元组。",[87,165969,165971],{"className":30357,"code":165970,"language":30359,"meta":18,"style":18},"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",[93,165972,165973,165982,165990,165998,166007,166014,166018,166022,166031,166037],{"__ignoreMap":18},[96,165974,165975,165977,165980],{"class":98,"line":99},[96,165976,31926],{"class":102},[96,165978,165979],{"class":1946}," get_info",[96,165981,31932],{"class":106},[96,165983,165984,165986,165988],{"class":98,"line":19},[96,165985,152349],{"class":106},[96,165987,152],{"class":102},[96,165989,149332],{"class":211},[96,165991,165992,165994,165996],{"class":98,"line":1162},[96,165993,152365],{"class":106},[96,165995,152],{"class":102},[96,165997,146530],{"class":155},[96,165999,166000,166002,166004],{"class":98,"line":1177},[96,166001,152380],{"class":106},[96,166003,152],{"class":102},[96,166005,166006],{"class":155}," 95\n",[96,166008,166009,166011],{"class":98,"line":1183},[96,166010,4073],{"class":102},[96,166012,166013],{"class":106}," name, age, score\n",[96,166015,166016],{"class":98,"line":1197},[96,166017,2383],{"emptyLinePlaceholder":23},[96,166019,166020],{"class":98,"line":1203},[96,166021,2383],{"emptyLinePlaceholder":23},[96,166023,166024,166026,166028],{"class":98,"line":1294},[96,166025,161285],{"class":106},[96,166027,152],{"class":102},[96,166029,166030],{"class":106}," get_info()\n",[96,166032,166033,166035],{"class":98,"line":1300},[96,166034,30394],{"class":155},[96,166036,76564],{"class":106},[96,166038,166039,166041,166043,166045],{"class":98,"line":1312},[96,166040,30394],{"class":155},[96,166042,107],{"class":106},[96,166044,103086],{"class":155},[96,166046,166047],{"class":106},"(result))\n",[14,166049,166050],{},"可以直接解包：",[87,166052,166054],{"className":30357,"code":166053,"language":30359,"meta":18,"style":18},"name, age, score = get_info()\nprint(name, age, score)\n",[93,166055,166056,166065],{"__ignoreMap":18},[96,166057,166058,166061,166063],{"class":98,"line":99},[96,166059,166060],{"class":106},"name, age, score ",[96,166062,152],{"class":102},[96,166064,166030],{"class":106},[96,166066,166067,166069],{"class":98,"line":19},[96,166068,30394],{"class":155},[96,166070,166071],{"class":106},"(name, age, score)\n",[14,166073,166074],{},"返回多个值适合函数需要同时给出多个结果时使用。",[38,166076,166078],{"id":166077},"_72-位置参数","7.2 位置参数",[14,166080,166081],{},"位置参数按顺序传递。",[87,166083,166085],{"className":30357,"code":166084,"language":30359,"meta":18,"style":18},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[93,166086,166087,166095,166123,166127,166131],{"__ignoreMap":18},[96,166088,166089,166091,166093],{"class":98,"line":99},[96,166090,31926],{"class":102},[96,166092,149351],{"class":1946},[96,166094,149354],{"class":106},[96,166096,166097,166099,166101,166103,166105,166107,166109,166111,166113,166115,166117,166119,166121],{"class":98,"line":19},[96,166098,31278],{"class":155},[96,166100,107],{"class":106},[96,166102,159],{"class":102},[96,166104,149365],{"class":211},[96,166106,1003],{"class":155},[96,166108,79789],{"class":106},[96,166110,1053],{"class":155},[96,166112,149374],{"class":211},[96,166114,1003],{"class":155},[96,166116,70200],{"class":106},[96,166118,1053],{"class":155},[96,166120,149383],{"class":211},[96,166122,113],{"class":106},[96,166124,166125],{"class":98,"line":1162},[96,166126,2383],{"emptyLinePlaceholder":23},[96,166128,166129],{"class":98,"line":1177},[96,166130,2383],{"emptyLinePlaceholder":23},[96,166132,166133,166136,166138,166140,166142],{"class":98,"line":1183},[96,166134,166135],{"class":106},"introduce(",[96,166137,149867],{"class":211},[96,166139,12419],{"class":106},[96,166141,757],{"class":155},[96,166143,113],{"class":106},[14,166145,166146],{},"顺序错了就会得到错误含义：",[87,166148,166150],{"className":30357,"code":166149,"language":30359,"meta":18,"style":18},"introduce(18, \"小明\")\n",[93,166151,166152],{"__ignoreMap":18},[96,166153,166154,166156,166158,166160,166162],{"class":98,"line":99},[96,166155,166135],{"class":106},[96,166157,757],{"class":155},[96,166159,12419],{"class":106},[96,166161,149867],{"class":211},[96,166163,113],{"class":106},[38,166165,166167],{"id":166166},"_73-关键字参数","7.3 关键字参数",[14,166169,166170],{},"关键字参数按参数名传递。",[87,166172,166174],{"className":30357,"code":166173,"language":30359,"meta":18,"style":18},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[93,166175,166176,166196],{"__ignoreMap":18},[96,166177,166178,166180,166182,166184,166186,166188,166190,166192,166194],{"class":98,"line":99},[96,166179,166135],{"class":106},[96,166181,79789],{"class":5200},[96,166183,152],{"class":102},[96,166185,149867],{"class":211},[96,166187,12419],{"class":106},[96,166189,70200],{"class":5200},[96,166191,152],{"class":102},[96,166193,757],{"class":155},[96,166195,113],{"class":106},[96,166197,166198,166200,166202,166204,166206,166208,166210,166212,166214],{"class":98,"line":19},[96,166199,166135],{"class":106},[96,166201,70200],{"class":5200},[96,166203,152],{"class":102},[96,166205,757],{"class":155},[96,166207,12419],{"class":106},[96,166209,79789],{"class":5200},[96,166211,152],{"class":102},[96,166213,149867],{"class":211},[96,166215,113],{"class":106},[14,166217,117913],{},[50,166219,166220,166223],{},[53,166221,166222],{},"顺序不容易错。",[53,166224,166225],{},"调用时可读性更强。",[38,166227,166229],{"id":166228},"_74-默认参数","7.4 默认参数",[14,166231,166232],{},"默认参数给参数设置默认值。",[87,166234,166236],{"className":30357,"code":166235,"language":30359,"meta":18,"style":18},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[93,166237,166238,166254,166284,166288,166292,166302],{"__ignoreMap":18},[96,166239,166240,166242,166244,166247,166249,166252],{"class":98,"line":99},[96,166241,31926],{"class":102},[96,166243,122072],{"class":1946},[96,166245,166246],{"class":106},"(host, port",[96,166248,152],{"class":102},[96,166250,166251],{"class":155},"3306",[96,166253,30765],{"class":106},[96,166255,166256,166258,166260,166262,166265,166267,166269,166271,166273,166275,166278,166280,166282],{"class":98,"line":19},[96,166257,31278],{"class":155},[96,166259,107],{"class":106},[96,166261,159],{"class":102},[96,166263,166264],{"class":211},"\"连接",[96,166266,1003],{"class":155},[96,166268,27374],{"class":106},[96,166270,1053],{"class":155},[96,166272,966],{"class":211},[96,166274,1003],{"class":155},[96,166276,166277],{"class":106},"port",[96,166279,1053],{"class":155},[96,166281,358],{"class":211},[96,166283,113],{"class":106},[96,166285,166286],{"class":98,"line":1162},[96,166287,2383],{"emptyLinePlaceholder":23},[96,166289,166290],{"class":98,"line":1177},[96,166291,2383],{"emptyLinePlaceholder":23},[96,166293,166294,166297,166300],{"class":98,"line":1183},[96,166295,166296],{"class":106},"connect(",[96,166298,166299],{"class":211},"\"localhost\"",[96,166301,113],{"class":106},[96,166303,166304,166306,166308,166310,166313],{"class":98,"line":1197},[96,166305,166296],{"class":106},[96,166307,166299],{"class":211},[96,166309,12419],{"class":106},[96,166311,166312],{"class":155},"6379",[96,166314,113],{"class":106},[14,166316,166317],{},"注意：默认参数必须放在非默认参数后面。",[14,166319,166320],{},"错误：",[87,166322,166324],{"className":30357,"code":166323,"language":30359,"meta":18,"style":18},"def connect(port=3306, host):\n    pass\n",[93,166325,166326,166342],{"__ignoreMap":18},[96,166327,166328,166330,166332,166335,166337,166339],{"class":98,"line":99},[96,166329,31926],{"class":102},[96,166331,122072],{"class":1946},[96,166333,166334],{"class":106},"(port",[96,166336,152],{"class":102},[96,166338,166251],{"class":155},[96,166340,166341],{"class":106},", host):\n",[96,166343,166344],{"class":98,"line":19},[96,166345,149516],{"class":102},[14,166347,166348],{},"正确：",[87,166350,166352],{"className":30357,"code":166351,"language":30359,"meta":18,"style":18},"def connect(host, port=3306):\n    pass\n",[93,166353,166354,166368],{"__ignoreMap":18},[96,166355,166356,166358,166360,166362,166364,166366],{"class":98,"line":99},[96,166357,31926],{"class":102},[96,166359,122072],{"class":1946},[96,166361,166246],{"class":106},[96,166363,152],{"class":102},[96,166365,166251],{"class":155},[96,166367,30765],{"class":106},[96,166369,166370],{"class":98,"line":19},[96,166371,149516],{"class":102},[38,166373,166375],{"id":166374},"_75-默认参数的坑","7.5 默认参数的坑",[14,166377,166378],{},"不要使用可变对象作为默认参数。",[14,166380,157602],{},[87,166382,166384],{"className":30357,"code":166383,"language":30359,"meta":18,"style":18},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[93,166385,166386,166401,166406,166413,166417,166421,166432],{"__ignoreMap":18},[96,166387,166388,166390,166393,166396,166398],{"class":98,"line":99},[96,166389,31926],{"class":102},[96,166391,166392],{"class":1946}," add_item",[96,166394,166395],{"class":106},"(item, items",[96,166397,152],{"class":102},[96,166399,166400],{"class":106},"[]):\n",[96,166402,166403],{"class":98,"line":19},[96,166404,166405],{"class":106},"    items.append(item)\n",[96,166407,166408,166410],{"class":98,"line":1162},[96,166409,4073],{"class":102},[96,166411,166412],{"class":106}," items\n",[96,166414,166415],{"class":98,"line":1177},[96,166416,2383],{"emptyLinePlaceholder":23},[96,166418,166419],{"class":98,"line":1183},[96,166420,2383],{"emptyLinePlaceholder":23},[96,166422,166423,166425,166428,166430],{"class":98,"line":1197},[96,166424,30394],{"class":155},[96,166426,166427],{"class":106},"(add_item(",[96,166429,165304],{"class":211},[96,166431,30476],{"class":106},[96,166433,166434,166436,166438,166441],{"class":98,"line":1203},[96,166435,30394],{"class":155},[96,166437,166427],{"class":106},[96,166439,166440],{"class":211},"\"b\"",[96,166442,30476],{"class":106},[14,166444,166445],{},"第二次调用会复用第一次的列表。",[14,166447,155867],{},[87,166449,166451],{"className":30357,"code":166450,"language":30359,"meta":18,"style":18},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[93,166452,166453,166467,166480,166489,166493],{"__ignoreMap":18},[96,166454,166455,166457,166459,166461,166463,166465],{"class":98,"line":99},[96,166456,31926],{"class":102},[96,166458,166392],{"class":1946},[96,166460,166395],{"class":106},[96,166462,152],{"class":102},[96,166464,95665],{"class":155},[96,166466,30765],{"class":106},[96,166468,166469,166471,166474,166476,166478],{"class":98,"line":19},[96,166470,3084],{"class":102},[96,166472,166473],{"class":106}," items ",[96,166475,38906],{"class":102},[96,166477,38912],{"class":155},[96,166479,3722],{"class":106},[96,166481,166482,166485,166487],{"class":98,"line":1162},[96,166483,166484],{"class":106},"        items ",[96,166486,152],{"class":102},[96,166488,51817],{"class":106},[96,166490,166491],{"class":98,"line":1177},[96,166492,166405],{"class":106},[96,166494,166495,166497],{"class":98,"line":1183},[96,166496,4073],{"class":102},[96,166498,166412],{"class":106},[38,166500,166502],{"id":166501},"_76-不定长参数","7.6 不定长参数",[67,166504,166506],{"id":166505},"_761-args","7.6.1 *args",[14,166508,166509,166512],{},[93,166510,166511],{},"*args"," 接收任意数量的位置参数，得到元组。",[87,166514,166516],{"className":30357,"code":166515,"language":30359,"meta":18,"style":18},"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",[93,166517,166518,166531,166539,166550,166559,166565,166569,166573,166592],{"__ignoreMap":18},[96,166519,166520,166522,166524,166526,166528],{"class":98,"line":99},[96,166521,31926],{"class":102},[96,166523,5193],{"class":1946},[96,166525,107],{"class":106},[96,166527,562],{"class":102},[96,166529,166530],{"class":106},"args):\n",[96,166532,166533,166535,166537],{"class":98,"line":19},[96,166534,159286],{"class":106},[96,166536,152],{"class":102},[96,166538,47312],{"class":155},[96,166540,166541,166543,166545,166547],{"class":98,"line":1162},[96,166542,3184],{"class":102},[96,166544,156159],{"class":106},[96,166546,26022],{"class":102},[96,166548,166549],{"class":106}," args:\n",[96,166551,166552,166554,166556],{"class":98,"line":1177},[96,166553,159961],{"class":106},[96,166555,9461],{"class":102},[96,166557,166558],{"class":106}," num\n",[96,166560,166561,166563],{"class":98,"line":1183},[96,166562,4073],{"class":102},[96,166564,162266],{"class":106},[96,166566,166567],{"class":98,"line":1197},[96,166568,2383],{"emptyLinePlaceholder":23},[96,166570,166571],{"class":98,"line":1203},[96,166572,2383],{"emptyLinePlaceholder":23},[96,166574,166575,166577,166580,166582,166584,166586,166588,166590],{"class":98,"line":1294},[96,166576,30394],{"class":155},[96,166578,166579],{"class":106},"(add(",[96,166581,324],{"class":155},[96,166583,12419],{"class":106},[96,166585,184],{"class":155},[96,166587,12419],{"class":106},[96,166589,178],{"class":155},[96,166591,30476],{"class":106},[96,166593,166594,166596,166598,166600,166602,166604,166606,166608,166610,166612,166614,166616],{"class":98,"line":1300},[96,166595,30394],{"class":155},[96,166597,166579],{"class":106},[96,166599,324],{"class":155},[96,166601,12419],{"class":106},[96,166603,184],{"class":155},[96,166605,12419],{"class":106},[96,166607,178],{"class":155},[96,166609,12419],{"class":106},[96,166611,400],{"class":155},[96,166613,12419],{"class":106},[96,166615,426],{"class":155},[96,166617,30476],{"class":106},[67,166619,166621],{"id":166620},"_762-kwargs","7.6.2 **kwargs",[14,166623,166624,166627],{},[93,166625,166626],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[87,166629,166631],{"className":30357,"code":166630,"language":30359,"meta":18,"style":18},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[93,166632,166633,166646,166657,166663,166667,166671],{"__ignoreMap":18},[96,166634,166635,166637,166639,166641,166643],{"class":98,"line":99},[96,166636,31926],{"class":102},[96,166638,161924],{"class":1946},[96,166640,107],{"class":106},[96,166642,10645],{"class":102},[96,166644,166645],{"class":106},"kwargs):\n",[96,166647,166648,166650,166652,166654],{"class":98,"line":19},[96,166649,3184],{"class":102},[96,166651,164764],{"class":106},[96,166653,26022],{"class":102},[96,166655,166656],{"class":106}," kwargs.items():\n",[96,166658,166659,166661],{"class":98,"line":1162},[96,166660,32430],{"class":155},[96,166662,164776],{"class":106},[96,166664,166665],{"class":98,"line":1177},[96,166666,2383],{"emptyLinePlaceholder":23},[96,166668,166669],{"class":98,"line":1183},[96,166670,2383],{"emptyLinePlaceholder":23},[96,166672,166673,166675,166677,166679,166681,166683,166685,166687,166689,166691,166693,166695,166697],{"class":98,"line":1197},[96,166674,161989],{"class":106},[96,166676,79789],{"class":5200},[96,166678,152],{"class":102},[96,166680,149867],{"class":211},[96,166682,12419],{"class":106},[96,166684,70200],{"class":5200},[96,166686,152],{"class":102},[96,166688,757],{"class":155},[96,166690,12419],{"class":106},[96,166692,70251],{"class":5200},[96,166694,152],{"class":102},[96,166696,69248],{"class":211},[96,166698,113],{"class":106},[38,166700,166702],{"id":166701},"_77-参数解包","7.7 参数解包",[14,166704,166705],{},"列表或元组解包为位置参数：",[87,166707,166709],{"className":30357,"code":166708,"language":30359,"meta":18,"style":18},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[93,166710,166711,166720,166735,166739,166743,166763],{"__ignoreMap":18},[96,166712,166713,166715,166717],{"class":98,"line":99},[96,166714,31926],{"class":102},[96,166716,5193],{"class":1946},[96,166718,166719],{"class":106},"(a, b, c):\n",[96,166721,166722,166724,166726,166728,166730,166732],{"class":98,"line":19},[96,166723,4073],{"class":102},[96,166725,10853],{"class":106},[96,166727,588],{"class":102},[96,166729,10866],{"class":106},[96,166731,588],{"class":102},[96,166733,166734],{"class":106}," c\n",[96,166736,166737],{"class":98,"line":1162},[96,166738,2383],{"emptyLinePlaceholder":23},[96,166740,166741],{"class":98,"line":1177},[96,166742,2383],{"emptyLinePlaceholder":23},[96,166744,166745,166747,166749,166751,166753,166755,166757,166759,166761],{"class":98,"line":1183},[96,166746,164079],{"class":106},[96,166748,152],{"class":102},[96,166750,52205],{"class":106},[96,166752,324],{"class":155},[96,166754,12419],{"class":106},[96,166756,184],{"class":155},[96,166758,12419],{"class":106},[96,166760,178],{"class":155},[96,166762,33225],{"class":106},[96,166764,166765,166767,166769,166771],{"class":98,"line":1197},[96,166766,30394],{"class":155},[96,166768,166579],{"class":106},[96,166770,562],{"class":102},[96,166772,166773],{"class":106},"nums))\n",[14,166775,166776],{},"字典解包为关键字参数：",[87,166778,166780],{"className":30357,"code":166779,"language":30359,"meta":18,"style":18},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[93,166781,166782,166790,166816,166820,166824,166848],{"__ignoreMap":18},[96,166783,166784,166786,166788],{"class":98,"line":99},[96,166785,31926],{"class":102},[96,166787,149351],{"class":1946},[96,166789,149354],{"class":106},[96,166791,166792,166794,166796,166798,166800,166802,166804,166806,166808,166810,166812,166814],{"class":98,"line":19},[96,166793,31278],{"class":155},[96,166795,107],{"class":106},[96,166797,159],{"class":102},[96,166799,358],{"class":211},[96,166801,1003],{"class":155},[96,166803,79789],{"class":106},[96,166805,1053],{"class":155},[96,166807,4431],{"class":155},[96,166809,70200],{"class":106},[96,166811,1053],{"class":155},[96,166813,358],{"class":211},[96,166815,113],{"class":106},[96,166817,166818],{"class":98,"line":1162},[96,166819,2383],{"emptyLinePlaceholder":23},[96,166821,166822],{"class":98,"line":1177},[96,166823,2383],{"emptyLinePlaceholder":23},[96,166825,166826,166828,166830,166832,166834,166836,166838,166840,166842,166844,166846],{"class":98,"line":1183},[96,166827,116293],{"class":106},[96,166829,152],{"class":102},[96,166831,4431],{"class":106},[96,166833,62658],{"class":211},[96,166835,51416],{"class":106},[96,166837,149867],{"class":211},[96,166839,12419],{"class":106},[96,166841,69103],{"class":211},[96,166843,51416],{"class":106},[96,166845,757],{"class":155},[96,166847,1548],{"class":106},[96,166849,166850,166852,166854],{"class":98,"line":1197},[96,166851,166135],{"class":106},[96,166853,10645],{"class":102},[96,166855,166856],{"class":106},"info)\n",[38,166858,166860],{"id":166859},"_78-匿名函数lambda","7.8 匿名函数lambda",[14,166862,166863,166866],{},[93,166864,166865],{},"lambda"," 用于定义简单匿名函数。",[87,166868,166870],{"className":30357,"code":166869,"language":30359,"meta":18,"style":18},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[93,166871,166872,166889],{"__ignoreMap":18},[96,166873,166874,166877,166879,166882,166885,166887],{"class":98,"line":99},[96,166875,166876],{"class":106},"add ",[96,166878,152],{"class":102},[96,166880,166881],{"class":102}," lambda",[96,166883,166884],{"class":106}," a, b: a ",[96,166886,588],{"class":102},[96,166888,151083],{"class":106},[96,166890,166891,166893,166895,166897,166899,166901],{"class":98,"line":19},[96,166892,30394],{"class":155},[96,166894,166579],{"class":106},[96,166896,324],{"class":155},[96,166898,12419],{"class":106},[96,166900,184],{"class":155},[96,166902,30476],{"class":106},[14,166904,166905],{},"常和排序、过滤等函数一起使用。",[14,166907,166908],{},"按分数排序：",[87,166910,166912],{"className":30357,"code":166911,"language":30359,"meta":18,"style":18},"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",[93,166913,166914,166922,166942,166962,166982,166986,166990,167013],{"__ignoreMap":18},[96,166915,166916,166918,166920],{"class":98,"line":99},[96,166917,159695],{"class":106},[96,166919,152],{"class":102},[96,166921,55426],{"class":106},[96,166923,166924,166926,166928,166930,166932,166934,166936,166938,166940],{"class":98,"line":19},[96,166925,148364],{"class":106},[96,166927,62658],{"class":211},[96,166929,51416],{"class":106},[96,166931,149867],{"class":211},[96,166933,12419],{"class":106},[96,166935,151451],{"class":211},[96,166937,51416],{"class":106},[96,166939,1096],{"class":155},[96,166941,4913],{"class":106},[96,166943,166944,166946,166948,166950,166952,166954,166956,166958,166960],{"class":98,"line":1162},[96,166945,148364],{"class":106},[96,166947,62658],{"class":211},[96,166949,51416],{"class":106},[96,166951,150915],{"class":211},[96,166953,12419],{"class":106},[96,166955,151451],{"class":211},[96,166957,51416],{"class":106},[96,166959,918],{"class":155},[96,166961,4913],{"class":106},[96,166963,166964,166966,166968,166970,166972,166974,166976,166978,166980],{"class":98,"line":1177},[96,166965,148364],{"class":106},[96,166967,62658],{"class":211},[96,166969,51416],{"class":106},[96,166971,159710],{"class":211},[96,166973,12419],{"class":106},[96,166975,151451],{"class":211},[96,166977,51416],{"class":106},[96,166979,513],{"class":155},[96,166981,4913],{"class":106},[96,166983,166984],{"class":98,"line":1183},[96,166985,33225],{"class":106},[96,166987,166988],{"class":98,"line":1197},[96,166989,2383],{"emptyLinePlaceholder":23},[96,166991,166992,166995,166997,166999,167001,167003,167005,167007,167009,167011],{"class":98,"line":1203},[96,166993,166994],{"class":106},"students.sort(",[96,166996,153925],{"class":5200},[96,166998,153928],{"class":102},[96,167000,153931],{"class":106},[96,167002,151451],{"class":211},[96,167004,112181],{"class":106},[96,167006,163507],{"class":5200},[96,167008,152],{"class":102},[96,167010,31455],{"class":155},[96,167012,113],{"class":106},[96,167014,167015,167017],{"class":98,"line":1294},[96,167016,30394],{"class":155},[96,167018,164974],{"class":106},[14,167020,167021,167022,167024],{},"如果逻辑复杂，不要硬写 ",[93,167023,166865],{},"，定义普通函数更清晰。",[38,167026,167028],{"id":167027},"_79-函数作为参数","7.9 函数作为参数",[14,167030,167031],{},"函数可以作为参数传给另一个函数。",[87,167033,167035],{"className":30357,"code":167034,"language":30359,"meta":18,"style":18},"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",[93,167036,167037,167045,167055,167059,167063,167073,167080,167084,167088],{"__ignoreMap":18},[96,167038,167039,167041,167043],{"class":98,"line":99},[96,167040,31926],{"class":102},[96,167042,5193],{"class":1946},[96,167044,151072],{"class":106},[96,167046,167047,167049,167051,167053],{"class":98,"line":19},[96,167048,4073],{"class":102},[96,167050,10853],{"class":106},[96,167052,588],{"class":102},[96,167054,151083],{"class":106},[96,167056,167057],{"class":98,"line":1162},[96,167058,2383],{"emptyLinePlaceholder":23},[96,167060,167061],{"class":98,"line":1177},[96,167062,2383],{"emptyLinePlaceholder":23},[96,167064,167065,167067,167070],{"class":98,"line":1183},[96,167066,31926],{"class":102},[96,167068,167069],{"class":1946}," calculate",[96,167071,167072],{"class":106},"(a, b, func):\n",[96,167074,167075,167077],{"class":98,"line":1197},[96,167076,4073],{"class":102},[96,167078,167079],{"class":106}," func(a, b)\n",[96,167081,167082],{"class":98,"line":1203},[96,167083,2383],{"emptyLinePlaceholder":23},[96,167085,167086],{"class":98,"line":1294},[96,167087,2383],{"emptyLinePlaceholder":23},[96,167089,167090,167092,167095,167097,167099,167101],{"class":98,"line":1300},[96,167091,30394],{"class":155},[96,167093,167094],{"class":106},"(calculate(",[96,167096,553],{"class":155},[96,167098,12419],{"class":106},[96,167100,807],{"class":155},[96,167102,167103],{"class":106},", add))\n",[14,167105,167106],{},"这种思想在排序、回调、框架中经常出现。",[38,167108,167110],{"id":167109},"_710-mapfiltersorted","7.10 map、filter、sorted",[67,167112,167114],{"id":167113},"_7101-map","7.10.1 map",[14,167116,167117,167119],{},[93,167118,74023],{}," 对每个元素执行函数。",[87,167121,167123],{"className":30357,"code":167122,"language":30359,"meta":18,"style":18},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[93,167124,167125,167149,167172],{"__ignoreMap":18},[96,167126,167127,167129,167131,167133,167135,167137,167139,167141,167143,167145,167147],{"class":98,"line":99},[96,167128,164079],{"class":106},[96,167130,152],{"class":102},[96,167132,52205],{"class":106},[96,167134,324],{"class":155},[96,167136,12419],{"class":106},[96,167138,184],{"class":155},[96,167140,12419],{"class":106},[96,167142,178],{"class":155},[96,167144,12419],{"class":106},[96,167146,400],{"class":155},[96,167148,33225],{"class":106},[96,167150,167151,167153,167155,167158,167160,167162,167165,167167,167169],{"class":98,"line":19},[96,167152,161285],{"class":106},[96,167154,152],{"class":102},[96,167156,167157],{"class":155}," map",[96,167159,107],{"class":106},[96,167161,166865],{"class":102},[96,167163,167164],{"class":106}," x: x ",[96,167166,562],{"class":102},[96,167168,14739],{"class":155},[96,167170,167171],{"class":106},", nums)\n",[96,167173,167174,167176,167178,167180],{"class":98,"line":1162},[96,167175,30394],{"class":155},[96,167177,107],{"class":106},[96,167179,154049],{"class":155},[96,167181,166047],{"class":106},[67,167183,167185],{"id":167184},"_7102-filter","7.10.2 filter",[14,167187,167188,167190],{},[93,167189,80030],{}," 保留满足条件的元素。",[87,167192,167194],{"className":30357,"code":167193,"language":30359,"meta":18,"style":18},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[93,167195,167196,167224,167249],{"__ignoreMap":18},[96,167197,167198,167200,167202,167204,167206,167208,167210,167212,167214,167216,167218,167220,167222],{"class":98,"line":99},[96,167199,164079],{"class":106},[96,167201,152],{"class":102},[96,167203,52205],{"class":106},[96,167205,324],{"class":155},[96,167207,12419],{"class":106},[96,167209,184],{"class":155},[96,167211,12419],{"class":106},[96,167213,178],{"class":155},[96,167215,12419],{"class":106},[96,167217,400],{"class":155},[96,167219,12419],{"class":106},[96,167221,426],{"class":155},[96,167223,33225],{"class":106},[96,167225,167226,167228,167230,167233,167235,167237,167239,167241,167243,167245,167247],{"class":98,"line":19},[96,167227,161285],{"class":106},[96,167229,152],{"class":102},[96,167231,167232],{"class":155}," filter",[96,167234,107],{"class":106},[96,167236,166865],{"class":102},[96,167238,167164],{"class":106},[96,167240,435],{"class":102},[96,167242,14739],{"class":155},[96,167244,101538],{"class":102},[96,167246,4076],{"class":155},[96,167248,167171],{"class":106},[96,167250,167251,167253,167255,167257],{"class":98,"line":1162},[96,167252,30394],{"class":155},[96,167254,107],{"class":106},[96,167256,154049],{"class":155},[96,167258,166047],{"class":106},[67,167260,167262],{"id":167261},"_7103-sorted","7.10.3 sorted",[14,167264,167265,167267],{},[93,167266,165215],{}," 返回排序后的新列表。",[87,167269,167271],{"className":30357,"code":167270,"language":30359,"meta":18,"style":18},"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",[93,167272,167273,167281,167301,167321,167341,167345,167349,167378],{"__ignoreMap":18},[96,167274,167275,167277,167279],{"class":98,"line":99},[96,167276,159695],{"class":106},[96,167278,152],{"class":102},[96,167280,55426],{"class":106},[96,167282,167283,167285,167287,167289,167291,167293,167295,167297,167299],{"class":98,"line":19},[96,167284,148364],{"class":106},[96,167286,62658],{"class":211},[96,167288,51416],{"class":106},[96,167290,149867],{"class":211},[96,167292,12419],{"class":106},[96,167294,151451],{"class":211},[96,167296,51416],{"class":106},[96,167298,1096],{"class":155},[96,167300,4913],{"class":106},[96,167302,167303,167305,167307,167309,167311,167313,167315,167317,167319],{"class":98,"line":1162},[96,167304,148364],{"class":106},[96,167306,62658],{"class":211},[96,167308,51416],{"class":106},[96,167310,150915],{"class":211},[96,167312,12419],{"class":106},[96,167314,151451],{"class":211},[96,167316,51416],{"class":106},[96,167318,918],{"class":155},[96,167320,4913],{"class":106},[96,167322,167323,167325,167327,167329,167331,167333,167335,167337,167339],{"class":98,"line":1177},[96,167324,148364],{"class":106},[96,167326,62658],{"class":211},[96,167328,51416],{"class":106},[96,167330,159710],{"class":211},[96,167332,12419],{"class":106},[96,167334,151451],{"class":211},[96,167336,51416],{"class":106},[96,167338,513],{"class":155},[96,167340,4913],{"class":106},[96,167342,167343],{"class":98,"line":1183},[96,167344,33225],{"class":106},[96,167346,167347],{"class":98,"line":1197},[96,167348,2383],{"emptyLinePlaceholder":23},[96,167350,167351,167353,167355,167357,167360,167362,167364,167366,167368,167370,167372,167374,167376],{"class":98,"line":1203},[96,167352,161285],{"class":106},[96,167354,152],{"class":102},[96,167356,163583],{"class":155},[96,167358,167359],{"class":106},"(students, ",[96,167361,153925],{"class":5200},[96,167363,153928],{"class":102},[96,167365,153931],{"class":106},[96,167367,151451],{"class":211},[96,167369,112181],{"class":106},[96,167371,163507],{"class":5200},[96,167373,152],{"class":102},[96,167375,31455],{"class":155},[96,167377,113],{"class":106},[96,167379,167380,167382],{"class":98,"line":1294},[96,167381,30394],{"class":155},[96,167383,76564],{"class":106},[38,167385,167387],{"id":167386},"_711-闭包入门","7.11 闭包入门",[14,167389,167390],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[87,167392,167394],{"className":30357,"code":167393,"language":30359,"meta":18,"style":18},"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",[93,167395,167396,167406,167416,167427,167431,167438,167442,167446,167460],{"__ignoreMap":18},[96,167397,167398,167400,167403],{"class":98,"line":99},[96,167399,31926],{"class":102},[96,167401,167402],{"class":1946}," outer",[96,167404,167405],{"class":106},"(base):\n",[96,167407,167408,167410,167413],{"class":98,"line":19},[96,167409,30780],{"class":102},[96,167411,167412],{"class":1946}," inner",[96,167414,167415],{"class":106},"(num):\n",[96,167417,167418,167420,167423,167425],{"class":98,"line":1162},[96,167419,14736],{"class":102},[96,167421,167422],{"class":106}," base ",[96,167424,588],{"class":102},[96,167426,166558],{"class":106},[96,167428,167429],{"class":98,"line":1177},[96,167430,2383],{"emptyLinePlaceholder":23},[96,167432,167433,167435],{"class":98,"line":1183},[96,167434,4073],{"class":102},[96,167436,167437],{"class":106}," inner\n",[96,167439,167440],{"class":98,"line":1197},[96,167441,2383],{"emptyLinePlaceholder":23},[96,167443,167444],{"class":98,"line":1203},[96,167445,2383],{"emptyLinePlaceholder":23},[96,167447,167448,167451,167453,167456,167458],{"class":98,"line":1294},[96,167449,167450],{"class":106},"add_10 ",[96,167452,152],{"class":102},[96,167454,167455],{"class":106}," outer(",[96,167457,553],{"class":155},[96,167459,113],{"class":106},[96,167461,167462,167464,167467,167469],{"class":98,"line":1300},[96,167463,30394],{"class":155},[96,167465,167466],{"class":106},"(add_10(",[96,167468,426],{"class":155},[96,167470,30476],{"class":106},[14,167472,167473],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[38,167475,167477],{"id":167476},"_712-装饰器入门","7.12 装饰器入门",[14,167479,167480],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[87,167482,167484],{"className":30357,"code":167483,"language":30359,"meta":18,"style":18},"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",[93,167485,167486,167495,167504,167515,167520,167531,167535,167542,167546,167550,167555,167563,167573,167577,167581],{"__ignoreMap":18},[96,167487,167488,167490,167492],{"class":98,"line":99},[96,167489,31926],{"class":102},[96,167491,87170],{"class":1946},[96,167493,167494],{"class":106},"(func):\n",[96,167496,167497,167499,167502],{"class":98,"line":19},[96,167498,30780],{"class":102},[96,167500,167501],{"class":1946}," wrapper",[96,167503,31932],{"class":106},[96,167505,167506,167508,167510,167513],{"class":98,"line":1162},[96,167507,32430],{"class":155},[96,167509,107],{"class":106},[96,167511,167512],{"class":211},"\"函数开始执行\"",[96,167514,113],{"class":106},[96,167516,167517],{"class":98,"line":1177},[96,167518,167519],{"class":106},"        func()\n",[96,167521,167522,167524,167526,167529],{"class":98,"line":1183},[96,167523,32430],{"class":155},[96,167525,107],{"class":106},[96,167527,167528],{"class":211},"\"函数执行结束\"",[96,167530,113],{"class":106},[96,167532,167533],{"class":98,"line":1197},[96,167534,2383],{"emptyLinePlaceholder":23},[96,167536,167537,167539],{"class":98,"line":1203},[96,167538,4073],{"class":102},[96,167540,167541],{"class":106}," wrapper\n",[96,167543,167544],{"class":98,"line":1294},[96,167545,2383],{"emptyLinePlaceholder":23},[96,167547,167548],{"class":98,"line":1300},[96,167549,2383],{"emptyLinePlaceholder":23},[96,167551,167552],{"class":98,"line":1312},[96,167553,167554],{"class":1946},"@log\n",[96,167556,167557,167559,167561],{"class":98,"line":1595},[96,167558,31926],{"class":102},[96,167560,160975],{"class":1946},[96,167562,31932],{"class":106},[96,167564,167565,167567,167569,167571],{"class":98,"line":1600},[96,167566,31278],{"class":155},[96,167568,107],{"class":106},[96,167570,5828],{"class":211},[96,167572,113],{"class":106},[96,167574,167575],{"class":98,"line":1606},[96,167576,2383],{"emptyLinePlaceholder":23},[96,167578,167579],{"class":98,"line":1611},[96,167580,2383],{"emptyLinePlaceholder":23},[96,167582,167583],{"class":98,"line":1625},[96,167584,161010],{"class":106},[14,167586,158253],{},[87,167588,167590],{"className":30357,"code":167589,"language":30359,"meta":18,"style":18},"say_hello = log(say_hello)\n",[93,167591,167592],{"__ignoreMap":18},[96,167593,167594,167597,167599],{"class":98,"line":99},[96,167595,167596],{"class":106},"say_hello ",[96,167598,152],{"class":102},[96,167600,167601],{"class":106}," log(say_hello)\n",[14,167603,167604],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[38,167606,167608],{"id":167607},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[87,167610,167612],{"className":30357,"code":167611,"language":30359,"meta":18,"style":18},"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",[93,167613,167614,167622,167639,167649,167668,167678,167685,167689,167695,167699,167703,167707,167715,167725,167729,167733],{"__ignoreMap":18},[96,167615,167616,167618,167620],{"class":98,"line":99},[96,167617,31926],{"class":102},[96,167619,87170],{"class":1946},[96,167621,167494],{"class":106},[96,167623,167624,167626,167628,167630,167632,167635,167637],{"class":98,"line":19},[96,167625,30780],{"class":102},[96,167627,167501],{"class":1946},[96,167629,107],{"class":106},[96,167631,562],{"class":102},[96,167633,167634],{"class":106},"args, ",[96,167636,10645],{"class":102},[96,167638,166645],{"class":106},[96,167640,167641,167643,167645,167647],{"class":98,"line":1162},[96,167642,32430],{"class":155},[96,167644,107],{"class":106},[96,167646,167512],{"class":211},[96,167648,113],{"class":106},[96,167650,167651,167654,167656,167659,167661,167663,167665],{"class":98,"line":1177},[96,167652,167653],{"class":106},"        result ",[96,167655,152],{"class":102},[96,167657,167658],{"class":106}," func(",[96,167660,562],{"class":102},[96,167662,167634],{"class":106},[96,167664,10645],{"class":102},[96,167666,167667],{"class":106},"kwargs)\n",[96,167669,167670,167672,167674,167676],{"class":98,"line":1183},[96,167671,32430],{"class":155},[96,167673,107],{"class":106},[96,167675,167528],{"class":211},[96,167677,113],{"class":106},[96,167679,167680,167682],{"class":98,"line":1197},[96,167681,14736],{"class":102},[96,167683,167684],{"class":106}," result\n",[96,167686,167687],{"class":98,"line":1203},[96,167688,2383],{"emptyLinePlaceholder":23},[96,167690,167691,167693],{"class":98,"line":1294},[96,167692,4073],{"class":102},[96,167694,167541],{"class":106},[96,167696,167697],{"class":98,"line":1300},[96,167698,2383],{"emptyLinePlaceholder":23},[96,167700,167701],{"class":98,"line":1312},[96,167702,2383],{"emptyLinePlaceholder":23},[96,167704,167705],{"class":98,"line":1595},[96,167706,167554],{"class":1946},[96,167708,167709,167711,167713],{"class":98,"line":1600},[96,167710,31926],{"class":102},[96,167712,5193],{"class":1946},[96,167714,151072],{"class":106},[96,167716,167717,167719,167721,167723],{"class":98,"line":1606},[96,167718,4073],{"class":102},[96,167720,10853],{"class":106},[96,167722,588],{"class":102},[96,167724,151083],{"class":106},[96,167726,167727],{"class":98,"line":1611},[96,167728,2383],{"emptyLinePlaceholder":23},[96,167730,167731],{"class":98,"line":1625},[96,167732,2383],{"emptyLinePlaceholder":23},[96,167734,167735,167737,167739,167741,167743,167745],{"class":98,"line":1630},[96,167736,30394],{"class":155},[96,167738,166579],{"class":106},[96,167740,553],{"class":155},[96,167742,12419],{"class":106},[96,167744,807],{"class":155},[96,167746,30476],{"class":106},[14,167748,167749,167750,100997,167752,167754],{},"这个写法使用 ",[93,167751,166511],{},[93,167753,166626],{}," 接收原函数的所有参数。",[38,167756,167758],{"id":167757},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[14,167760,123271],{},[50,167762,167763,167766,167769],{},[53,167764,167765],{},"给定一组学生数据。",[53,167767,167768],{},"封装函数，根据传入规则筛选学生。",[53,167770,167771],{},"筛选及格、优秀、未成年学生。",[14,167773,10019],{},[87,167775,167777],{"className":30357,"code":167776,"language":30359,"meta":18,"style":18},"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",[93,167778,167779,167787,167815,167843,167871,167875,167879,167883,167893,167901,167911,167918,167923,167929,167933,167937,167961,167984,168007,168011,168018,168025],{"__ignoreMap":18},[96,167780,167781,167783,167785],{"class":98,"line":99},[96,167782,159695],{"class":106},[96,167784,152],{"class":102},[96,167786,55426],{"class":106},[96,167788,167789,167791,167793,167795,167797,167799,167801,167803,167805,167807,167809,167811,167813],{"class":98,"line":19},[96,167790,148364],{"class":106},[96,167792,62658],{"class":211},[96,167794,51416],{"class":106},[96,167796,149867],{"class":211},[96,167798,12419],{"class":106},[96,167800,69103],{"class":211},[96,167802,51416],{"class":106},[96,167804,757],{"class":155},[96,167806,12419],{"class":106},[96,167808,151451],{"class":211},[96,167810,51416],{"class":106},[96,167812,1096],{"class":155},[96,167814,4913],{"class":106},[96,167816,167817,167819,167821,167823,167825,167827,167829,167831,167833,167835,167837,167839,167841],{"class":98,"line":1162},[96,167818,148364],{"class":106},[96,167820,62658],{"class":211},[96,167822,51416],{"class":106},[96,167824,150915],{"class":211},[96,167826,12419],{"class":106},[96,167828,69103],{"class":211},[96,167830,51416],{"class":106},[96,167832,732],{"class":155},[96,167834,12419],{"class":106},[96,167836,151451],{"class":211},[96,167838,51416],{"class":106},[96,167840,918],{"class":155},[96,167842,4913],{"class":106},[96,167844,167845,167847,167849,167851,167853,167855,167857,167859,167861,167863,167865,167867,167869],{"class":98,"line":1177},[96,167846,148364],{"class":106},[96,167848,62658],{"class":211},[96,167850,51416],{"class":106},[96,167852,159710],{"class":211},[96,167854,12419],{"class":106},[96,167856,69103],{"class":211},[96,167858,51416],{"class":106},[96,167860,782],{"class":155},[96,167862,12419],{"class":106},[96,167864,151451],{"class":211},[96,167866,51416],{"class":106},[96,167868,989],{"class":155},[96,167870,4913],{"class":106},[96,167872,167873],{"class":98,"line":1183},[96,167874,33225],{"class":106},[96,167876,167877],{"class":98,"line":1197},[96,167878,2383],{"emptyLinePlaceholder":23},[96,167880,167881],{"class":98,"line":1203},[96,167882,2383],{"emptyLinePlaceholder":23},[96,167884,167885,167887,167890],{"class":98,"line":1294},[96,167886,31926],{"class":102},[96,167888,167889],{"class":1946}," filter_students",[96,167891,167892],{"class":106},"(students, condition):\n",[96,167894,167895,167897,167899],{"class":98,"line":1300},[96,167896,161202],{"class":106},[96,167898,152],{"class":102},[96,167900,51817],{"class":106},[96,167902,167903,167905,167907,167909],{"class":98,"line":1312},[96,167904,3184],{"class":102},[96,167906,152116],{"class":106},[96,167908,26022],{"class":102},[96,167910,152121],{"class":106},[96,167912,167913,167915],{"class":98,"line":1595},[96,167914,2480],{"class":102},[96,167916,167917],{"class":106}," condition(student):\n",[96,167919,167920],{"class":98,"line":1600},[96,167921,167922],{"class":106},"            result.append(student)\n",[96,167924,167925,167927],{"class":98,"line":1606},[96,167926,4073],{"class":102},[96,167928,167684],{"class":106},[96,167930,167931],{"class":98,"line":1611},[96,167932,2383],{"emptyLinePlaceholder":23},[96,167934,167935],{"class":98,"line":1625},[96,167936,2383],{"emptyLinePlaceholder":23},[96,167938,167939,167941,167943,167946,167948,167951,167953,167955,167957,167959],{"class":98,"line":1630},[96,167940,165680],{"class":106},[96,167942,152],{"class":102},[96,167944,167945],{"class":106}," filter_students(students, ",[96,167947,166865],{"class":102},[96,167949,167950],{"class":106}," s: s[",[96,167952,151451],{"class":211},[96,167954,4426],{"class":106},[96,167956,1693],{"class":102},[96,167958,157816],{"class":155},[96,167960,113],{"class":106},[96,167962,167963,167966,167968,167970,167972,167974,167976,167978,167980,167982],{"class":98,"line":1636},[96,167964,167965],{"class":106},"excellent ",[96,167967,152],{"class":102},[96,167969,167945],{"class":106},[96,167971,166865],{"class":102},[96,167973,167950],{"class":106},[96,167975,151451],{"class":211},[96,167977,4426],{"class":106},[96,167979,1693],{"class":102},[96,167981,157767],{"class":155},[96,167983,113],{"class":106},[96,167985,167986,167989,167991,167993,167995,167997,167999,168001,168003,168005],{"class":98,"line":1657},[96,167987,167988],{"class":106},"under_age ",[96,167990,152],{"class":102},[96,167992,167945],{"class":106},[96,167994,166865],{"class":102},[96,167996,167950],{"class":106},[96,167998,69103],{"class":211},[96,168000,4426],{"class":106},[96,168002,1017],{"class":102},[96,168004,156264],{"class":155},[96,168006,113],{"class":106},[96,168008,168009],{"class":98,"line":1662},[96,168010,2383],{"emptyLinePlaceholder":23},[96,168012,168013,168015],{"class":98,"line":1676},[96,168014,30394],{"class":155},[96,168016,168017],{"class":106},"(passed)\n",[96,168019,168020,168022],{"class":98,"line":1681},[96,168021,30394],{"class":155},[96,168023,168024],{"class":106},"(excellent)\n",[96,168026,168027,168029],{"class":98,"line":1710},[96,168028,30394],{"class":155},[96,168030,168031],{"class":106},"(under_age)\n",[38,168033,168035],{"id":168034},"_715-易错点","7.15 易错点",[50,168037,168038,168041,168049,168054,168065],{},[53,168039,168040],{},"默认参数不要写可变对象。",[53,168042,168043,168045,168046,168048],{},[93,168044,166511],{}," 是元组，",[93,168047,166626],{}," 是字典。",[53,168050,168051,168053],{},[93,168052,166865],{}," 只适合简单表达式。",[53,168055,168056,100997,168058,168060,168061,168064],{},[93,168057,74023],{},[93,168059,80030],{}," 的结果是迭代器，常用 ",[93,168062,168063],{},"list()"," 转换查看。",[53,168066,168067],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[38,168069,168071],{"id":168070},"_716-本章练习","7.16 本章练习",[50,168073,168074,168081,168087,168092,168097],{},[53,168075,168076,168077,168080],{},"写函数 ",[93,168078,168079],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[53,168082,168076,168083,168086],{},[93,168084,168085],{},"print_user(**kwargs)","，输出用户所有字段。",[53,168088,104345,168089,168091],{},[93,168090,166865],{}," 对学生列表按年龄排序。",[53,168093,104345,168094,168096],{},[93,168095,80030],{}," 找出成绩不及格的学生。",[53,168098,168099],{},"写一个装饰器，统计函数执行前后的提示信息。",[5110,168101,168102],{},"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":18,"searchDepth":19,"depth":19,"links":168104},[168105,168106,168107,168108,168109,168110,168114,168115,168116,168117,168122,168123,168124,168125,168126,168127],{"id":165963,"depth":19,"text":165964},{"id":166077,"depth":19,"text":166078},{"id":166166,"depth":19,"text":166167},{"id":166228,"depth":19,"text":166229},{"id":166374,"depth":19,"text":166375},{"id":166501,"depth":19,"text":166502,"children":168111},[168112,168113],{"id":166505,"depth":1162,"text":166506},{"id":166620,"depth":1162,"text":166621},{"id":166701,"depth":19,"text":166702},{"id":166859,"depth":19,"text":166860},{"id":167027,"depth":19,"text":167028},{"id":167109,"depth":19,"text":167110,"children":168118},[168119,168120,168121],{"id":167113,"depth":1162,"text":167114},{"id":167184,"depth":1162,"text":167185},{"id":167261,"depth":1162,"text":167262},{"id":167386,"depth":19,"text":167387},{"id":167476,"depth":19,"text":167477},{"id":167607,"depth":19,"text":167608},{"id":167757,"depth":19,"text":167758},{"id":168034,"depth":19,"text":168035},{"id":168070,"depth":19,"text":168071},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":165955,"description":23361},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168134,"title":168135,"body":168136,"description":23361,"extension":21,"meta":170655,"navigation":23,"path":170656,"seo":170657,"stem":170658,"__hash__":170659},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168137,"toc":170630},[168138,168141,168145,168148,168151,168182,168186,168190,168193,168220,168224,168227,168278,168281,168296,168299,168334,168338,168340,168364,168367,168427,168431,168435,168438,168495,168498,168518,168522,168525,168588,168592,168595,168651,168658,168682,168686,168689,168752,168756,168761,168812,168815,168819,168824,168891,168894,168976,168980,168985,169036,169039,169043,169046,169049,169057,169060,169106,169109,169155,169159,169165,169209,169212,169258,169261,169301,169304,169365,169369,169372,169462,169465,169607,169610,169677,169681,169684,169687,169828,169831,169909,169912,170088,170092,170094,170105,170107,170306,170310,170554,170558,170592,170596,170627],[10,168139,168135],{"id":168140},"_8-文件操作",[38,168142,168144],{"id":168143},"_81-文件操作的意义","8.1 文件操作的意义",[14,168146,168147],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[14,168149,168150],{},"常见文件类型：",[50,168152,168153,168159,168165,168171,168177],{},[53,168154,168155,168158],{},[93,168156,168157],{},".txt","：普通文本。",[53,168160,168161,168164],{},[93,168162,168163],{},".csv","：表格文本。",[53,168166,168167,168170],{},[93,168168,168169],{},".json","：结构化数据。",[53,168172,168173,168176],{},[93,168174,168175],{},".log","：日志文件。",[53,168178,168179,168181],{},[93,168180,146331],{},"：Python 源代码。",[38,168183,168185],{"id":168184},"_82-路径","8.2 路径",[67,168187,168189],{"id":168188},"_821-相对路径","8.2.1 相对路径",[14,168191,168192],{},"相对当前运行目录：",[87,168194,168196],{"className":30357,"code":168195,"language":30359,"meta":18,"style":18},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[93,168197,168198],{"__ignoreMap":18},[96,168199,168200,168202,168204,168206,168208,168210,168212,168214,168216,168218],{"class":98,"line":99},[96,168201,86894],{"class":155},[96,168203,107],{"class":106},[96,168205,146775],{"class":211},[96,168207,12419],{"class":106},[96,168209,146780],{"class":211},[96,168211,12419],{"class":106},[96,168213,146785],{"class":5200},[96,168215,152],{"class":102},[96,168217,146790],{"class":211},[96,168219,113],{"class":106},[67,168221,168223],{"id":168222},"_822-绝对路径","8.2.2 绝对路径",[14,168225,168226],{},"从根目录或盘符开始：",[87,168228,168230],{"className":30357,"code":168229,"language":30359,"meta":18,"style":18},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[93,168231,168232,168255],{"__ignoreMap":18},[96,168233,168234,168236,168238,168241,168243,168245,168247,168249,168251,168253],{"class":98,"line":99},[96,168235,86894],{"class":155},[96,168237,107],{"class":106},[96,168239,168240],{"class":211},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[96,168242,12419],{"class":106},[96,168244,146780],{"class":211},[96,168246,12419],{"class":106},[96,168248,146785],{"class":5200},[96,168250,152],{"class":102},[96,168252,146790],{"class":211},[96,168254,113],{"class":106},[96,168256,168257,168259,168261,168264,168266,168268,168270,168272,168274,168276],{"class":98,"line":19},[96,168258,86894],{"class":155},[96,168260,107],{"class":106},[96,168262,168263],{"class":211},"\"D:\u002Fdata\u002Fdata.txt\"",[96,168265,12419],{"class":106},[96,168267,146780],{"class":211},[96,168269,12419],{"class":106},[96,168271,146785],{"class":5200},[96,168273,152],{"class":102},[96,168275,146790],{"class":211},[96,168277,113],{"class":106},[14,168279,168280],{},"Windows 路径建议写成：",[87,168282,168284],{"className":30357,"code":168283,"language":30359,"meta":18,"style":18},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[93,168285,168286],{"__ignoreMap":18},[96,168287,168288,168291,168293],{"class":98,"line":99},[96,168289,168290],{"class":106},"path ",[96,168292,152],{"class":102},[96,168294,168295],{"class":211}," \"D:\u002Fdata\u002Fdata.txt\"\n",[14,168297,168298],{},"或原始字符串：",[87,168300,168302],{"className":30357,"code":168301,"language":30359,"meta":18,"style":18},"path = r\"D:\\data\\data.txt\"\n",[93,168303,168304],{"__ignoreMap":18},[96,168305,168306,168308,168310,168312,168314,168317,168320,168323,168325,168327,168329,168332],{"class":98,"line":99},[96,168307,168290],{"class":106},[96,168309,152],{"class":102},[96,168311,17105],{"class":102},[96,168313,358],{"class":211},[96,168315,168316],{"class":47956},"D:",[96,168318,168319],{"class":155},"\\d",[96,168321,168322],{"class":47956},"ata",[96,168324,168319],{"class":155},[96,168326,168322],{"class":47956},[96,168328,665],{"class":155},[96,168330,168331],{"class":47956},"txt",[96,168333,25112],{"class":211},[38,168335,168337],{"id":168336},"_83-open函数","8.3 open函数",[14,168339,5165],{},[87,168341,168343],{"className":30357,"code":168342,"language":30359,"meta":18,"style":18},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[93,168344,168345],{"__ignoreMap":18},[96,168346,168347,168349,168351,168353,168356,168358,168360,168362],{"class":98,"line":99},[96,168348,45333],{"class":5200},[96,168350,13548],{"class":102},[96,168352,146770],{"class":155},[96,168354,168355],{"class":106},"(文件路径, 打开模式, ",[96,168357,146785],{"class":5200},[96,168359,152],{"class":102},[96,168361,146790],{"class":211},[96,168363,113],{"class":106},[14,168365,168366],{},"常见模式：",[244,168368,168369,168378],{},[247,168370,168371],{},[250,168372,168373,168376],{},[253,168374,168375],{},"模式",[253,168377,25848],{},[291,168379,168380,168389,168398,168407,168417],{},[250,168381,168382,168386],{},[296,168383,168384],{},[93,168385,777],{},[296,168387,168388],{},"只读，文件不存在会报错",[250,168390,168391,168395],{},[296,168392,168393],{},[93,168394,902],{},[296,168396,168397],{},"只写，文件不存在会创建，存在会清空",[250,168399,168400,168404],{},[296,168401,168402],{},[93,168403,345],{},[296,168405,168406],{},"追加，文件不存在会创建",[250,168408,168409,168414],{},[296,168410,168411],{},[93,168412,168413],{},"rb",[296,168415,168416],{},"二进制只读",[250,168418,168419,168424],{},[296,168420,168421],{},[93,168422,168423],{},"wb",[296,168425,168426],{},"二进制只写",[38,168428,168430],{"id":168429},"_84-读取文件","8.4 读取文件",[67,168432,168434],{"id":168433},"_841-read","8.4.1 read",[14,168436,168437],{},"一次读取全部内容：",[87,168439,168441],{"className":30357,"code":168440,"language":30359,"meta":18,"style":18},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[93,168442,168443,168469,168481,168488],{"__ignoreMap":18},[96,168444,168445,168447,168449,168451,168453,168455,168457,168459,168461,168463,168465,168467],{"class":98,"line":99},[96,168446,45333],{"class":5200},[96,168448,13548],{"class":102},[96,168450,146770],{"class":155},[96,168452,107],{"class":106},[96,168454,146775],{"class":211},[96,168456,12419],{"class":106},[96,168458,146780],{"class":211},[96,168460,12419],{"class":106},[96,168462,146785],{"class":5200},[96,168464,152],{"class":102},[96,168466,146790],{"class":211},[96,168468,113],{"class":106},[96,168470,168471,168474,168476,168478],{"class":98,"line":19},[96,168472,168473],{"class":106},"content ",[96,168475,152],{"class":102},[96,168477,148132],{"class":5200},[96,168479,168480],{"class":106},".read()\n",[96,168482,168483,168485],{"class":98,"line":1162},[96,168484,30394],{"class":155},[96,168486,168487],{"class":106},"(content)\n",[96,168489,168490,168492],{"class":98,"line":1177},[96,168491,45333],{"class":5200},[96,168493,168494],{"class":106},".close()\n",[14,168496,168497],{},"可以指定读取字符数：",[87,168499,168501],{"className":30357,"code":168500,"language":30359,"meta":18,"style":18},"content = file.read(10)\n",[93,168502,168503],{"__ignoreMap":18},[96,168504,168505,168507,168509,168511,168514,168516],{"class":98,"line":99},[96,168506,168473],{"class":106},[96,168508,152],{"class":102},[96,168510,148132],{"class":5200},[96,168512,168513],{"class":106},".read(",[96,168515,553],{"class":155},[96,168517,113],{"class":106},[67,168519,168521],{"id":168520},"_842-readline","8.4.2 readline",[14,168523,168524],{},"一次读取一行：",[87,168526,168528],{"className":30357,"code":168527,"language":30359,"meta":18,"style":18},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[93,168529,168530,168556,168560,168571,168578,168582],{"__ignoreMap":18},[96,168531,168532,168534,168536,168538,168540,168542,168544,168546,168548,168550,168552,168554],{"class":98,"line":99},[96,168533,45333],{"class":5200},[96,168535,13548],{"class":102},[96,168537,146770],{"class":155},[96,168539,107],{"class":106},[96,168541,146775],{"class":211},[96,168543,12419],{"class":106},[96,168545,146780],{"class":211},[96,168547,12419],{"class":106},[96,168549,146785],{"class":5200},[96,168551,152],{"class":102},[96,168553,146790],{"class":211},[96,168555,113],{"class":106},[96,168557,168558],{"class":98,"line":19},[96,168559,2383],{"emptyLinePlaceholder":23},[96,168561,168562,168564,168566,168568],{"class":98,"line":1162},[96,168563,147231],{"class":106},[96,168565,152],{"class":102},[96,168567,148132],{"class":5200},[96,168569,168570],{"class":106},".readline()\n",[96,168572,168573,168575],{"class":98,"line":1177},[96,168574,30394],{"class":155},[96,168576,168577],{"class":106},"(line)\n",[96,168579,168580],{"class":98,"line":1183},[96,168581,2383],{"emptyLinePlaceholder":23},[96,168583,168584,168586],{"class":98,"line":1197},[96,168585,45333],{"class":5200},[96,168587,168494],{"class":106},[67,168589,168591],{"id":168590},"_843-readlines","8.4.3 readlines",[14,168593,168594],{},"读取所有行，返回列表：",[87,168596,168598],{"className":30357,"code":168597,"language":30359,"meta":18,"style":18},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[93,168599,168600,168626,168638,168645],{"__ignoreMap":18},[96,168601,168602,168604,168606,168608,168610,168612,168614,168616,168618,168620,168622,168624],{"class":98,"line":99},[96,168603,45333],{"class":5200},[96,168605,13548],{"class":102},[96,168607,146770],{"class":155},[96,168609,107],{"class":106},[96,168611,146775],{"class":211},[96,168613,12419],{"class":106},[96,168615,146780],{"class":211},[96,168617,12419],{"class":106},[96,168619,146785],{"class":5200},[96,168621,152],{"class":102},[96,168623,146790],{"class":211},[96,168625,113],{"class":106},[96,168627,168628,168631,168633,168635],{"class":98,"line":19},[96,168629,168630],{"class":106},"lines ",[96,168632,152],{"class":102},[96,168634,148132],{"class":5200},[96,168636,168637],{"class":106},".readlines()\n",[96,168639,168640,168642],{"class":98,"line":1162},[96,168641,30394],{"class":155},[96,168643,168644],{"class":106},"(lines)\n",[96,168646,168647,168649],{"class":98,"line":1177},[96,168648,45333],{"class":5200},[96,168650,168494],{"class":106},[14,168652,168653,168654,168657],{},"每一行通常带有换行符，可以用 ",[93,168655,168656],{},"strip()"," 去掉：",[87,168659,168661],{"className":30357,"code":168660,"language":30359,"meta":18,"style":18},"for line in lines:\n    print(line.strip())\n",[93,168662,168663,168675],{"__ignoreMap":18},[96,168664,168665,168667,168670,168672],{"class":98,"line":99},[96,168666,3008],{"class":102},[96,168668,168669],{"class":106}," line ",[96,168671,26022],{"class":102},[96,168673,168674],{"class":106}," lines:\n",[96,168676,168677,168679],{"class":98,"line":19},[96,168678,31278],{"class":155},[96,168680,168681],{"class":106},"(line.strip())\n",[67,168683,168685],{"id":168684},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[14,168687,168688],{},"推荐读取大文件时使用：",[87,168690,168692],{"className":30357,"code":168691,"language":30359,"meta":18,"style":18},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[93,168693,168694,168720,168724,168736,168742,168746],{"__ignoreMap":18},[96,168695,168696,168698,168700,168702,168704,168706,168708,168710,168712,168714,168716,168718],{"class":98,"line":99},[96,168697,45333],{"class":5200},[96,168699,13548],{"class":102},[96,168701,146770],{"class":155},[96,168703,107],{"class":106},[96,168705,146775],{"class":211},[96,168707,12419],{"class":106},[96,168709,146780],{"class":211},[96,168711,12419],{"class":106},[96,168713,146785],{"class":5200},[96,168715,152],{"class":102},[96,168717,146790],{"class":211},[96,168719,113],{"class":106},[96,168721,168722],{"class":98,"line":19},[96,168723,2383],{"emptyLinePlaceholder":23},[96,168725,168726,168728,168730,168732,168734],{"class":98,"line":1162},[96,168727,3008],{"class":102},[96,168729,168669],{"class":106},[96,168731,26022],{"class":102},[96,168733,148132],{"class":5200},[96,168735,3722],{"class":106},[96,168737,168738,168740],{"class":98,"line":1177},[96,168739,31278],{"class":155},[96,168741,168681],{"class":106},[96,168743,168744],{"class":98,"line":1183},[96,168745,2383],{"emptyLinePlaceholder":23},[96,168747,168748,168750],{"class":98,"line":1197},[96,168749,45333],{"class":5200},[96,168751,168494],{"class":106},[38,168753,168755],{"id":168754},"_85-with语句","8.5 with语句",[14,168757,168758,168760],{},[93,168759,107812],{}," 会自动关闭文件，推荐使用。",[87,168762,168764],{"className":30357,"code":168763,"language":30359,"meta":18,"style":18},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[93,168765,168766,168796,168806],{"__ignoreMap":18},[96,168767,168768,168770,168772,168774,168776,168778,168780,168782,168784,168786,168788,168790,168792,168794],{"class":98,"line":99},[96,168769,107812],{"class":102},[96,168771,146770],{"class":155},[96,168773,107],{"class":106},[96,168775,146775],{"class":211},[96,168777,12419],{"class":106},[96,168779,146780],{"class":211},[96,168781,12419],{"class":106},[96,168783,146785],{"class":5200},[96,168785,152],{"class":102},[96,168787,146790],{"class":211},[96,168789,13698],{"class":106},[96,168791,31362],{"class":102},[96,168793,148132],{"class":5200},[96,168795,3722],{"class":106},[96,168797,168798,168800,168802,168804],{"class":98,"line":19},[96,168799,146802],{"class":106},[96,168801,152],{"class":102},[96,168803,148132],{"class":5200},[96,168805,168480],{"class":106},[96,168807,168808,168810],{"class":98,"line":1162},[96,168809,31278],{"class":155},[96,168811,168487],{"class":106},[14,168813,168814],{},"等价于打开文件、读取、最后关闭，但更安全。",[38,168816,168818],{"id":168817},"_86-写入文件","8.6 写入文件",[14,168820,168821,168823],{},[93,168822,902],{}," 模式会清空原文件。",[87,168825,168827],{"className":30357,"code":168826,"language":30359,"meta":18,"style":18},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[93,168828,168829,168859,168876],{"__ignoreMap":18},[96,168830,168831,168833,168835,168837,168839,168841,168843,168845,168847,168849,168851,168853,168855,168857],{"class":98,"line":99},[96,168832,107812],{"class":102},[96,168834,146770],{"class":155},[96,168836,107],{"class":106},[96,168838,146775],{"class":211},[96,168840,12419],{"class":106},[96,168842,151955],{"class":211},[96,168844,12419],{"class":106},[96,168846,146785],{"class":5200},[96,168848,152],{"class":102},[96,168850,146790],{"class":211},[96,168852,13698],{"class":106},[96,168854,31362],{"class":102},[96,168856,148132],{"class":5200},[96,168858,3722],{"class":106},[96,168860,168861,168864,168867,168870,168872,168874],{"class":98,"line":19},[96,168862,168863],{"class":5200},"    file",[96,168865,168866],{"class":106},".write(",[96,168868,168869],{"class":211},"\"hello",[96,168871,156504],{"class":155},[96,168873,358],{"class":211},[96,168875,113],{"class":106},[96,168877,168878,168880,168882,168885,168887,168889],{"class":98,"line":1162},[96,168879,168863],{"class":5200},[96,168881,168866],{"class":106},[96,168883,168884],{"class":211},"\"python",[96,168886,156504],{"class":155},[96,168888,358],{"class":211},[96,168890,113],{"class":106},[14,168892,168893],{},"写入多行：",[87,168895,168897],{"className":30357,"code":168896,"language":30359,"meta":18,"style":18},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[93,168898,168899,168934,168938,168969],{"__ignoreMap":18},[96,168900,168901,168903,168905,168907,168910,168912,168914,168916,168919,168921,168923,168925,168928,168930,168932],{"class":98,"line":99},[96,168902,168630],{"class":106},[96,168904,152],{"class":102},[96,168906,52205],{"class":106},[96,168908,168909],{"class":211},"\"小明,18",[96,168911,156504],{"class":155},[96,168913,358],{"class":211},[96,168915,12419],{"class":106},[96,168917,168918],{"class":211},"\"小红,17",[96,168920,156504],{"class":155},[96,168922,358],{"class":211},[96,168924,12419],{"class":106},[96,168926,168927],{"class":211},"\"小刚,19",[96,168929,156504],{"class":155},[96,168931,358],{"class":211},[96,168933,33225],{"class":106},[96,168935,168936],{"class":98,"line":19},[96,168937,2383],{"emptyLinePlaceholder":23},[96,168939,168940,168942,168944,168946,168949,168951,168953,168955,168957,168959,168961,168963,168965,168967],{"class":98,"line":1162},[96,168941,107812],{"class":102},[96,168943,146770],{"class":155},[96,168945,107],{"class":106},[96,168947,168948],{"class":211},"\"students.txt\"",[96,168950,12419],{"class":106},[96,168952,151955],{"class":211},[96,168954,12419],{"class":106},[96,168956,146785],{"class":5200},[96,168958,152],{"class":102},[96,168960,146790],{"class":211},[96,168962,13698],{"class":106},[96,168964,31362],{"class":102},[96,168966,148132],{"class":5200},[96,168968,3722],{"class":106},[96,168970,168971,168973],{"class":98,"line":1177},[96,168972,168863],{"class":5200},[96,168974,168975],{"class":106},".writelines(lines)\n",[38,168977,168979],{"id":168978},"_87-追加文件","8.7 追加文件",[14,168981,168982,168984],{},[93,168983,345],{}," 模式不会清空原内容，而是在末尾追加。",[87,168986,168988],{"className":30357,"code":168987,"language":30359,"meta":18,"style":18},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[93,168989,168990,169021],{"__ignoreMap":18},[96,168991,168992,168994,168996,168998,169001,169003,169005,169007,169009,169011,169013,169015,169017,169019],{"class":98,"line":99},[96,168993,107812],{"class":102},[96,168995,146770],{"class":155},[96,168997,107],{"class":106},[96,168999,169000],{"class":211},"\"log.txt\"",[96,169002,12419],{"class":106},[96,169004,165304],{"class":211},[96,169006,12419],{"class":106},[96,169008,146785],{"class":5200},[96,169010,152],{"class":102},[96,169012,146790],{"class":211},[96,169014,13698],{"class":106},[96,169016,31362],{"class":102},[96,169018,148132],{"class":5200},[96,169020,3722],{"class":106},[96,169022,169023,169025,169027,169030,169032,169034],{"class":98,"line":19},[96,169024,168863],{"class":5200},[96,169026,168866],{"class":106},[96,169028,169029],{"class":211},"\"程序启动",[96,169031,156504],{"class":155},[96,169033,358],{"class":211},[96,169035,113],{"class":106},[14,169037,169038],{},"日志类文件常用追加模式。",[38,169040,169042],{"id":169041},"_88-文件编码","8.8 文件编码",[14,169044,169045],{},"编码决定文字如何保存为字节。",[14,169047,169048],{},"常见编码：",[50,169050,169051,169054],{},[53,169052,169053],{},"UTF-8：推荐。",[53,169055,169056],{},"GBK：部分 Windows 中文文件常见。",[14,169058,169059],{},"读取文件乱码时，可以尝试：",[87,169061,169063],{"className":30357,"code":169062,"language":30359,"meta":18,"style":18},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[93,169064,169065,169096],{"__ignoreMap":18},[96,169066,169067,169069,169071,169073,169075,169077,169079,169081,169083,169085,169088,169090,169092,169094],{"class":98,"line":99},[96,169068,107812],{"class":102},[96,169070,146770],{"class":155},[96,169072,107],{"class":106},[96,169074,146775],{"class":211},[96,169076,12419],{"class":106},[96,169078,146780],{"class":211},[96,169080,12419],{"class":106},[96,169082,146785],{"class":5200},[96,169084,152],{"class":102},[96,169086,169087],{"class":211},"\"gbk\"",[96,169089,13698],{"class":106},[96,169091,31362],{"class":102},[96,169093,148132],{"class":5200},[96,169095,3722],{"class":106},[96,169097,169098,169100,169102,169104],{"class":98,"line":19},[96,169099,146802],{"class":106},[96,169101,152],{"class":102},[96,169103,148132],{"class":5200},[96,169105,168480],{"class":106},[14,169107,169108],{},"写文件时建议统一 UTF-8：",[87,169110,169112],{"className":30357,"code":169111,"language":30359,"meta":18,"style":18},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[93,169113,169114,169144],{"__ignoreMap":18},[96,169115,169116,169118,169120,169122,169124,169126,169128,169130,169132,169134,169136,169138,169140,169142],{"class":98,"line":99},[96,169117,107812],{"class":102},[96,169119,146770],{"class":155},[96,169121,107],{"class":106},[96,169123,146775],{"class":211},[96,169125,12419],{"class":106},[96,169127,151955],{"class":211},[96,169129,12419],{"class":106},[96,169131,146785],{"class":5200},[96,169133,152],{"class":102},[96,169135,146790],{"class":211},[96,169137,13698],{"class":106},[96,169139,31362],{"class":102},[96,169141,148132],{"class":5200},[96,169143,3722],{"class":106},[96,169145,169146,169148,169150,169153],{"class":98,"line":19},[96,169147,168863],{"class":5200},[96,169149,168866],{"class":106},[96,169151,169152],{"class":211},"\"中文内容\"",[96,169154,113],{"class":106},[38,169156,169158],{"id":169157},"_89-pathlib","8.9 pathlib",[14,169160,169161,169164],{},[93,169162,169163],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[87,169166,169168],{"className":30357,"code":169167,"language":30359,"meta":18,"style":18},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[93,169169,169170,169180,169184,169202],{"__ignoreMap":18},[96,169171,169172,169174,169176,169178],{"class":98,"line":99},[96,169173,30716],{"class":102},[96,169175,108290],{"class":106},[96,169177,30371],{"class":102},[96,169179,108295],{"class":106},[96,169181,169182],{"class":98,"line":19},[96,169183,2383],{"emptyLinePlaceholder":23},[96,169185,169186,169188,169190,169192,169195,169197,169199],{"class":98,"line":1162},[96,169187,168290],{"class":106},[96,169189,152],{"class":102},[96,169191,108524],{"class":106},[96,169193,169194],{"class":211},"\"data\"",[96,169196,13698],{"class":106},[96,169198,691],{"class":102},[96,169200,169201],{"class":211}," \"students.txt\"\n",[96,169203,169204,169206],{"class":98,"line":1177},[96,169205,30394],{"class":155},[96,169207,169208],{"class":106},"(path)\n",[14,169210,169211],{},"创建目录：",[87,169213,169215],{"className":30357,"code":169214,"language":30359,"meta":18,"style":18},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[93,169216,169217,169227,169231,169244],{"__ignoreMap":18},[96,169218,169219,169221,169223,169225],{"class":98,"line":99},[96,169220,30716],{"class":102},[96,169222,108290],{"class":106},[96,169224,30371],{"class":102},[96,169226,108295],{"class":106},[96,169228,169229],{"class":98,"line":19},[96,169230,2383],{"emptyLinePlaceholder":23},[96,169232,169233,169236,169238,169240,169242],{"class":98,"line":1162},[96,169234,169235],{"class":106},"data_dir ",[96,169237,152],{"class":102},[96,169239,108524],{"class":106},[96,169241,169194],{"class":211},[96,169243,113],{"class":106},[96,169245,169246,169249,169252,169254,169256],{"class":98,"line":1177},[96,169247,169248],{"class":106},"data_dir.mkdir(",[96,169250,169251],{"class":5200},"exist_ok",[96,169253,152],{"class":102},[96,169255,31455],{"class":155},[96,169257,113],{"class":106},[14,169259,169260],{},"判断文件是否存在：",[87,169262,169264],{"className":30357,"code":169263,"language":30359,"meta":18,"style":18},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[93,169265,169266,169279,169283,169290],{"__ignoreMap":18},[96,169267,169268,169270,169272,169274,169277],{"class":98,"line":99},[96,169269,168290],{"class":106},[96,169271,152],{"class":102},[96,169273,108524],{"class":106},[96,169275,169276],{"class":211},"\"data\u002Fstudents.txt\"",[96,169278,113],{"class":106},[96,169280,169281],{"class":98,"line":19},[96,169282,2383],{"emptyLinePlaceholder":23},[96,169284,169285,169287],{"class":98,"line":1162},[96,169286,1514],{"class":102},[96,169288,169289],{"class":106}," path.exists():\n",[96,169291,169292,169294,169296,169299],{"class":98,"line":1177},[96,169293,31278],{"class":155},[96,169295,107],{"class":106},[96,169297,169298],{"class":211},"\"文件存在\"",[96,169300,113],{"class":106},[14,169302,169303],{},"读写文本：",[87,169305,169307],{"className":30357,"code":169306,"language":30359,"meta":18,"style":18},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[93,169308,169309,169321,169325,169342,169359],{"__ignoreMap":18},[96,169310,169311,169313,169315,169317,169319],{"class":98,"line":99},[96,169312,168290],{"class":106},[96,169314,152],{"class":102},[96,169316,108524],{"class":106},[96,169318,146775],{"class":211},[96,169320,113],{"class":106},[96,169322,169323],{"class":98,"line":19},[96,169324,2383],{"emptyLinePlaceholder":23},[96,169326,169327,169330,169332,169334,169336,169338,169340],{"class":98,"line":1162},[96,169328,169329],{"class":106},"path.write_text(",[96,169331,145855],{"class":211},[96,169333,12419],{"class":106},[96,169335,146785],{"class":5200},[96,169337,152],{"class":102},[96,169339,146790],{"class":211},[96,169341,113],{"class":106},[96,169343,169344,169346,169348,169351,169353,169355,169357],{"class":98,"line":1177},[96,169345,168473],{"class":106},[96,169347,152],{"class":102},[96,169349,169350],{"class":106}," path.read_text(",[96,169352,146785],{"class":5200},[96,169354,152],{"class":102},[96,169356,146790],{"class":211},[96,169358,113],{"class":106},[96,169360,169361,169363],{"class":98,"line":1183},[96,169362,30394],{"class":155},[96,169364,168487],{"class":106},[38,169366,169368],{"id":169367},"_810-json文件","8.10 JSON文件",[14,169370,169371],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[87,169373,169375],{"className":30357,"code":169374,"language":30359,"meta":18,"style":18},"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",[93,169376,169377,169383,169387,169395,169405,169415,169423,169427,169431,169456],{"__ignoreMap":18},[96,169378,169379,169381],{"class":98,"line":99},[96,169380,30371],{"class":102},[96,169382,147070],{"class":106},[96,169384,169385],{"class":98,"line":19},[96,169386,2383],{"emptyLinePlaceholder":23},[96,169388,169389,169391,169393],{"class":98,"line":1162},[96,169390,149460],{"class":106},[96,169392,152],{"class":102},[96,169394,15556],{"class":106},[96,169396,169397,169399,169401,169403],{"class":98,"line":1177},[96,169398,146999],{"class":211},[96,169400,51416],{"class":106},[96,169402,149867],{"class":211},[96,169404,31445],{"class":106},[96,169406,169407,169409,169411,169413],{"class":98,"line":1183},[96,169408,164516],{"class":211},[96,169410,51416],{"class":106},[96,169412,757],{"class":155},[96,169414,31445],{"class":106},[96,169416,169417,169419,169421],{"class":98,"line":1197},[96,169418,164527],{"class":211},[96,169420,51416],{"class":106},[96,169422,164532],{"class":155},[96,169424,169425],{"class":98,"line":1203},[96,169426,1548],{"class":106},[96,169428,169429],{"class":98,"line":1294},[96,169430,2383],{"emptyLinePlaceholder":23},[96,169432,169433,169435,169437,169440,169442,169444,169446,169448,169450,169452,169454],{"class":98,"line":1300},[96,169434,156423],{"class":106},[96,169436,152],{"class":102},[96,169438,169439],{"class":106}," json.dumps(student, ",[96,169441,147116],{"class":5200},[96,169443,152],{"class":102},[96,169445,33966],{"class":155},[96,169447,12419],{"class":106},[96,169449,151991],{"class":5200},[96,169451,152],{"class":102},[96,169453,184],{"class":155},[96,169455,113],{"class":106},[96,169457,169458,169460],{"class":98,"line":1312},[96,169459,30394],{"class":155},[96,169461,164050],{"class":106},[14,169463,169464],{},"写入 JSON 文件：",[87,169466,169468],{"className":30357,"code":169467,"language":30359,"meta":18,"style":18},"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",[93,169469,169470,169476,169480,169488,169516,169544,169548,169552,169582],{"__ignoreMap":18},[96,169471,169472,169474],{"class":98,"line":99},[96,169473,30371],{"class":102},[96,169475,147070],{"class":106},[96,169477,169478],{"class":98,"line":19},[96,169479,2383],{"emptyLinePlaceholder":23},[96,169481,169482,169484,169486],{"class":98,"line":1162},[96,169483,159695],{"class":106},[96,169485,152],{"class":102},[96,169487,55426],{"class":106},[96,169489,169490,169492,169494,169496,169498,169500,169502,169504,169506,169508,169510,169512,169514],{"class":98,"line":1177},[96,169491,148364],{"class":106},[96,169493,62658],{"class":211},[96,169495,51416],{"class":106},[96,169497,149867],{"class":211},[96,169499,12419],{"class":106},[96,169501,69103],{"class":211},[96,169503,51416],{"class":106},[96,169505,757],{"class":155},[96,169507,12419],{"class":106},[96,169509,151451],{"class":211},[96,169511,51416],{"class":106},[96,169513,1096],{"class":155},[96,169515,4913],{"class":106},[96,169517,169518,169520,169522,169524,169526,169528,169530,169532,169534,169536,169538,169540,169542],{"class":98,"line":1183},[96,169519,148364],{"class":106},[96,169521,62658],{"class":211},[96,169523,51416],{"class":106},[96,169525,150915],{"class":211},[96,169527,12419],{"class":106},[96,169529,69103],{"class":211},[96,169531,51416],{"class":106},[96,169533,732],{"class":155},[96,169535,12419],{"class":106},[96,169537,151451],{"class":211},[96,169539,51416],{"class":106},[96,169541,918],{"class":155},[96,169543,4913],{"class":106},[96,169545,169546],{"class":98,"line":1197},[96,169547,33225],{"class":106},[96,169549,169550],{"class":98,"line":1203},[96,169551,2383],{"emptyLinePlaceholder":23},[96,169553,169554,169556,169558,169560,169562,169564,169566,169568,169570,169572,169574,169576,169578,169580],{"class":98,"line":1294},[96,169555,107812],{"class":102},[96,169557,146770],{"class":155},[96,169559,107],{"class":106},[96,169561,151810],{"class":211},[96,169563,12419],{"class":106},[96,169565,151955],{"class":211},[96,169567,12419],{"class":106},[96,169569,146785],{"class":5200},[96,169571,152],{"class":102},[96,169573,146790],{"class":211},[96,169575,13698],{"class":106},[96,169577,31362],{"class":102},[96,169579,148132],{"class":5200},[96,169581,3722],{"class":106},[96,169583,169584,169587,169589,169591,169593,169595,169597,169599,169601,169603,169605],{"class":98,"line":1300},[96,169585,169586],{"class":106},"    json.dump(students, ",[96,169588,45333],{"class":5200},[96,169590,12419],{"class":106},[96,169592,147116],{"class":5200},[96,169594,152],{"class":102},[96,169596,33966],{"class":155},[96,169598,12419],{"class":106},[96,169600,151991],{"class":5200},[96,169602,152],{"class":102},[96,169604,184],{"class":155},[96,169606,113],{"class":106},[14,169608,169609],{},"读取 JSON 文件：",[87,169611,169613],{"className":30357,"code":169612,"language":30359,"meta":18,"style":18},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[93,169614,169615,169621,169625,169655,169667,169671],{"__ignoreMap":18},[96,169616,169617,169619],{"class":98,"line":99},[96,169618,30371],{"class":102},[96,169620,147070],{"class":106},[96,169622,169623],{"class":98,"line":19},[96,169624,2383],{"emptyLinePlaceholder":23},[96,169626,169627,169629,169631,169633,169635,169637,169639,169641,169643,169645,169647,169649,169651,169653],{"class":98,"line":1162},[96,169628,107812],{"class":102},[96,169630,146770],{"class":155},[96,169632,107],{"class":106},[96,169634,151810],{"class":211},[96,169636,12419],{"class":106},[96,169638,146780],{"class":211},[96,169640,12419],{"class":106},[96,169642,146785],{"class":5200},[96,169644,152],{"class":102},[96,169646,146790],{"class":211},[96,169648,13698],{"class":106},[96,169650,31362],{"class":102},[96,169652,148132],{"class":5200},[96,169654,3722],{"class":106},[96,169656,169657,169659,169661,169663,169665],{"class":98,"line":1177},[96,169658,153016],{"class":106},[96,169660,152],{"class":102},[96,169662,148143],{"class":106},[96,169664,45333],{"class":5200},[96,169666,113],{"class":106},[96,169668,169669],{"class":98,"line":1183},[96,169670,2383],{"emptyLinePlaceholder":23},[96,169672,169673,169675],{"class":98,"line":1197},[96,169674,30394],{"class":155},[96,169676,164974],{"class":106},[38,169678,169680],{"id":169679},"_811-csv文件","8.11 CSV文件",[14,169682,169683],{},"CSV 是逗号分隔值，常用于表格数据。",[14,169685,169686],{},"写入 CSV：",[87,169688,169690],{"className":30357,"code":169689,"language":30359,"meta":18,"style":18},"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",[93,169691,169692,169699,169703,169711,169729,169745,169761,169765,169769,169809,169823],{"__ignoreMap":18},[96,169693,169694,169696],{"class":98,"line":99},[96,169695,30371],{"class":102},[96,169697,169698],{"class":106}," csv\n",[96,169700,169701],{"class":98,"line":19},[96,169702,2383],{"emptyLinePlaceholder":23},[96,169704,169705,169707,169709],{"class":98,"line":1162},[96,169706,159695],{"class":106},[96,169708,152],{"class":102},[96,169710,55426],{"class":106},[96,169712,169713,169716,169718,169720,169722,169724,169727],{"class":98,"line":1177},[96,169714,169715],{"class":106},"    [",[96,169717,73078],{"class":211},[96,169719,12419],{"class":106},[96,169721,73111],{"class":211},[96,169723,12419],{"class":106},[96,169725,169726],{"class":211},"\"成绩\"",[96,169728,87815],{"class":106},[96,169730,169731,169733,169735,169737,169739,169741,169743],{"class":98,"line":1183},[96,169732,169715],{"class":106},[96,169734,149867],{"class":211},[96,169736,12419],{"class":106},[96,169738,757],{"class":155},[96,169740,12419],{"class":106},[96,169742,1096],{"class":155},[96,169744,87815],{"class":106},[96,169746,169747,169749,169751,169753,169755,169757,169759],{"class":98,"line":1197},[96,169748,169715],{"class":106},[96,169750,150915],{"class":211},[96,169752,12419],{"class":106},[96,169754,732],{"class":155},[96,169756,12419],{"class":106},[96,169758,918],{"class":155},[96,169760,87815],{"class":106},[96,169762,169763],{"class":98,"line":1203},[96,169764,33225],{"class":106},[96,169766,169767],{"class":98,"line":1294},[96,169768,2383],{"emptyLinePlaceholder":23},[96,169770,169771,169773,169775,169777,169780,169782,169784,169786,169788,169790,169792,169794,169797,169799,169801,169803,169805,169807],{"class":98,"line":1300},[96,169772,107812],{"class":102},[96,169774,146770],{"class":155},[96,169776,107],{"class":106},[96,169778,169779],{"class":211},"\"students.csv\"",[96,169781,12419],{"class":106},[96,169783,151955],{"class":211},[96,169785,12419],{"class":106},[96,169787,146785],{"class":5200},[96,169789,152],{"class":102},[96,169791,146790],{"class":211},[96,169793,12419],{"class":106},[96,169795,169796],{"class":5200},"newline",[96,169798,152],{"class":102},[96,169800,7636],{"class":211},[96,169802,13698],{"class":106},[96,169804,31362],{"class":102},[96,169806,148132],{"class":5200},[96,169808,3722],{"class":106},[96,169810,169811,169814,169816,169819,169821],{"class":98,"line":1312},[96,169812,169813],{"class":106},"    writer ",[96,169815,152],{"class":102},[96,169817,169818],{"class":106}," csv.writer(",[96,169820,45333],{"class":5200},[96,169822,113],{"class":106},[96,169824,169825],{"class":98,"line":1595},[96,169826,169827],{"class":106},"    writer.writerows(students)\n",[14,169829,169830],{},"读取 CSV：",[87,169832,169834],{"className":30357,"code":169833,"language":30359,"meta":18,"style":18},"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",[93,169835,169836,169842,169846,169876,169890,169902],{"__ignoreMap":18},[96,169837,169838,169840],{"class":98,"line":99},[96,169839,30371],{"class":102},[96,169841,169698],{"class":106},[96,169843,169844],{"class":98,"line":19},[96,169845,2383],{"emptyLinePlaceholder":23},[96,169847,169848,169850,169852,169854,169856,169858,169860,169862,169864,169866,169868,169870,169872,169874],{"class":98,"line":1162},[96,169849,107812],{"class":102},[96,169851,146770],{"class":155},[96,169853,107],{"class":106},[96,169855,169779],{"class":211},[96,169857,12419],{"class":106},[96,169859,146780],{"class":211},[96,169861,12419],{"class":106},[96,169863,146785],{"class":5200},[96,169865,152],{"class":102},[96,169867,146790],{"class":211},[96,169869,13698],{"class":106},[96,169871,31362],{"class":102},[96,169873,148132],{"class":5200},[96,169875,3722],{"class":106},[96,169877,169878,169881,169883,169886,169888],{"class":98,"line":1177},[96,169879,169880],{"class":106},"    reader ",[96,169882,152],{"class":102},[96,169884,169885],{"class":106}," csv.reader(",[96,169887,45333],{"class":5200},[96,169889,113],{"class":106},[96,169891,169892,169894,169897,169899],{"class":98,"line":1183},[96,169893,3184],{"class":102},[96,169895,169896],{"class":106}," row ",[96,169898,26022],{"class":102},[96,169900,169901],{"class":106}," reader:\n",[96,169903,169904,169906],{"class":98,"line":1197},[96,169905,32430],{"class":155},[96,169907,169908],{"class":106},"(row)\n",[14,169910,169911],{},"使用字典写入：",[87,169913,169915],{"className":30357,"code":169914,"language":30359,"meta":18,"style":18},"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",[93,169916,169917,169923,169927,169935,169963,169991,169995,169999,170037,170058,170079,170084],{"__ignoreMap":18},[96,169918,169919,169921],{"class":98,"line":99},[96,169920,30371],{"class":102},[96,169922,169698],{"class":106},[96,169924,169925],{"class":98,"line":19},[96,169926,2383],{"emptyLinePlaceholder":23},[96,169928,169929,169931,169933],{"class":98,"line":1162},[96,169930,159695],{"class":106},[96,169932,152],{"class":102},[96,169934,55426],{"class":106},[96,169936,169937,169939,169941,169943,169945,169947,169949,169951,169953,169955,169957,169959,169961],{"class":98,"line":1177},[96,169938,148364],{"class":106},[96,169940,62658],{"class":211},[96,169942,51416],{"class":106},[96,169944,149867],{"class":211},[96,169946,12419],{"class":106},[96,169948,69103],{"class":211},[96,169950,51416],{"class":106},[96,169952,757],{"class":155},[96,169954,12419],{"class":106},[96,169956,151451],{"class":211},[96,169958,51416],{"class":106},[96,169960,1096],{"class":155},[96,169962,4913],{"class":106},[96,169964,169965,169967,169969,169971,169973,169975,169977,169979,169981,169983,169985,169987,169989],{"class":98,"line":1183},[96,169966,148364],{"class":106},[96,169968,62658],{"class":211},[96,169970,51416],{"class":106},[96,169972,150915],{"class":211},[96,169974,12419],{"class":106},[96,169976,69103],{"class":211},[96,169978,51416],{"class":106},[96,169980,732],{"class":155},[96,169982,12419],{"class":106},[96,169984,151451],{"class":211},[96,169986,51416],{"class":106},[96,169988,918],{"class":155},[96,169990,4913],{"class":106},[96,169992,169993],{"class":98,"line":1197},[96,169994,33225],{"class":106},[96,169996,169997],{"class":98,"line":1203},[96,169998,2383],{"emptyLinePlaceholder":23},[96,170000,170001,170003,170005,170007,170009,170011,170013,170015,170017,170019,170021,170023,170025,170027,170029,170031,170033,170035],{"class":98,"line":1294},[96,170002,107812],{"class":102},[96,170004,146770],{"class":155},[96,170006,107],{"class":106},[96,170008,169779],{"class":211},[96,170010,12419],{"class":106},[96,170012,151955],{"class":211},[96,170014,12419],{"class":106},[96,170016,146785],{"class":5200},[96,170018,152],{"class":102},[96,170020,146790],{"class":211},[96,170022,12419],{"class":106},[96,170024,169796],{"class":5200},[96,170026,152],{"class":102},[96,170028,7636],{"class":211},[96,170030,13698],{"class":106},[96,170032,31362],{"class":102},[96,170034,148132],{"class":5200},[96,170036,3722],{"class":106},[96,170038,170039,170042,170044,170046,170048,170050,170052,170054,170056],{"class":98,"line":1300},[96,170040,170041],{"class":106},"    fieldnames ",[96,170043,152],{"class":102},[96,170045,52205],{"class":106},[96,170047,62658],{"class":211},[96,170049,12419],{"class":106},[96,170051,69103],{"class":211},[96,170053,12419],{"class":106},[96,170055,151451],{"class":211},[96,170057,33225],{"class":106},[96,170059,170060,170062,170064,170067,170069,170071,170074,170076],{"class":98,"line":1312},[96,170061,169813],{"class":106},[96,170063,152],{"class":102},[96,170065,170066],{"class":106}," csv.DictWriter(",[96,170068,45333],{"class":5200},[96,170070,12419],{"class":106},[96,170072,170073],{"class":5200},"fieldnames",[96,170075,152],{"class":102},[96,170077,170078],{"class":106},"fieldnames)\n",[96,170080,170081],{"class":98,"line":1595},[96,170082,170083],{"class":106},"    writer.writeheader()\n",[96,170085,170086],{"class":98,"line":1600},[96,170087,169827],{"class":106},[38,170089,170091],{"id":170090},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[14,170093,123271],{},[50,170095,170096,170099,170102],{},[53,170097,170098],{},"读取文本文件。",[53,170100,170101],{},"统计每个单词出现次数。",[53,170103,170104],{},"输出出现次数最多的前 10 个单词。",[14,170106,10019],{},[87,170108,170110],{"className":30357,"code":170109,"language":30359,"meta":18,"style":18},"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",[93,170111,170112,170122,170126,170139,170155,170159,170169,170178,170182,170194,170214,170223,170227,170245,170249,170279,170283,170299],{"__ignoreMap":18},[96,170113,170114,170116,170118,170120],{"class":98,"line":99},[96,170115,30716],{"class":102},[96,170117,108290],{"class":106},[96,170119,30371],{"class":102},[96,170121,108295],{"class":106},[96,170123,170124],{"class":98,"line":19},[96,170125,2383],{"emptyLinePlaceholder":23},[96,170127,170128,170130,170132,170134,170137],{"class":98,"line":1162},[96,170129,168290],{"class":106},[96,170131,152],{"class":102},[96,170133,108524],{"class":106},[96,170135,170136],{"class":211},"\"article.txt\"",[96,170138,113],{"class":106},[96,170140,170141,170143,170145,170147,170149,170151,170153],{"class":98,"line":1177},[96,170142,168473],{"class":106},[96,170144,152],{"class":102},[96,170146,169350],{"class":106},[96,170148,146785],{"class":5200},[96,170150,152],{"class":102},[96,170152,146790],{"class":211},[96,170154,113],{"class":106},[96,170156,170157],{"class":98,"line":1183},[96,170158,2383],{"emptyLinePlaceholder":23},[96,170160,170161,170164,170166],{"class":98,"line":1197},[96,170162,170163],{"class":106},"words ",[96,170165,152],{"class":102},[96,170167,170168],{"class":106}," content.lower().split()\n",[96,170170,170171,170174,170176],{"class":98,"line":1203},[96,170172,170173],{"class":106},"counter ",[96,170175,152],{"class":102},[96,170177,87847],{"class":106},[96,170179,170180],{"class":98,"line":1294},[96,170181,2383],{"emptyLinePlaceholder":23},[96,170183,170184,170186,170189,170191],{"class":98,"line":1300},[96,170185,3008],{"class":102},[96,170187,170188],{"class":106}," word ",[96,170190,26022],{"class":102},[96,170192,170193],{"class":106}," words:\n",[96,170195,170196,170199,170201,170204,170207,170209,170212],{"class":98,"line":1312},[96,170197,170198],{"class":106},"    word ",[96,170200,152],{"class":102},[96,170202,170203],{"class":106}," word.strip(",[96,170205,170206],{"class":211},"\".,!?;:",[96,170208,156474],{"class":155},[96,170210,170211],{"class":211},"'()[]\"",[96,170213,113],{"class":106},[96,170215,170216,170218,170220],{"class":98,"line":1595},[96,170217,3084],{"class":102},[96,170219,38909],{"class":102},[96,170221,170222],{"class":106}," word:\n",[96,170224,170225],{"class":98,"line":1600},[96,170226,148491],{"class":102},[96,170228,170229,170232,170234,170237,170239,170241,170243],{"class":98,"line":1606},[96,170230,170231],{"class":106},"    counter[word] ",[96,170233,152],{"class":102},[96,170235,170236],{"class":106}," counter.get(word, ",[96,170238,298],{"class":155},[96,170240,13698],{"class":106},[96,170242,588],{"class":102},[96,170244,55678],{"class":155},[96,170246,170247],{"class":98,"line":1611},[96,170248,2383],{"emptyLinePlaceholder":23},[96,170250,170251,170254,170256,170258,170261,170263,170265,170267,170269,170271,170273,170275,170277],{"class":98,"line":1625},[96,170252,170253],{"class":106},"items ",[96,170255,152],{"class":102},[96,170257,163583],{"class":155},[96,170259,170260],{"class":106},"(counter.items(), ",[96,170262,153925],{"class":5200},[96,170264,153928],{"class":102},[96,170266,153931],{"class":106},[96,170268,324],{"class":155},[96,170270,112181],{"class":106},[96,170272,163507],{"class":5200},[96,170274,152],{"class":102},[96,170276,31455],{"class":155},[96,170278,113],{"class":106},[96,170280,170281],{"class":98,"line":1630},[96,170282,2383],{"emptyLinePlaceholder":23},[96,170284,170285,170287,170290,170292,170295,170297],{"class":98,"line":1636},[96,170286,3008],{"class":102},[96,170288,170289],{"class":106}," word, count ",[96,170291,26022],{"class":102},[96,170293,170294],{"class":106}," items[:",[96,170296,553],{"class":155},[96,170298,165734],{"class":106},[96,170300,170301,170303],{"class":98,"line":1657},[96,170302,31278],{"class":155},[96,170304,170305],{"class":106},"(word, count)\n",[38,170307,170309],{"id":170308},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[87,170311,170313],{"className":30357,"code":170312,"language":30359,"meta":18,"style":18},"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",[93,170314,170315,170321,170331,170335,170347,170351,170355,170363,170373,170379,170383,170413,170423,170427,170431,170439,170469,170493,170497,170501,170509,170538,170543],{"__ignoreMap":18},[96,170316,170317,170319],{"class":98,"line":99},[96,170318,30371],{"class":102},[96,170320,147070],{"class":106},[96,170322,170323,170325,170327,170329],{"class":98,"line":19},[96,170324,30716],{"class":102},[96,170326,108290],{"class":106},[96,170328,30371],{"class":102},[96,170330,108295],{"class":106},[96,170332,170333],{"class":98,"line":1162},[96,170334,2383],{"emptyLinePlaceholder":23},[96,170336,170337,170339,170341,170343,170345],{"class":98,"line":1177},[96,170338,151803],{"class":155},[96,170340,13548],{"class":102},[96,170342,108524],{"class":106},[96,170344,151810],{"class":211},[96,170346,113],{"class":106},[96,170348,170349],{"class":98,"line":1183},[96,170350,2383],{"emptyLinePlaceholder":23},[96,170352,170353],{"class":98,"line":1197},[96,170354,2383],{"emptyLinePlaceholder":23},[96,170356,170357,170359,170361],{"class":98,"line":1203},[96,170358,31926],{"class":102},[96,170360,151827],{"class":1946},[96,170362,31932],{"class":106},[96,170364,170365,170367,170369,170371],{"class":98,"line":1294},[96,170366,3084],{"class":102},[96,170368,38909],{"class":102},[96,170370,151838],{"class":155},[96,170372,151841],{"class":106},[96,170374,170375,170377],{"class":98,"line":1300},[96,170376,14736],{"class":102},[96,170378,51817],{"class":106},[96,170380,170381],{"class":98,"line":1312},[96,170382,2383],{"emptyLinePlaceholder":23},[96,170384,170385,170387,170389,170391,170393,170395,170397,170399,170401,170403,170405,170407,170409,170411],{"class":98,"line":1595},[96,170386,34157],{"class":102},[96,170388,146770],{"class":155},[96,170390,107],{"class":106},[96,170392,151803],{"class":155},[96,170394,12419],{"class":106},[96,170396,146780],{"class":211},[96,170398,12419],{"class":106},[96,170400,146785],{"class":5200},[96,170402,152],{"class":102},[96,170404,146790],{"class":211},[96,170406,13698],{"class":106},[96,170408,31362],{"class":102},[96,170410,148132],{"class":5200},[96,170412,3722],{"class":106},[96,170414,170415,170417,170419,170421],{"class":98,"line":1600},[96,170416,14736],{"class":102},[96,170418,148143],{"class":106},[96,170420,45333],{"class":5200},[96,170422,113],{"class":106},[96,170424,170425],{"class":98,"line":1606},[96,170426,2383],{"emptyLinePlaceholder":23},[96,170428,170429],{"class":98,"line":1611},[96,170430,2383],{"emptyLinePlaceholder":23},[96,170432,170433,170435,170437],{"class":98,"line":1625},[96,170434,31926],{"class":102},[96,170436,151937],{"class":1946},[96,170438,151940],{"class":106},[96,170440,170441,170443,170445,170447,170449,170451,170453,170455,170457,170459,170461,170463,170465,170467],{"class":98,"line":1630},[96,170442,34157],{"class":102},[96,170444,146770],{"class":155},[96,170446,107],{"class":106},[96,170448,151803],{"class":155},[96,170450,12419],{"class":106},[96,170452,151955],{"class":211},[96,170454,12419],{"class":106},[96,170456,146785],{"class":5200},[96,170458,152],{"class":102},[96,170460,146790],{"class":211},[96,170462,13698],{"class":106},[96,170464,31362],{"class":102},[96,170466,148132],{"class":5200},[96,170468,3722],{"class":106},[96,170470,170471,170473,170475,170477,170479,170481,170483,170485,170487,170489,170491],{"class":98,"line":1636},[96,170472,151976],{"class":106},[96,170474,45333],{"class":5200},[96,170476,12419],{"class":106},[96,170478,147116],{"class":5200},[96,170480,152],{"class":102},[96,170482,33966],{"class":155},[96,170484,12419],{"class":106},[96,170486,151991],{"class":5200},[96,170488,152],{"class":102},[96,170490,184],{"class":155},[96,170492,113],{"class":106},[96,170494,170495],{"class":98,"line":1657},[96,170496,2383],{"emptyLinePlaceholder":23},[96,170498,170499],{"class":98,"line":1662},[96,170500,2383],{"emptyLinePlaceholder":23},[96,170502,170503,170505,170507],{"class":98,"line":1676},[96,170504,159695],{"class":106},[96,170506,152],{"class":102},[96,170508,153021],{"class":106},[96,170510,170511,170514,170516,170518,170520,170522,170524,170526,170528,170530,170532,170534,170536],{"class":98,"line":1681},[96,170512,170513],{"class":106},"students.append({",[96,170515,62658],{"class":211},[96,170517,51416],{"class":106},[96,170519,149867],{"class":211},[96,170521,12419],{"class":106},[96,170523,69103],{"class":211},[96,170525,51416],{"class":106},[96,170527,757],{"class":155},[96,170529,12419],{"class":106},[96,170531,151451],{"class":211},[96,170533,51416],{"class":106},[96,170535,1096],{"class":155},[96,170537,165131],{"class":106},[96,170539,170540],{"class":98,"line":1710},[96,170541,170542],{"class":106},"save_students(students)\n",[96,170544,170545,170547,170549,170552],{"class":98,"line":1715},[96,170546,30394],{"class":155},[96,170548,107],{"class":106},[96,170550,170551],{"class":211},"\"保存成功\"",[96,170553,113],{"class":106},[38,170555,170557],{"id":170556},"_814-易错点","8.14 易错点",[50,170559,170560,170564,170570,170575,170582,170589],{},[53,170561,170562,168823],{},[93,170563,902],{},[53,170565,170566,170567,28364],{},"读写中文要指定 ",[93,170568,170569],{},"encoding=\"utf-8\"",[53,170571,170572,170573,28364],{},"打开文件后要关闭，推荐使用 ",[93,170574,107812],{},[53,170576,170577,170578,170581],{},"读取大文件不要直接 ",[93,170579,170580],{},"read()"," 全部内容。",[53,170583,170584,170585,170588],{},"Windows 写 CSV 时建议加 ",[93,170586,170587],{},"newline=\"\"","，避免空行。",[53,170590,170591],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[38,170593,170595],{"id":170594},"_815-本章练习","8.15 本章练习",[50,170597,170598,170605,170610,170613,170616],{},[53,170599,170600,170601,170604],{},"写入一个 ",[93,170602,170603],{},"students.txt","，每行保存一个学生姓名。",[53,170606,104334,170607,170609],{},[93,170608,170603],{}," 并输出所有学生。",[53,170611,170612],{},"把学生列表保存为 JSON 文件。",[53,170614,170615],{},"从 JSON 文件读取学生数据，计算平均分。",[53,170617,170618,170619,170622,170623,170626],{},"写一个日志函数 ",[93,170620,170621],{},"write_log(message)","，每次调用向 ",[93,170624,170625],{},"app.log"," 追加一行。",[5110,170628,170629],{},"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":18,"searchDepth":19,"depth":19,"links":170631},[170632,170633,170637,170638,170644,170645,170646,170647,170648,170649,170650,170651,170652,170653,170654],{"id":168143,"depth":19,"text":168144},{"id":168184,"depth":19,"text":168185,"children":170634},[170635,170636],{"id":168188,"depth":1162,"text":168189},{"id":168222,"depth":1162,"text":168223},{"id":168336,"depth":19,"text":168337},{"id":168429,"depth":19,"text":168430,"children":170639},[170640,170641,170642,170643],{"id":168433,"depth":1162,"text":168434},{"id":168520,"depth":1162,"text":168521},{"id":168590,"depth":1162,"text":168591},{"id":168684,"depth":1162,"text":168685},{"id":168754,"depth":19,"text":168755},{"id":168817,"depth":19,"text":168818},{"id":168978,"depth":19,"text":168979},{"id":169041,"depth":19,"text":169042},{"id":169157,"depth":19,"text":169158},{"id":169367,"depth":19,"text":169368},{"id":169679,"depth":19,"text":169680},{"id":170090,"depth":19,"text":170091},{"id":170308,"depth":19,"text":170309},{"id":170556,"depth":19,"text":170557},{"id":170594,"depth":19,"text":170595},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168135,"description":23361},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170661,"title":170662,"body":170663,"description":23361,"extension":21,"meta":172849,"navigation":23,"path":172850,"seo":172851,"stem":172852,"__hash__":172853},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170664,"toc":172816},[170665,170668,170672,170675,170678,170770,170772,170791,170796,170800,170803,170806,170835,170842,170845,170849,170852,170881,170883,170935,170941,170994,170998,171096,171099,171166,171170,171227,171229,171235,171239,171244,171250,171341,171346,171350,171353,171431,171434,171472,171476,171594,171597,171601,171604,171649,171652,171656,171661,171667,171717,171720,171751,171755,171759,171789,171793,171828,171832,171867,171907,171911,171927,171930,171934,171938,172017,172021,172062,172066,172121,172125,172159,172163,172193,172202,172209,172215,172272,172275,172283,172286,172290,172297,172300,172306,172309,172326,172331,172335,172341,172354,172357,172394,172397,172408,172411,172425,172428,172442,172446,172453,172486,172489,172491,172497,172500,172504,172506,172512,172517,172690,172694,172757,172761,172785,172789,172813],[10,170666,170662],{"id":170667},"_9-异常模块与包",[38,170669,170671],{"id":170670},"_91-什么是异常","9.1 什么是异常",[14,170673,170674],{},"异常是程序运行过程中出现的错误。",[14,170676,170677],{},"常见异常：",[244,170679,170680,170689],{},[247,170681,170682],{},[250,170683,170684,170687],{},[253,170685,170686],{},"异常",[253,170688,25848],{},[291,170690,170691,170701,170711,170720,170730,170740,170750,170760],{},[250,170692,170693,170698],{},[296,170694,170695],{},[93,170696,170697],{},"NameError",[296,170699,170700],{},"使用了未定义变量",[250,170702,170703,170708],{},[296,170704,170705],{},[93,170706,170707],{},"TypeError",[296,170709,170710],{},"类型不匹配",[250,170712,170713,170717],{},[296,170714,170715],{},[93,170716,154813],{},[296,170718,170719],{},"值不合法",[250,170721,170722,170727],{},[296,170723,170724],{},[93,170725,170726],{},"IndexError",[296,170728,170729],{},"列表索引越界",[250,170731,170732,170737],{},[296,170733,170734],{},[93,170735,170736],{},"KeyError",[296,170738,170739],{},"字典 key 不存在",[250,170741,170742,170747],{},[296,170743,170744],{},[93,170745,170746],{},"FileNotFoundError",[296,170748,170749],{},"文件不存在",[250,170751,170752,170757],{},[296,170753,170754],{},[93,170755,170756],{},"ZeroDivisionError",[296,170758,170759],{},"除数为 0",[250,170761,170762,170767],{},[296,170763,170764],{},[93,170765,170766],{},"ImportError",[296,170768,170769],{},"导入失败",[14,170771,15119],{},[87,170773,170775],{"className":30357,"code":170774,"language":30359,"meta":18,"style":18},"num = int(\"abc\")\n",[93,170776,170777],{"__ignoreMap":18},[96,170778,170779,170781,170783,170785,170787,170789],{"class":98,"line":99},[96,170780,155766],{"class":106},[96,170782,152],{"class":102},[96,170784,2365],{"class":155},[96,170786,107],{"class":106},[96,170788,155859],{"class":211},[96,170790,113],{"class":106},[14,170792,170793,170794,28364],{},"会触发 ",[93,170795,154813],{},[38,170797,170799],{"id":170798},"_92-为什么要处理异常","9.2 为什么要处理异常",[14,170801,170802],{},"如果不处理异常，程序会直接终止。",[14,170804,170805],{},"例如用户输入年龄：",[87,170807,170809],{"className":30357,"code":170808,"language":30359,"meta":18,"style":18},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[93,170810,170811,170829],{"__ignoreMap":18},[96,170812,170813,170815,170817,170819,170821,170823,170825,170827],{"class":98,"line":99},[96,170814,146525],{"class":106},[96,170816,152],{"class":102},[96,170818,2365],{"class":155},[96,170820,107],{"class":106},[96,170822,53800],{"class":155},[96,170824,107],{"class":106},[96,170826,152373],{"class":211},[96,170828,30476],{"class":106},[96,170830,170831,170833],{"class":98,"line":19},[96,170832,30394],{"class":155},[96,170834,155740],{"class":106},[14,170836,170837,170838,170841],{},"用户输入 ",[93,170839,170840],{},"abc","，程序就会报错退出。",[14,170843,170844],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[38,170846,170848],{"id":170847},"_93-try-except","9.3 try except",[14,170850,170851],{},"基础语法：",[87,170853,170855],{"className":30357,"code":170854,"language":30359,"meta":18,"style":18},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[93,170856,170857,170864,170869,170876],{"__ignoreMap":18},[96,170858,170859,170862],{"class":98,"line":99},[96,170860,170861],{"class":102},"try",[96,170863,3722],{"class":106},[96,170865,170866],{"class":98,"line":19},[96,170867,170868],{"class":106},"    可能出错的代码\n",[96,170870,170871,170874],{"class":98,"line":1162},[96,170872,170873],{"class":102},"except",[96,170875,3722],{"class":106},[96,170877,170878],{"class":98,"line":1177},[96,170879,170880],{"class":106},"    出错后的处理代码\n",[14,170882,15119],{},[87,170884,170886],{"className":30357,"code":170885,"language":30359,"meta":18,"style":18},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[93,170887,170888,170894,170912,170918,170924],{"__ignoreMap":18},[96,170889,170890,170892],{"class":98,"line":99},[96,170891,170861],{"class":102},[96,170893,3722],{"class":106},[96,170895,170896,170898,170900,170902,170904,170906,170908,170910],{"class":98,"line":19},[96,170897,152365],{"class":106},[96,170899,152],{"class":102},[96,170901,2365],{"class":155},[96,170903,107],{"class":106},[96,170905,53800],{"class":155},[96,170907,107],{"class":106},[96,170909,152373],{"class":211},[96,170911,30476],{"class":106},[96,170913,170914,170916],{"class":98,"line":1162},[96,170915,31278],{"class":155},[96,170917,155740],{"class":106},[96,170919,170920,170922],{"class":98,"line":1177},[96,170921,170873],{"class":102},[96,170923,3722],{"class":106},[96,170925,170926,170928,170930,170933],{"class":98,"line":1183},[96,170927,31278],{"class":155},[96,170929,107],{"class":106},[96,170931,170932],{"class":211},"\"年龄必须是数字\"",[96,170934,113],{"class":106},[14,170936,170937,170938,170940],{},"不建议裸写 ",[93,170939,170873],{},"，最好指定异常类型。",[87,170942,170944],{"className":30357,"code":170943,"language":30359,"meta":18,"style":18},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[93,170945,170946,170952,170970,170976,170984],{"__ignoreMap":18},[96,170947,170948,170950],{"class":98,"line":99},[96,170949,170861],{"class":102},[96,170951,3722],{"class":106},[96,170953,170954,170956,170958,170960,170962,170964,170966,170968],{"class":98,"line":19},[96,170955,152365],{"class":106},[96,170957,152],{"class":102},[96,170959,2365],{"class":155},[96,170961,107],{"class":106},[96,170963,53800],{"class":155},[96,170965,107],{"class":106},[96,170967,152373],{"class":211},[96,170969,30476],{"class":106},[96,170971,170972,170974],{"class":98,"line":1162},[96,170973,31278],{"class":155},[96,170975,155740],{"class":106},[96,170977,170978,170980,170982],{"class":98,"line":1177},[96,170979,170873],{"class":102},[96,170981,152205],{"class":155},[96,170983,3722],{"class":106},[96,170985,170986,170988,170990,170992],{"class":98,"line":1183},[96,170987,31278],{"class":155},[96,170989,107],{"class":106},[96,170991,170932],{"class":211},[96,170993,113],{"class":106},[38,170995,170997],{"id":170996},"_94-捕获多个异常","9.4 捕获多个异常",[87,170999,171001],{"className":30357,"code":171000,"language":30359,"meta":18,"style":18},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[93,171002,171003,171009,171030,171050,171057,171065,171076,171085],{"__ignoreMap":18},[96,171004,171005,171007],{"class":98,"line":99},[96,171006,170861],{"class":102},[96,171008,3722],{"class":106},[96,171010,171011,171014,171016,171018,171020,171022,171024,171026,171028],{"class":98,"line":19},[96,171012,171013],{"class":106},"    nums ",[96,171015,152],{"class":102},[96,171017,52205],{"class":106},[96,171019,324],{"class":155},[96,171021,12419],{"class":106},[96,171023,184],{"class":155},[96,171025,12419],{"class":106},[96,171027,178],{"class":155},[96,171029,33225],{"class":106},[96,171031,171032,171035,171037,171039,171041,171043,171045,171048],{"class":98,"line":1162},[96,171033,171034],{"class":106},"    index ",[96,171036,152],{"class":102},[96,171038,2365],{"class":155},[96,171040,107],{"class":106},[96,171042,53800],{"class":155},[96,171044,107],{"class":106},[96,171046,171047],{"class":211},"\"请输入索引:\"",[96,171049,30476],{"class":106},[96,171051,171052,171054],{"class":98,"line":1177},[96,171053,31278],{"class":155},[96,171055,171056],{"class":106},"(nums[index])\n",[96,171058,171059,171061,171063],{"class":98,"line":1183},[96,171060,170873],{"class":102},[96,171062,152205],{"class":155},[96,171064,3722],{"class":106},[96,171066,171067,171069,171071,171074],{"class":98,"line":1197},[96,171068,31278],{"class":155},[96,171070,107],{"class":106},[96,171072,171073],{"class":211},"\"索引必须是整数\"",[96,171075,113],{"class":106},[96,171077,171078,171080,171083],{"class":98,"line":1203},[96,171079,170873],{"class":102},[96,171081,171082],{"class":155}," IndexError",[96,171084,3722],{"class":106},[96,171086,171087,171089,171091,171094],{"class":98,"line":1294},[96,171088,31278],{"class":155},[96,171090,107],{"class":106},[96,171092,171093],{"class":211},"\"索引越界\"",[96,171095,113],{"class":106},[14,171097,171098],{},"多个异常使用相同处理逻辑：",[87,171100,171102],{"className":30357,"code":171101,"language":30359,"meta":18,"style":18},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[93,171103,171104,171110,171128,171141,171155],{"__ignoreMap":18},[96,171105,171106,171108],{"class":98,"line":99},[96,171107,170861],{"class":102},[96,171109,3722],{"class":106},[96,171111,171112,171114,171116,171118,171120,171122,171124,171126],{"class":98,"line":19},[96,171113,45572],{"class":106},[96,171115,152],{"class":102},[96,171117,2365],{"class":155},[96,171119,107],{"class":106},[96,171121,53800],{"class":155},[96,171123,107],{"class":106},[96,171125,155775],{"class":211},[96,171127,30476],{"class":106},[96,171129,171130,171132,171134,171136,171138],{"class":98,"line":1162},[96,171131,31278],{"class":155},[96,171133,107],{"class":106},[96,171135,553],{"class":155},[96,171137,156025],{"class":102},[96,171139,171140],{"class":106}," num)\n",[96,171142,171143,171145,171147,171149,171151,171153],{"class":98,"line":1177},[96,171144,170873],{"class":102},[96,171146,1641],{"class":106},[96,171148,154813],{"class":155},[96,171150,12419],{"class":106},[96,171152,170756],{"class":155},[96,171154,30765],{"class":106},[96,171156,171157,171159,171161,171164],{"class":98,"line":1183},[96,171158,31278],{"class":155},[96,171160,107],{"class":106},[96,171162,171163],{"class":211},"\"输入不合法\"",[96,171165,113],{"class":106},[38,171167,171169],{"id":171168},"_95-获取异常信息","9.5 获取异常信息",[87,171171,171173],{"className":30357,"code":171172,"language":30359,"meta":18,"style":18},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[93,171174,171175,171181,171195,171206],{"__ignoreMap":18},[96,171176,171177,171179],{"class":98,"line":99},[96,171178,170861],{"class":102},[96,171180,3722],{"class":106},[96,171182,171183,171185,171187,171189,171191,171193],{"class":98,"line":19},[96,171184,45572],{"class":106},[96,171186,152],{"class":102},[96,171188,2365],{"class":155},[96,171190,107],{"class":106},[96,171192,155859],{"class":211},[96,171194,113],{"class":106},[96,171196,171197,171199,171201,171203],{"class":98,"line":1162},[96,171198,170873],{"class":102},[96,171200,152205],{"class":155},[96,171202,64583],{"class":102},[96,171204,171205],{"class":106}," e:\n",[96,171207,171208,171210,171212,171214,171217,171219,171221,171223,171225],{"class":98,"line":1177},[96,171209,31278],{"class":155},[96,171211,107],{"class":106},[96,171213,159],{"class":102},[96,171215,171216],{"class":211},"\"出错了:",[96,171218,1003],{"class":155},[96,171220,181],{"class":106},[96,171222,1053],{"class":155},[96,171224,358],{"class":211},[96,171226,113],{"class":106},[14,171228,146436],{},[87,171230,171233],{"className":171231,"code":171232,"language":5171,"meta":18},[5169],"出错了:invalid literal for int() with base 10: 'abc'\n",[93,171234,171232],{"__ignoreMap":18},[38,171236,171238],{"id":171237},"_96-else和finally","9.6 else和finally",[14,171240,171241,171243],{},[93,171242,1684],{},"：没有异常时执行。",[14,171245,171246,171249],{},[93,171247,171248],{},"finally","：无论是否异常都会执行。",[87,171251,171253],{"className":30357,"code":171252,"language":30359,"meta":18,"style":18},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[93,171254,171255,171261,171279,171287,171297,171303,171324,171330],{"__ignoreMap":18},[96,171256,171257,171259],{"class":98,"line":99},[96,171258,170861],{"class":102},[96,171260,3722],{"class":106},[96,171262,171263,171265,171267,171269,171271,171273,171275,171277],{"class":98,"line":19},[96,171264,45572],{"class":106},[96,171266,152],{"class":102},[96,171268,2365],{"class":155},[96,171270,107],{"class":106},[96,171272,53800],{"class":155},[96,171274,107],{"class":106},[96,171276,155775],{"class":211},[96,171278,30476],{"class":106},[96,171280,171281,171283,171285],{"class":98,"line":1162},[96,171282,170873],{"class":102},[96,171284,152205],{"class":155},[96,171286,3722],{"class":106},[96,171288,171289,171291,171293,171295],{"class":98,"line":1177},[96,171290,31278],{"class":155},[96,171292,107],{"class":106},[96,171294,153193],{"class":211},[96,171296,113],{"class":106},[96,171298,171299,171301],{"class":98,"line":1183},[96,171300,1684],{"class":102},[96,171302,3722],{"class":106},[96,171304,171305,171307,171309,171311,171314,171316,171318,171320,171322],{"class":98,"line":1197},[96,171306,31278],{"class":155},[96,171308,107],{"class":106},[96,171310,159],{"class":102},[96,171312,171313],{"class":211},"\"输入正确:",[96,171315,1003],{"class":155},[96,171317,1648],{"class":106},[96,171319,1053],{"class":155},[96,171321,358],{"class":211},[96,171323,113],{"class":106},[96,171325,171326,171328],{"class":98,"line":1203},[96,171327,171248],{"class":102},[96,171329,3722],{"class":106},[96,171331,171332,171334,171336,171339],{"class":98,"line":1294},[96,171333,31278],{"class":155},[96,171335,107],{"class":106},[96,171337,171338],{"class":211},"\"程序结束\"",[96,171340,113],{"class":106},[14,171342,171343,171345],{},[93,171344,171248],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[38,171347,171349],{"id":171348},"_97-抛出异常","9.7 抛出异常",[14,171351,171352],{},"程序可以主动抛出异常。",[87,171354,171356],{"className":30357,"code":171355,"language":30359,"meta":18,"style":18},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[93,171357,171358,171367,171379,171392,171412,171416,171420],{"__ignoreMap":18},[96,171359,171360,171362,171365],{"class":98,"line":99},[96,171361,31926],{"class":102},[96,171363,171364],{"class":1946}," set_age",[96,171366,161394],{"class":106},[96,171368,171369,171371,171373,171375,171377],{"class":98,"line":19},[96,171370,3084],{"class":102},[96,171372,15691],{"class":106},[96,171374,1017],{"class":102},[96,171376,4076],{"class":155},[96,171378,3722],{"class":106},[96,171380,171381,171383,171385,171387,171390],{"class":98,"line":1162},[96,171382,103411],{"class":102},[96,171384,152205],{"class":155},[96,171386,107],{"class":106},[96,171388,171389],{"class":211},"\"年龄不能为负数\"",[96,171391,113],{"class":106},[96,171393,171394,171396,171398,171400,171402,171404,171406,171408,171410],{"class":98,"line":1177},[96,171395,31278],{"class":155},[96,171397,107],{"class":106},[96,171399,159],{"class":102},[96,171401,161962],{"class":211},[96,171403,1003],{"class":155},[96,171405,70200],{"class":106},[96,171407,1053],{"class":155},[96,171409,358],{"class":211},[96,171411,113],{"class":106},[96,171413,171414],{"class":98,"line":1183},[96,171415,2383],{"emptyLinePlaceholder":23},[96,171417,171418],{"class":98,"line":1197},[96,171419,2383],{"emptyLinePlaceholder":23},[96,171421,171422,171425,171427,171429],{"class":98,"line":1203},[96,171423,171424],{"class":106},"set_age(",[96,171426,639],{"class":102},[96,171428,324],{"class":155},[96,171430,113],{"class":106},[14,171432,171433],{},"调用者可以捕获：",[87,171435,171437],{"className":30357,"code":171436,"language":30359,"meta":18,"style":18},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[93,171438,171439,171445,171456,171466],{"__ignoreMap":18},[96,171440,171441,171443],{"class":98,"line":99},[96,171442,170861],{"class":102},[96,171444,3722],{"class":106},[96,171446,171447,171450,171452,171454],{"class":98,"line":19},[96,171448,171449],{"class":106},"    set_age(",[96,171451,639],{"class":102},[96,171453,324],{"class":155},[96,171455,113],{"class":106},[96,171457,171458,171460,171462,171464],{"class":98,"line":1162},[96,171459,170873],{"class":102},[96,171461,152205],{"class":155},[96,171463,64583],{"class":102},[96,171465,171205],{"class":106},[96,171467,171468,171470],{"class":98,"line":1177},[96,171469,31278],{"class":155},[96,171471,66978],{"class":106},[38,171473,171475],{"id":171474},"_98-自定义异常","9.8 自定义异常",[87,171477,171479],{"className":30357,"code":171478,"language":30359,"meta":18,"style":18},"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",[93,171480,171481,171495,171499,171503,171507,171515,171525,171536,171546,171550,171554,171560,171577,171588],{"__ignoreMap":18},[96,171482,171483,171485,171488,171490,171493],{"class":98,"line":99},[96,171484,14678],{"class":102},[96,171486,171487],{"class":1946}," BalanceNotEnoughError",[96,171489,107],{"class":106},[96,171491,171492],{"class":155},"Exception",[96,171494,30765],{"class":106},[96,171496,171497],{"class":98,"line":19},[96,171498,149516],{"class":102},[96,171500,171501],{"class":98,"line":1162},[96,171502,2383],{"emptyLinePlaceholder":23},[96,171504,171505],{"class":98,"line":1177},[96,171506,2383],{"emptyLinePlaceholder":23},[96,171508,171509,171511,171513],{"class":98,"line":1183},[96,171510,31926],{"class":102},[96,171512,150165],{"class":1946},[96,171514,162791],{"class":106},[96,171516,171517,171519,171521,171523],{"class":98,"line":1197},[96,171518,3084],{"class":102},[96,171520,150121],{"class":106},[96,171522,1067],{"class":102},[96,171524,162568],{"class":106},[96,171526,171527,171529,171532,171534],{"class":98,"line":1203},[96,171528,103411],{"class":102},[96,171530,171531],{"class":106}," BalanceNotEnoughError(",[96,171533,150216],{"class":211},[96,171535,113],{"class":106},[96,171537,171538,171540,171542,171544],{"class":98,"line":1294},[96,171539,4073],{"class":102},[96,171541,162798],{"class":106},[96,171543,639],{"class":102},[96,171545,150154],{"class":106},[96,171547,171548],{"class":98,"line":1300},[96,171549,2383],{"emptyLinePlaceholder":23},[96,171551,171552],{"class":98,"line":1312},[96,171553,2383],{"emptyLinePlaceholder":23},[96,171555,171556,171558],{"class":98,"line":1595},[96,171557,170861],{"class":102},[96,171559,3722],{"class":106},[96,171561,171562,171564,171566,171569,171571,171573,171575],{"class":98,"line":1600},[96,171563,162469],{"class":106},[96,171565,152],{"class":102},[96,171567,171568],{"class":106}," withdraw(",[96,171570,418],{"class":155},[96,171572,12419],{"class":106},[96,171574,1705],{"class":155},[96,171576,113],{"class":106},[96,171578,171579,171581,171584,171586],{"class":98,"line":1606},[96,171580,170873],{"class":102},[96,171582,171583],{"class":106}," BalanceNotEnoughError ",[96,171585,31362],{"class":102},[96,171587,171205],{"class":106},[96,171589,171590,171592],{"class":98,"line":1611},[96,171591,31278],{"class":155},[96,171593,66978],{"class":106},[14,171595,171596],{},"入门阶段大多数情况使用内置异常即可。",[38,171598,171600],{"id":171599},"_99-traceback","9.9 traceback",[14,171602,171603],{},"调试时可以输出完整异常堆栈。",[87,171605,171607],{"className":30357,"code":171606,"language":30359,"meta":18,"style":18},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[93,171608,171609,171616,171620,171626,171636,171644],{"__ignoreMap":18},[96,171610,171611,171613],{"class":98,"line":99},[96,171612,30371],{"class":102},[96,171614,171615],{"class":106}," traceback\n",[96,171617,171618],{"class":98,"line":19},[96,171619,2383],{"emptyLinePlaceholder":23},[96,171621,171622,171624],{"class":98,"line":1162},[96,171623,170861],{"class":102},[96,171625,3722],{"class":106},[96,171627,171628,171630,171632,171634],{"class":98,"line":1177},[96,171629,1968],{"class":155},[96,171631,107],{"class":106},[96,171633,155859],{"class":211},[96,171635,113],{"class":106},[96,171637,171638,171640,171642],{"class":98,"line":1183},[96,171639,170873],{"class":102},[96,171641,152205],{"class":155},[96,171643,3722],{"class":106},[96,171645,171646],{"class":98,"line":1197},[96,171647,171648],{"class":106},"    traceback.print_exc()\n",[14,171650,171651],{},"日志系统中常把异常堆栈记录到文件。",[38,171653,171655],{"id":171654},"_910-什么是模块","9.10 什么是模块",[14,171657,171658,171659,125962],{},"模块就是一个 ",[93,171660,146331],{},[14,171662,171663,171664,24597],{},"例如创建 ",[93,171665,171666],{},"my_math.py",[87,171668,171670],{"className":30357,"code":171669,"language":30359,"meta":18,"style":18},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[93,171671,171672,171680,171690,171694,171698,171707],{"__ignoreMap":18},[96,171673,171674,171676,171678],{"class":98,"line":99},[96,171675,31926],{"class":102},[96,171677,5193],{"class":1946},[96,171679,151072],{"class":106},[96,171681,171682,171684,171686,171688],{"class":98,"line":19},[96,171683,4073],{"class":102},[96,171685,10853],{"class":106},[96,171687,588],{"class":102},[96,171689,151083],{"class":106},[96,171691,171692],{"class":98,"line":1162},[96,171693,2383],{"emptyLinePlaceholder":23},[96,171695,171696],{"class":98,"line":1177},[96,171697,2383],{"emptyLinePlaceholder":23},[96,171699,171700,171702,171705],{"class":98,"line":1183},[96,171701,31926],{"class":102},[96,171703,171704],{"class":1946}," sub",[96,171706,151072],{"class":106},[96,171708,171709,171711,171713,171715],{"class":98,"line":1197},[96,171710,4073],{"class":102},[96,171712,10853],{"class":106},[96,171714,639],{"class":102},[96,171716,151083],{"class":106},[14,171718,171719],{},"在另一个文件中导入：",[87,171721,171723],{"className":30357,"code":171722,"language":30359,"meta":18,"style":18},"import my_math\n\nprint(my_math.add(1, 2))\n",[93,171724,171725,171732,171736],{"__ignoreMap":18},[96,171726,171727,171729],{"class":98,"line":99},[96,171728,30371],{"class":102},[96,171730,171731],{"class":106}," my_math\n",[96,171733,171734],{"class":98,"line":19},[96,171735,2383],{"emptyLinePlaceholder":23},[96,171737,171738,171740,171743,171745,171747,171749],{"class":98,"line":1162},[96,171739,30394],{"class":155},[96,171741,171742],{"class":106},"(my_math.add(",[96,171744,324],{"class":155},[96,171746,12419],{"class":106},[96,171748,184],{"class":155},[96,171750,30476],{"class":106},[38,171752,171754],{"id":171753},"_911-import导入","9.11 import导入",[67,171756,171758],{"id":171757},"_9111-导入模块","9.11.1 导入模块",[87,171760,171762],{"className":30357,"code":171761,"language":30359,"meta":18,"style":18},"import random\n\nprint(random.randint(1, 10))\n",[93,171763,171764,171770,171774],{"__ignoreMap":18},[96,171765,171766,171768],{"class":98,"line":99},[96,171767,30371],{"class":102},[96,171769,45307],{"class":106},[96,171771,171772],{"class":98,"line":19},[96,171773,2383],{"emptyLinePlaceholder":23},[96,171775,171776,171778,171781,171783,171785,171787],{"class":98,"line":1162},[96,171777,30394],{"class":155},[96,171779,171780],{"class":106},"(random.randint(",[96,171782,324],{"class":155},[96,171784,12419],{"class":106},[96,171786,553],{"class":155},[96,171788,30476],{"class":106},[67,171790,171792],{"id":171791},"_9112-导入指定内容","9.11.2 导入指定内容",[87,171794,171796],{"className":30357,"code":171795,"language":30359,"meta":18,"style":18},"from random import randint\n\nprint(randint(1, 10))\n",[93,171797,171798,171809,171813],{"__ignoreMap":18},[96,171799,171800,171802,171804,171806],{"class":98,"line":99},[96,171801,30716],{"class":102},[96,171803,57775],{"class":106},[96,171805,30371],{"class":102},[96,171807,171808],{"class":106}," randint\n",[96,171810,171811],{"class":98,"line":19},[96,171812,2383],{"emptyLinePlaceholder":23},[96,171814,171815,171817,171820,171822,171824,171826],{"class":98,"line":1162},[96,171816,30394],{"class":155},[96,171818,171819],{"class":106},"(randint(",[96,171821,324],{"class":155},[96,171823,12419],{"class":106},[96,171825,553],{"class":155},[96,171827,30476],{"class":106},[67,171829,171831],{"id":171830},"_9113-起别名","9.11.3 起别名",[87,171833,171835],{"className":30357,"code":171834,"language":30359,"meta":18,"style":18},"import random as rd\n\nprint(rd.randint(1, 10))\n",[93,171836,171837,171848,171852],{"__ignoreMap":18},[96,171838,171839,171841,171843,171845],{"class":98,"line":99},[96,171840,30371],{"class":102},[96,171842,57775],{"class":106},[96,171844,31362],{"class":102},[96,171846,171847],{"class":106}," rd\n",[96,171849,171850],{"class":98,"line":19},[96,171851,2383],{"emptyLinePlaceholder":23},[96,171853,171854,171856,171859,171861,171863,171865],{"class":98,"line":1162},[96,171855,30394],{"class":155},[96,171857,171858],{"class":106},"(rd.randint(",[96,171860,324],{"class":155},[96,171862,12419],{"class":106},[96,171864,553],{"class":155},[96,171866,30476],{"class":106},[87,171868,171870],{"className":30357,"code":171869,"language":30359,"meta":18,"style":18},"from random import randint as rint\n\nprint(rint(1, 10))\n",[93,171871,171872,171888,171892],{"__ignoreMap":18},[96,171873,171874,171876,171878,171880,171883,171885],{"class":98,"line":99},[96,171875,30716],{"class":102},[96,171877,57775],{"class":106},[96,171879,30371],{"class":102},[96,171881,171882],{"class":106}," randint ",[96,171884,31362],{"class":102},[96,171886,171887],{"class":106}," rint\n",[96,171889,171890],{"class":98,"line":19},[96,171891,2383],{"emptyLinePlaceholder":23},[96,171893,171894,171896,171899,171901,171903,171905],{"class":98,"line":1162},[96,171895,30394],{"class":155},[96,171897,171898],{"class":106},"(rint(",[96,171900,324],{"class":155},[96,171902,12419],{"class":106},[96,171904,553],{"class":155},[96,171906,30476],{"class":106},[67,171908,171910],{"id":171909},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[87,171912,171914],{"className":30357,"code":171913,"language":30359,"meta":18,"style":18},"from random import *\n",[93,171915,171916],{"__ignoreMap":18},[96,171917,171918,171920,171922,171924],{"class":98,"line":99},[96,171919,30716],{"class":102},[96,171921,57775],{"class":106},[96,171923,30371],{"class":102},[96,171925,171926],{"class":102}," *\n",[14,171928,171929],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[38,171931,171933],{"id":171932},"_912-常用内置模块","9.12 常用内置模块",[67,171935,171937],{"id":171936},"_9121-random","9.12.1 random",[87,171939,171941],{"className":30357,"code":171940,"language":30359,"meta":18,"style":18},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[93,171942,171943,171949,171953,171967,171986],{"__ignoreMap":18},[96,171944,171945,171947],{"class":98,"line":99},[96,171946,30371],{"class":102},[96,171948,45307],{"class":106},[96,171950,171951],{"class":98,"line":19},[96,171952,2383],{"emptyLinePlaceholder":23},[96,171954,171955,171957,171959,171961,171963,171965],{"class":98,"line":1162},[96,171956,30394],{"class":155},[96,171958,171780],{"class":106},[96,171960,324],{"class":155},[96,171962,12419],{"class":106},[96,171964,553],{"class":155},[96,171966,30476],{"class":106},[96,171968,171969,171971,171974,171976,171978,171980,171982,171984],{"class":98,"line":1177},[96,171970,30394],{"class":155},[96,171972,171973],{"class":106},"(random.choice([",[96,171975,149867],{"class":211},[96,171977,12419],{"class":106},[96,171979,150915],{"class":211},[96,171981,12419],{"class":106},[96,171983,159710],{"class":211},[96,171985,33122],{"class":106},[96,171987,171988,171990,171993,171995,171997,171999,172001,172003,172005,172007,172009,172011,172013,172015],{"class":98,"line":1183},[96,171989,30394],{"class":155},[96,171991,171992],{"class":106},"(random.sample([",[96,171994,324],{"class":155},[96,171996,12419],{"class":106},[96,171998,184],{"class":155},[96,172000,12419],{"class":106},[96,172002,178],{"class":155},[96,172004,12419],{"class":106},[96,172006,400],{"class":155},[96,172008,12419],{"class":106},[96,172010,426],{"class":155},[96,172012,112181],{"class":106},[96,172014,184],{"class":155},[96,172016,30476],{"class":106},[67,172018,172020],{"id":172019},"_9122-time","9.12.2 time",[87,172022,172024],{"className":30357,"code":172023,"language":30359,"meta":18,"style":18},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[93,172025,172026,172032,172036,172043,172051],{"__ignoreMap":18},[96,172027,172028,172030],{"class":98,"line":99},[96,172029,30371],{"class":102},[96,172031,31808],{"class":106},[96,172033,172034],{"class":98,"line":19},[96,172035,2383],{"emptyLinePlaceholder":23},[96,172037,172038,172040],{"class":98,"line":1162},[96,172039,30394],{"class":155},[96,172041,172042],{"class":106},"(time.time())\n",[96,172044,172045,172047,172049],{"class":98,"line":1177},[96,172046,95050],{"class":106},[96,172048,324],{"class":155},[96,172050,113],{"class":106},[96,172052,172053,172055,172057,172060],{"class":98,"line":1183},[96,172054,30394],{"class":155},[96,172056,107],{"class":106},[96,172058,172059],{"class":211},"\"1秒后执行\"",[96,172061,113],{"class":106},[67,172063,172065],{"id":172064},"_9123-datetime","9.12.3 datetime",[87,172067,172069],{"className":30357,"code":172068,"language":30359,"meta":18,"style":18},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[93,172070,172071,172083,172087,172097,172104],{"__ignoreMap":18},[96,172072,172073,172075,172078,172080],{"class":98,"line":99},[96,172074,30716],{"class":102},[96,172076,172077],{"class":106}," datetime ",[96,172079,30371],{"class":102},[96,172081,172082],{"class":106}," datetime\n",[96,172084,172085],{"class":98,"line":19},[96,172086,2383],{"emptyLinePlaceholder":23},[96,172088,172089,172092,172094],{"class":98,"line":1162},[96,172090,172091],{"class":106},"now ",[96,172093,152],{"class":102},[96,172095,172096],{"class":106}," datetime.now()\n",[96,172098,172099,172101],{"class":98,"line":1177},[96,172100,30394],{"class":155},[96,172102,172103],{"class":106},"(now)\n",[96,172105,172106,172108,172111,172114,172116,172119],{"class":98,"line":1183},[96,172107,30394],{"class":155},[96,172109,172110],{"class":106},"(now.strftime(",[96,172112,172113],{"class":211},"\"%Y-%m-",[96,172115,156670],{"class":155},[96,172117,172118],{"class":211}," %H:%M:%S\"",[96,172120,30476],{"class":106},[67,172122,172124],{"id":172123},"_9124-os","9.12.4 os",[87,172126,172128],{"className":30357,"code":172127,"language":30359,"meta":18,"style":18},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[93,172129,172130,172136,172140,172147],{"__ignoreMap":18},[96,172131,172132,172134],{"class":98,"line":99},[96,172133,30371],{"class":102},[96,172135,45284],{"class":106},[96,172137,172138],{"class":98,"line":19},[96,172139,2383],{"emptyLinePlaceholder":23},[96,172141,172142,172144],{"class":98,"line":1162},[96,172143,30394],{"class":155},[96,172145,172146],{"class":106},"(os.getcwd())\n",[96,172148,172149,172151,172154,172157],{"class":98,"line":1177},[96,172150,30394],{"class":155},[96,172152,172153],{"class":106},"(os.listdir(",[96,172155,172156],{"class":211},"\".\"",[96,172158,30476],{"class":106},[67,172160,172162],{"id":172161},"_9125-sys","9.12.5 sys",[87,172164,172166],{"className":30357,"code":172165,"language":30359,"meta":18,"style":18},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[93,172167,172168,172175,172179,172186],{"__ignoreMap":18},[96,172169,172170,172172],{"class":98,"line":99},[96,172171,30371],{"class":102},[96,172173,172174],{"class":106}," sys\n",[96,172176,172177],{"class":98,"line":19},[96,172178,2383],{"emptyLinePlaceholder":23},[96,172180,172181,172183],{"class":98,"line":1162},[96,172182,30394],{"class":155},[96,172184,172185],{"class":106},"(sys.version)\n",[96,172187,172188,172190],{"class":98,"line":1177},[96,172189,30394],{"class":155},[96,172191,172192],{"class":106},"(sys.path)\n",[38,172194,172196,172197,172199,172200,358],{"id":172195},"_913-if-name-main","9.13 if ",[256,172198,79789],{}," == \"",[256,172201,102037],{},[14,172203,172204,172205,172208],{},"模块被直接运行和被导入时，",[93,172206,172207],{},"__name__"," 的值不同。",[14,172210,172211,172212,24597],{},"创建 ",[93,172213,172214],{},"my_module.py",[87,172216,172218],{"className":30357,"code":172217,"language":30359,"meta":18,"style":18},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[93,172219,172220,172228,172238,172242,172246,172258],{"__ignoreMap":18},[96,172221,172222,172224,172226],{"class":98,"line":99},[96,172223,31926],{"class":102},[96,172225,5193],{"class":1946},[96,172227,151072],{"class":106},[96,172229,172230,172232,172234,172236],{"class":98,"line":19},[96,172231,4073],{"class":102},[96,172233,10853],{"class":106},[96,172235,588],{"class":102},[96,172237,151083],{"class":106},[96,172239,172240],{"class":98,"line":1162},[96,172241,2383],{"emptyLinePlaceholder":23},[96,172243,172244],{"class":98,"line":1177},[96,172245,2383],{"emptyLinePlaceholder":23},[96,172247,172248,172250,172252,172254,172256],{"class":98,"line":1183},[96,172249,1514],{"class":102},[96,172251,31199],{"class":155},[96,172253,101538],{"class":102},[96,172255,101541],{"class":211},[96,172257,3722],{"class":106},[96,172259,172260,172262,172264,172266,172268,172270],{"class":98,"line":1197},[96,172261,31278],{"class":155},[96,172263,166579],{"class":106},[96,172265,324],{"class":155},[96,172267,12419],{"class":106},[96,172269,184],{"class":155},[96,172271,30476],{"class":106},[14,172273,172274],{},"作用：",[50,172276,172277,172280],{},[53,172278,172279],{},"直接运行该文件时，执行测试代码。",[53,172281,172282],{},"被其他文件导入时，不执行测试代码。",[14,172284,172285],{},"这是写模块时很常用的习惯。",[38,172287,172289],{"id":172288},"_914-包","9.14 包",[14,172291,172292,172293,172296],{},"包是包含 ",[93,172294,172295],{},"__init__.py"," 的目录，用于组织多个模块。",[14,172298,172299],{},"目录结构：",[87,172301,172304],{"className":172302,"code":172303,"language":5171,"meta":18},[5169],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[93,172305,172303],{"__ignoreMap":18},[14,172307,172308],{},"导入：",[87,172310,172312],{"className":30357,"code":172311,"language":30359,"meta":18,"style":18},"from utils.file_utils import read_file\n",[93,172313,172314],{"__ignoreMap":18},[96,172315,172316,172318,172321,172323],{"class":98,"line":99},[96,172317,30716],{"class":102},[96,172319,172320],{"class":106}," utils.file_utils ",[96,172322,30371],{"class":102},[96,172324,172325],{"class":106}," read_file\n",[14,172327,172328,172330],{},[93,172329,172295],{}," 可以为空，也可以写包初始化逻辑。",[38,172332,172334],{"id":172333},"_915-第三方包","9.15 第三方包",[14,172336,172337,172338,172340],{},"第三方包通过 ",[93,172339,23816],{}," 安装。",[87,172342,172344],{"className":23807,"code":172343,"language":23809,"meta":18,"style":18},"pip install requests\n",[93,172345,172346],{"__ignoreMap":18},[96,172347,172348,172350,172352],{"class":98,"line":99},[96,172349,23816],{"class":1946},[96,172351,23819],{"class":211},[96,172353,146077],{"class":211},[14,172355,172356],{},"使用：",[87,172358,172360],{"className":30357,"code":172359,"language":30359,"meta":18,"style":18},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[93,172361,172362,172368,172372,172387],{"__ignoreMap":18},[96,172363,172364,172366],{"class":98,"line":99},[96,172365,30371],{"class":102},[96,172367,146077],{"class":106},[96,172369,172370],{"class":98,"line":19},[96,172371,2383],{"emptyLinePlaceholder":23},[96,172373,172374,172377,172379,172382,172385],{"class":98,"line":1162},[96,172375,172376],{"class":106},"response ",[96,172378,152],{"class":102},[96,172380,172381],{"class":106}," requests.get(",[96,172383,172384],{"class":211},"\"https:\u002F\u002Fwww.example.com\"",[96,172386,113],{"class":106},[96,172388,172389,172391],{"class":98,"line":1177},[96,172390,30394],{"class":155},[96,172392,172393],{"class":106},"(response.status_code)\n",[14,172395,172396],{},"查看已安装包：",[87,172398,172400],{"className":23807,"code":172399,"language":23809,"meta":18,"style":18},"pip list\n",[93,172401,172402],{"__ignoreMap":18},[96,172403,172404,172406],{"class":98,"line":99},[96,172405,23816],{"class":1946},[96,172407,118934],{"class":211},[14,172409,172410],{},"导出项目依赖：",[87,172412,172413],{"className":23807,"code":146272,"language":23809,"meta":18,"style":18},[93,172414,172415],{"__ignoreMap":18},[96,172416,172417,172419,172421,172423],{"class":98,"line":99},[96,172418,23816],{"class":1946},[96,172420,146281],{"class":211},[96,172422,26201],{"class":102},[96,172424,146286],{"class":211},[14,172426,172427],{},"安装项目依赖：",[87,172429,172430],{"className":23807,"code":146292,"language":23809,"meta":18,"style":18},[93,172431,172432],{"__ignoreMap":18},[96,172433,172434,172436,172438,172440],{"class":98,"line":99},[96,172435,23816],{"class":1946},[96,172437,23819],{"class":211},[96,172439,119618],{"class":155},[96,172441,146286],{"class":211},[38,172443,172445],{"id":172444},"_916-模块搜索路径","9.16 模块搜索路径",[14,172447,172448,172449,172452],{},"Python 导入模块时会在 ",[93,172450,172451],{},"sys.path"," 中查找。",[87,172454,172456],{"className":30357,"code":172455,"language":30359,"meta":18,"style":18},"import sys\n\nfor path in sys.path:\n    print(path)\n",[93,172457,172458,172464,172468,172480],{"__ignoreMap":18},[96,172459,172460,172462],{"class":98,"line":99},[96,172461,30371],{"class":102},[96,172463,172174],{"class":106},[96,172465,172466],{"class":98,"line":19},[96,172467,2383],{"emptyLinePlaceholder":23},[96,172469,172470,172472,172475,172477],{"class":98,"line":1162},[96,172471,3008],{"class":102},[96,172473,172474],{"class":106}," path ",[96,172476,26022],{"class":102},[96,172478,172479],{"class":106}," sys.path:\n",[96,172481,172482,172484],{"class":98,"line":1177},[96,172483,31278],{"class":155},[96,172485,169208],{"class":106},[14,172487,172488],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[14,172490,157602],{},[87,172492,172495],{"className":172493,"code":172494,"language":5171,"meta":18},[5169],"random.py\njson.py\ntime.py\n",[93,172496,172494],{"__ignoreMap":18},[14,172498,172499],{},"这些文件名可能导致导入异常。",[38,172501,172503],{"id":172502},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[14,172505,172299],{},[87,172507,172510],{"className":172508,"code":172509,"language":5171,"meta":18},[5169],"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",[93,172511,172509],{"__ignoreMap":18},[14,172513,172514,24597],{},[93,172515,172516],{},"utils\u002Ffile_utils.py",[87,172518,172520],{"className":30357,"code":172519,"language":30359,"meta":18,"style":18},"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",[93,172521,172522,172528,172538,172542,172546,172556,172566,172574,172580,172584,172611,172621,172625,172629,172639,172665],{"__ignoreMap":18},[96,172523,172524,172526],{"class":98,"line":99},[96,172525,30371],{"class":102},[96,172527,147070],{"class":106},[96,172529,172530,172532,172534,172536],{"class":98,"line":19},[96,172531,30716],{"class":102},[96,172533,108290],{"class":106},[96,172535,30371],{"class":102},[96,172537,108295],{"class":106},[96,172539,172540],{"class":98,"line":1162},[96,172541,2383],{"emptyLinePlaceholder":23},[96,172543,172544],{"class":98,"line":1177},[96,172545,2383],{"emptyLinePlaceholder":23},[96,172547,172548,172550,172553],{"class":98,"line":1183},[96,172549,31926],{"class":102},[96,172551,172552],{"class":1946}," read_json",[96,172554,172555],{"class":106},"(path):\n",[96,172557,172558,172561,172563],{"class":98,"line":1197},[96,172559,172560],{"class":106},"    path ",[96,172562,152],{"class":102},[96,172564,172565],{"class":106}," Path(path)\n",[96,172567,172568,172570,172572],{"class":98,"line":1203},[96,172569,3084],{"class":102},[96,172571,38909],{"class":102},[96,172573,169289],{"class":106},[96,172575,172576,172578],{"class":98,"line":1294},[96,172577,14736],{"class":102},[96,172579,51817],{"class":106},[96,172581,172582],{"class":98,"line":1300},[96,172583,2383],{"emptyLinePlaceholder":23},[96,172585,172586,172588,172590,172593,172595,172597,172599,172601,172603,172605,172607,172609],{"class":98,"line":1312},[96,172587,34157],{"class":102},[96,172589,146770],{"class":155},[96,172591,172592],{"class":106},"(path, ",[96,172594,146780],{"class":211},[96,172596,12419],{"class":106},[96,172598,146785],{"class":5200},[96,172600,152],{"class":102},[96,172602,146790],{"class":211},[96,172604,13698],{"class":106},[96,172606,31362],{"class":102},[96,172608,148132],{"class":5200},[96,172610,3722],{"class":106},[96,172612,172613,172615,172617,172619],{"class":98,"line":1595},[96,172614,14736],{"class":102},[96,172616,148143],{"class":106},[96,172618,45333],{"class":5200},[96,172620,113],{"class":106},[96,172622,172623],{"class":98,"line":1600},[96,172624,2383],{"emptyLinePlaceholder":23},[96,172626,172627],{"class":98,"line":1606},[96,172628,2383],{"emptyLinePlaceholder":23},[96,172630,172631,172633,172636],{"class":98,"line":1611},[96,172632,31926],{"class":102},[96,172634,172635],{"class":1946}," write_json",[96,172637,172638],{"class":106},"(path, data):\n",[96,172640,172641,172643,172645,172647,172649,172651,172653,172655,172657,172659,172661,172663],{"class":98,"line":1625},[96,172642,34157],{"class":102},[96,172644,146770],{"class":155},[96,172646,172592],{"class":106},[96,172648,151955],{"class":211},[96,172650,12419],{"class":106},[96,172652,146785],{"class":5200},[96,172654,152],{"class":102},[96,172656,146790],{"class":211},[96,172658,13698],{"class":106},[96,172660,31362],{"class":102},[96,172662,148132],{"class":5200},[96,172664,3722],{"class":106},[96,172666,172667,172670,172672,172674,172676,172678,172680,172682,172684,172686,172688],{"class":98,"line":1630},[96,172668,172669],{"class":106},"        json.dump(data, ",[96,172671,45333],{"class":5200},[96,172673,12419],{"class":106},[96,172675,147116],{"class":5200},[96,172677,152],{"class":102},[96,172679,33966],{"class":155},[96,172681,12419],{"class":106},[96,172683,151991],{"class":5200},[96,172685,152],{"class":102},[96,172687,184],{"class":155},[96,172689,113],{"class":106},[14,172691,172692,24597],{},[93,172693,154586],{},[87,172695,172697],{"className":30357,"code":172696,"language":30359,"meta":18,"style":18},"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",[93,172698,172699,172710,172714,172727,172747],{"__ignoreMap":18},[96,172700,172701,172703,172705,172707],{"class":98,"line":99},[96,172702,30716],{"class":102},[96,172704,172320],{"class":106},[96,172706,30371],{"class":102},[96,172708,172709],{"class":106}," read_json, write_json\n",[96,172711,172712],{"class":98,"line":19},[96,172713,2383],{"emptyLinePlaceholder":23},[96,172715,172716,172718,172720,172723,172725],{"class":98,"line":1162},[96,172717,159695],{"class":106},[96,172719,152],{"class":102},[96,172721,172722],{"class":106}," read_json(",[96,172724,151810],{"class":211},[96,172726,113],{"class":106},[96,172728,172729,172731,172733,172735,172737,172739,172741,172743,172745],{"class":98,"line":1177},[96,172730,170513],{"class":106},[96,172732,62658],{"class":211},[96,172734,51416],{"class":106},[96,172736,149867],{"class":211},[96,172738,12419],{"class":106},[96,172740,151451],{"class":211},[96,172742,51416],{"class":106},[96,172744,1096],{"class":155},[96,172746,165131],{"class":106},[96,172748,172749,172752,172754],{"class":98,"line":1183},[96,172750,172751],{"class":106},"write_json(",[96,172753,151810],{"class":211},[96,172755,172756],{"class":106},", students)\n",[38,172758,172760],{"id":172759},"_918-易错点","9.18 易错点",[50,172762,172763,172766,172771,172776,172779,172782],{},[53,172764,172765],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[53,172767,172768,172769,28364],{},"能指定异常类型就不要裸写 ",[93,172770,170873],{},[53,172772,172773,172775],{},[93,172774,171248],{}," 无论是否出错都会执行。",[53,172777,172778],{},"模块文件名不要和标准库重名。",[53,172780,172781],{},"导入自己写的模块时，要注意运行目录。",[53,172783,172784],{},"第三方包要安装到当前解释器或虚拟环境中。",[38,172786,172788],{"id":172787},"_919-本章练习","9.19 本章练习",[50,172790,172791,172794,172797,172803,172810],{},[53,172792,172793],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[53,172795,172796],{},"写函数读取文件，如果文件不存在则返回空字符串。",[53,172798,172211,172799,172802],{},[93,172800,172801],{},"math_utils.py","，实现加减乘除函数并导入使用。",[53,172804,172805,172806,172809],{},"创建一个 ",[93,172807,172808],{},"utils"," 包，把 JSON 读写函数放进去。",[53,172811,172812],{},"写一个程序，捕获除零异常和输入格式异常。",[5110,172814,172815],{},"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":18,"searchDepth":19,"depth":19,"links":172817},[172818,172819,172820,172821,172822,172823,172824,172825,172826,172827,172828,172834,172841,172843,172844,172845,172846,172847,172848],{"id":170670,"depth":19,"text":170671},{"id":170798,"depth":19,"text":170799},{"id":170847,"depth":19,"text":170848},{"id":170996,"depth":19,"text":170997},{"id":171168,"depth":19,"text":171169},{"id":171237,"depth":19,"text":171238},{"id":171348,"depth":19,"text":171349},{"id":171474,"depth":19,"text":171475},{"id":171599,"depth":19,"text":171600},{"id":171654,"depth":19,"text":171655},{"id":171753,"depth":19,"text":171754,"children":172829},[172830,172831,172832,172833],{"id":171757,"depth":1162,"text":171758},{"id":171791,"depth":1162,"text":171792},{"id":171830,"depth":1162,"text":171831},{"id":171909,"depth":1162,"text":171910},{"id":171932,"depth":19,"text":171933,"children":172835},[172836,172837,172838,172839,172840],{"id":171936,"depth":1162,"text":171937},{"id":172019,"depth":1162,"text":172020},{"id":172064,"depth":1162,"text":172065},{"id":172123,"depth":1162,"text":172124},{"id":172161,"depth":1162,"text":172162},{"id":172195,"depth":19,"text":172842},"9.13 if name == \"main\"",{"id":172288,"depth":19,"text":172289},{"id":172333,"depth":19,"text":172334},{"id":172444,"depth":19,"text":172445},{"id":172502,"depth":19,"text":172503},{"id":172759,"depth":19,"text":172760},{"id":172787,"depth":19,"text":172788},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170662,"description":23361},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172855,"title":172856,"body":172857,"description":173020,"extension":21,"meta":173021,"navigation":23,"path":173022,"seo":173023,"stem":173024,"__hash__":173025},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172858,"toc":173015},[172859,172862,172865,172868,172879,172881,172955,172958,172961,172964,172967,172970,172973,172976,172979,172982,172985],[10,172860,172856],{"id":172861},"python教程",[14,172863,172864],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[14,172866,172867],{},"建议学习环境：",[50,172869,172870,172873,172876],{},[53,172871,172872],{},"Python 版本：Python 3.10 及以上。",[53,172874,172875],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[53,172877,172878],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[38,172880,117057],{"id":117057},[50,172882,172883,172889,172895,172901,172907,172913,172919,172925,172931,172937,172943,172949],{},[53,172884,172885],{},[345,172886,172888],{"href":172887},".\u002Fch1-Python","Python环境与第一个程序",[53,172890,172891],{},[345,172892,172894],{"href":172893},".\u002Fch2","基础语法、变量与字符串",[53,172896,172897],{},[345,172898,172900],{"href":172899},".\u002Fch3","判断语句",[53,172902,172903],{},[345,172904,172906],{"href":172905},".\u002Fch4","循环语句",[53,172908,172909],{},[345,172910,172912],{"href":172911},".\u002Fch5","函数基础",[53,172914,172915],{},[345,172916,172918],{"href":172917},".\u002Fch6","数据容器",[53,172920,172921],{},[345,172922,172924],{"href":172923},".\u002Fch7","函数进阶",[53,172926,172927],{},[345,172928,172930],{"href":172929},".\u002Fch8","文件操作",[53,172932,172933],{},[345,172934,172936],{"href":172935},".\u002Fch9","异常、模块与包",[53,172938,172939],{},[345,172940,172942],{"href":172941},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[53,172944,172945],{},[345,172946,172948],{"href":172947},".\u002Fch11","面向对象基础",[53,172950,172951],{},[345,172952,172954],{"href":172953},".\u002Fch12","综合案例与复习路线",[38,172956,172957],{"id":172957},"学习路线",[14,172959,172960],{},"第一阶段：能运行程序。",[14,172962,172963],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[14,172965,172966],{},"第二阶段：能组织数据。",[14,172968,172969],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[14,172971,172972],{},"第三阶段：能封装逻辑。",[14,172974,172975],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[14,172977,172978],{},"第四阶段：能做小项目。",[14,172980,172981],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[38,172983,172984],{"id":172984},"参考资料",[50,172986,172987,172994,173001,173008],{},[53,172988,172989,172990],{},"黑马程序员 Python 入门教程推荐：",[345,172991,172992],{"href":172992,"rel":172993},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[23850],[53,172995,172996,172997],{},"Python 官方中文教程：",[345,172998,172999],{"href":172999,"rel":173000},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[23850],[53,173002,173003,173004],{},"Python 标准库文档：",[345,173005,173006],{"href":173006,"rel":173007},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[23850],[53,173009,173010,173011],{},"pyecharts 文档：",[345,173012,173013],{"href":173013,"rel":173014},"https:\u002F\u002Fpyecharts.org\u002F",[23850],{"title":18,"searchDepth":19,"depth":19,"links":173016},[173017,173018,173019],{"id":117057,"depth":19,"text":117057},{"id":172957,"depth":19,"text":172957},{"id":172984,"depth":19,"text":172984},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23363},"\u002Fwiki\u002F2024-10-10-python",{"title":172856,"description":173020},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331411855]